ecash-lib 4.3.3 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -101,3 +101,5 @@ console.log(toHex(rawTx));
101
101
  - 4.3.1 - Modify union type of payment outputs to include ecash-wallet template OP_RETURN [D18403](https://reviews.bitcoinabc.org/D18403)
102
102
  - 4.3.2 - Export additional token types [D18548](https://reviews.bitcoinabc.org/D18548)
103
103
  - 4.3.3 - Modify payment.GenesisAction to support minting NFTs (SLP_TOKEN_TYPE_NFT1_CHILD genesis txs) [D18557](https://reviews.bitcoinabc.org/D18557)
104
+ - 4.4.0 - Add `parse` methods to support parsing of OP_RETURN outputScript strings as returned by chronik-client [D18659](https://reviews.bitcoinabc.org/D18659)
105
+ - 4.5.0 - Add `fromTx` method to support creating a `TxBuilder` from a `Tx`, useful for creating a `TxBuilder` from a serialized partially-signed `Tx` in order to add postage and broadcast [D18838](https://reviews.bitcoinabc.org/D18838)
@@ -728,7 +728,7 @@ ByAQNwKYASAHIAg2ApQBIAcgCTYCkAEgB0HYAGogCBCPASAHKAJYIQIgBygCXCEBIAcgCDYCyAkg
728
728
  ByABNgK4CSABIAhHDQRBACEBIAghCgNAIAoEQCABIAJqIAEgCWooAgBBf3M2AgAgCkEBayEKIAFB
729
729
  BGohAQwBBQsLIAIgAigCAEEBcjYCACAIQQV0IgogDEYNBiACIAhBAnRqQQRrIgFFDQUgASABKAIA
730
730
  QX8gCiAMa3ZxNgIAIAwgCmshAQNAIAFFDQcgAiAIIAkgCBCeAg0IIAFBAWohAQwACwALIAkgCEEC
731
- dBDMAQwICyANIAhBkKbAABDDAQALQZC6wABBJkGcu8AAEOwBAAtBjtDAAEErIAdBzAlqQdi4wABB
731
+ dBDMAQwICyANIAhBkKbAABDDAQALQZC6wABBJkGcu8AAEOwBAAtBjtDAAEErIAdBzAlqQfy3wABB
732
732
  rLvAABCvAQALIAdBADYCzAkgB0HICWogB0G4CWogB0HMCWpB7MHAABDQAgALQcaKwABBK0H8wcAA
733
733
  EOwBAAtBfyEBA0AgAUEBaiIBIAhGBEBBBSEBIAghCgNAIAFFDQQgB0HQAGogAiAKIAdBkAFqEKUB
734
734
  IAFBAWshASAHKAJUIQogBygCUCECDAALAAULIAIgCCAJIAgQngJFDQALC0HQw8AAQShB2LLAABDs
@@ -1463,17 +1463,17 @@ ACABIABBAXI2AgQgACABaiAANgIADwsgAEH4AXFBgPbAAGohAgJ/QYj4wAAoAgAiA0EBIABBA3Z0
1463
1463
  IgBxRQRAQYj4wAAgACADcjYCACACDAEFCyACKAIICyEAIAIgATYCCCAAIAE2AgwgASACNgIMIAEg
1464
1464
  ADYCCA8LQfj1wAAoAgAiAQRAA0AgAEEBaiEAIAEoAggiAQ0ACwULQbD4wAAgAEH/HyAAQf8fSxs2
1465
1465
  AgAgAyAETw0AQaj4wABBfzYCAAsLngUCCn8BfiMAQaAQayIIJAAgCEEcaiIGQQBBgBD8CwAgCEEQ
1466
- aiAFQQF0IAZBgARBvLvAABCjAiAIQQhqIAUgCCgCECIKIAgoAhQiCUHgucAAEKMCIAgoAgxBAnQh
1466
+ aiAFQQF0IAZBgARBvLvAABCjAiAIQQhqIAUgCCgCECIKIAgoAhQiCUGEucAAEKMCIAgoAgxBAnQh
1467
1467
  ByAIKAIIIQYDQCAHBEAgBkEANgIAIAdBBGshByAGQQRqIQYMAQULCyAJIAUgBSAJSxshDCAKIAVB
1468
- AnQiDmohD0EAIQcgBSELIAkhBgJAA0AgByAORg0BIAIgB2ooAgAhDSAIIAUgByAKaiAGQfC5wAAQ
1468
+ AnQiDmohD0EAIQcgBSELIAkhBgJAA0AgByAORg0BIAIgB2ooAgAhDSAIIAUgByAKaiAGQZS5wAAQ
1469
1469
  owIgCCgCACABIA0gBRCuASENIAYgDEcEQCAHIA9qIA02AgAgC0EBaiELIAZBAWshBiAHQQRqIQcM
1470
- AQULCyALIAlBgLrAABDDAQALIAAhBiAKIQAgBUUgBUEBdCAJR3IEf0EABSAFQQJ0IQkgBCgCACEK
1470
+ AQULCyALIAlBpLnAABDDAQALIAAhBiAKIQAgBUUgBUEBdCAJR3IEf0EABSAFQQJ0IQkgBCgCACEK
1471
1471
  IAAhASAFIQJBACEEA0AgAgRAIAEgCWoiCyABIAMgASgCACAKbCAFEK4BIARqIgcgCygCACILaiIM
1472
1472
  NgIAIAQgB0EAR3IgCyAMT3EhBCABQQRqIQEgAkEBayECDAEFAkAgBiAAIAVBAnRqIgE1AgAgAzUC
1473
1473
  AH0iED4CACAGQQRqIQAgA0EEaiEDIAVBASAFQQFLG0EBayECIAFBBGohCQNAIBBCIIinQQFxIQog
1474
1474
  AkUNASAAIAk1AgAgAzUCACAKrXx9IhA+AgAgAkEBayECIABBBGohACAJQQRqIQkgA0EEaiEDDAAL
1475
1475
  AAsLCyAEIAprIgBBf3MhAgN/IAUEfyAGIAAgASgCAHEgBigCACACcXI2AgAgAUEANgIAIAZBBGoh
1476
- BiABQQRqIQEgBUEBayEFDAEFQQELCwtBAUcEQEGO0MAAQSsgCEGfEGpB2LjAAEHQucAAEK8BAAUL
1476
+ BiABQQRqIQEgBUEBayEFDAEFQQELCwtBAUcEQEGO0MAAQSsgCEGfEGpB/LfAAEH0uMAAEK8BAAUL
1477
1477
  IAhBoBBqJAALyAUBBn8jAEGwAWsiBiQAIAZBEGogARD9ASAGKAIUIQkgBkEIaiACIAMQ6AEgBigC
1478
1478
  DCEDIAYoAgghCiAGIAQgBRDoASAGKAIEIQQgBigCACEFIAZBjAFqIAogAxBmAkAgBi0AjAFBAUYE
1479
1479
  QCAGQSRqIAZBmAFqKAIANgIAIAYgBikCkAE3AhwgBkEBNgIYDAEFCyAGQTBqIAZBlQFqIgEpAAA3
@@ -2356,7 +2356,7 @@ EBCYAgsMACAAKAIAIAEQ6gILDQAgAEHEksAAIAEQOAsKACAAIAFBARAHCwoAIAAgAUEBEAYLCQAg
2356
2356
  ACABEAEACw0AIAFBudDAAEECEBoLCwAgACABIAEQ+QILDgAgAEHkxsAAIAEQiAELDgAgAEGUysAA
2357
2357
  IAEQiAELCwAgACAAIAAQ3QILDAAgACABKQIANwMACwsAIAAgASACENwCCwsAIAAgAUEwEJkCCwsA
2358
2358
  IAAgASABENwCCwsAIAAgAUEgEJkCCwwAIABBwIjAABCFAgsMACAAQfSOwAAQhQILCQAgAEEANgIA
2359
- CwcAIAAoAgALC7VvLgBBgIDAAAuhCS9hcHAvbW9kdWxlcy9lY2FzaC1zZWNwMjU2azEvc3JjL2Vj
2359
+ CwcAIAAoAgALC7hvLgBBgIDAAAuhCS9hcHAvbW9kdWxlcy9lY2FzaC1zZWNwMjU2azEvc3JjL2Vj
2360
2360
  ZHNhL3NlcmlhbGl6ZWRfc2lnbmF0dXJlLnJzAABIAAAAYXR0ZW1wdCB0byBzZXQgbGVuZ3RoIHRv
2361
2361
  ICBidXQgdGhlIG1heGltdW0gaXMgAAAARAAQABkAAABdABAAFAAAAAAAEAA+AAAAtQAAAAkAAABm
2362
2362
  ZmkgcmV0dXJuZWQgaW52YWxpZCBSZWNvdmVyeUlkIQAJEAAyAAAAaQAAAB4AAABhc3NlcnRpb24g
@@ -2467,7 +2467,7 @@ cHVibGljX2tleS5yc3cXEABhAAAAuAAAAFgAAAB3FxAAYQAAAN8AAAAXAAAAdxcQAGEAAADhAAAA
2467
2467
  HgAAAGFzc2VydGlvbiBmYWlsZWQ6IHBhZGRpbmcuaXRlcigpLmFsbCh8JmJ8IGIgPT0gMCkAAAB3
2468
2468
  FxAAYQAAAOIAAAAFAAAAUEtDUzFkaWdlc3RfYWxnZGlnZXN0aW5mb19wcmVmaXjIGRAAxBMQAA8A
2469
2469
  AAAAAAAADAAAAAQAAAA3AAAAOAAAADkAAABsGBAAeBgQAAAIAABYJhAA0xMQABMAAACcGBAAeBgQ
2470
- AAAIAADwJhAA5hMQABMAAAC0GBAAeBgQAAAIAAAAHBAA+RMQABMAAADMGBAAeBgQAAAIAAAvdXNy
2470
+ AAAIAADwJhAA5hMQABMAAAC0GBAAeBgQAAAIAAC4HBAA+RMQABMAAADMGBAAeBgQAAAIAAAvdXNy
2471
2471
  L2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3
2472
2472
  Zi9yaW5nLTAuMTcuMTQvc3JjL2FyaXRobWV0aWMvYmlnaW50LnJz5BgQAGQAAABdAAAAEwAAAOQY
2473
2473
  EABkAAAANAMAAAUAAADkGBAAZAAAADsDAAArAAAA5BgQAGQAAAA8AwAAKAAAAOQYEABkAAAAPQMA
@@ -2481,135 +2481,135 @@ cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3JpbmctMC4xNy4xNC9zcmMv
2481
2481
  ZGlnZXN0L2R5bnN0YXRlLnJzAAD8GhAAYgAAADkAAAANAAAA/BoQAGIAAABKAAAADQAAAPwaEABi
2482
2482
  AAAAWwAAAA0AAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8t
2483
2483
  MTk0OWNmOGM2YjViNTU3Zi9yaW5nLTAuMTcuMTQvc3JjL2RpZ2VzdC5ycwAAAJAbEABZAAAAGAIA
2484
- AA8AQYi4wAALSwjJvPNn5glqO6fKhIWuZ7sr+JT+cvNuPPE2HV869U+l0YLmrX9SDlEfbD4rjGgF
2485
- m2u9Qfur2YMfeSF+ExnN4Fs7AAAAQAAAAANAgABB4LjAAAuADAEAAAA0AAAAL3Vzci9sb2NhbC9j
2486
- YXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcmluZy0w
2487
- LjE3LjE0L3NyYy9hcml0aG1ldGljL21vbnRnb21lcnkucnNoHBAAaAAAABgBAAAGAAAAaBwQAGgA
2488
- AAAlAQAABgAAAGgcEABoAAAAKAEAACYAAABoHBAAaAAAACcBAAAJAAAAYXNzZXJ0aW9uIGZhaWxl
2489
- ZDogbWluX2JpdHMgPj0gTUlOX0JJVFMvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRl
2490
- eC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9yaW5nLTAuMTcuMTQvc3JjL3JzYS9wdWJsaWNf
2491
- bW9kdWx1cy5ycwA2HRAAZQAAAD4AAAAJAAAANh0QAGUAAABBAAAADgAAAGgcEABoAAAA6wAAAB8A
2492
- AABVbnNwZWNpZmllZAAirijXmC+KQs1l7yORRDdxLztN7M/7wLW824mBpdu16Ti1SPNbwlY5GdAF
2493
- tvER8VmbTxmvpII/khiBbdrVXhyrQgIDo5iqB9i+b3BFAVuDEoyy5E6+hTEk4rT/1cN9DFVviXvy
2494
- dF2+crGWFjv+sd6ANRLHJacG3JuUJmnPdPGbwdJK8Z7BaZvk4yVPOIZHvu+11YyLxp3BD2WcrHfM
2495
- oQwkdQIrWW8s6S2D5KZuqoR0StT7Qb3cqbBctVMRg9qI+Xar32buUlE+mBAytC1txjGoPyH7mMgn
2496
- A7DkDu++x39Zv8KPqD3zC+DGJacKk0eRp9VvggPgUWPKBnBuDgpnKSkU/C/SRoUKtycmySZcOCEb
2497
- Lu0qxFr8bSxN37OVnRMNOFPeY6+LVHMKZaiydzy7Cmp25q7tRy7JwoE7NYIUhSxykmQD8Uyh6L+i
2498
- ATBCvEtmGqiRl/jQcItLwjC+VAajUWzHGFLv1hnoktEQqWVVJAaZ1iogcVeFNQ70uNG7MnCgahDI
2499
- 0NK4FsGkGVOrQVEIbDcemeuO30x3SCeoSJvhtbywNGNaycWzDBw5y4pB40qq2E5z42N3T8qcW6O4
2500
- stbzby5o/LLvXe6Cj3RgLxdDb2OleHKr8KEUeMiE7DlkGggCx4woHmMj+v++kOm9gt7rbFCkFXnG
2501
- svej+b4rU3Lj8nhxxpxhJurOPifKB8LAIce4htEe6+DN1n3a6njRbu5/T331um8Xcqpn8AammMii
2502
- xX1jCq4N+b4EmD8RG0ccEzULcRuEfQQj9XfbKJMkx0B7q8oyvL7JFQq+njxMDRCcxGcdQ7ZCPsu+
2503
- 1MVMKn5l/Jwpf1ns+tY6q2/LXxdYR0qMGURsTCIQAJwjEAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lz
2504
- dHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9yaW5nLTAuMTcuMTQvc3Jj
2505
- L2FyaXRobWV0aWMvYmlnaW50L21vZHVsdXMucnNgIBAAbAAAAFwAAAAuAAAAYCAQAGwAAABiAAAA
2506
- JgAAAGAgEABsAAAAkwAAAAkAAABgIBAAbAAAAKQAAAAdAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdp
2507
- c3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcmluZy0wLjE3LjE0L3Ny
2508
- Yy9lYy9zdWl0ZV9iL29wcy5ycwAAAAwhEABhAAAABgEAADQAAAAMIRAAYQAAAAYBAAAeAAAADCEQ
2509
- AGEAAAANAQAANAAAAAwhEABhAAAADQEAAB4AAAAMIRAAYQAAABQBAAA0AAAADCEQAGEAAAAUAQAA
2510
- HgAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGVhc3NlcnRpb24gZmFp
2511
- bGVkOiAhc2VsZi5zY2FsYXJfb3BzLmNvbW1vbi5pc196ZXJvKGEpDCEQAGEAAADYAQAACQAAAAwh
2512
- EABhAAAAYQIAAAUAAAA8AAAAPQAAAP///////////////wBB7MTAAAsIAQAAAP////8AQYTFwAAL
2513
- HQMAAAAAAAAA//////v////+//////////3///8EAEG0xcAACyBRJWP8wsq584SeF6et+ua8////
2514
- //////8AAAAA/////wBB5MXAAAsN/P//////////////AwBB/MXAAAsIBAAAAPz///8AQZTGwAAL
2515
- IN+9xCli35zYkDCEeM0F8KzWLiH3qyCi5TRIhwQdBjDcAEHIxsAAC0RMIhAAPgAAAD8AAABAAAAA
2516
- QQAAAEwiEABCAAAAXCMQAEMAAACi7nm+lUwkg6ZvvUmceZlGWexrKzmyRSggVtnzlC3hZgBBnMfA
2517
- AAtZHAAAAB0AAAD/////AAAAAAAAAAD//////v//////////////////////////////////////
2518
- //8BAAAA/v///wAAAAACAAAAAAAAAP7///8AAAAAAgAAAAEAQYTIwAALsARzKcXMahns7HqnsEiy
2519
- DRpY3y039IFNY8f////////////////////////////////8////AwAAAAAAAAD8////+///////
2520
- ///////////////////////////////////MLUGdcYgRCOwyTHrYrSn3LgIgGZsg8nfiipOU7ks3
2521
- 45QgAh/0ISu2+b9PYEsRCM0BAAAAKLXASWZ10D04ztag4njjIG5NG1T8OpyH/w6jWYSGVGQr3k5h
2522
- I/cvgRMVninCrTpN/qQDS609BCOsqbR7v6i/oVCwgy5W562L2f/0aBlSw8ZAqGk5JgKA3enFFVrC
2523
- q3grnCMQAEQAAABFAAAARgAAAEcAAACcIxAASAAAAAwlEABJAAAAqQm0GSSbMS0ZpBrf5YE9/0cp
2524
- uPw6SD68xRyrShdJDdSVaCYoeluwPyG/OSsB7oQML3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9z
2525
- cmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcmluZy0wLjE3LjE0L3NyYy9lYy9z
2526
- dWl0ZV9iL29wcy9wMzg0LnJzAABMJRAAZgAAAAgBAAA8AAAAAgEGAwMBBQEFBAQFCgcDAgUABAUE
2527
- BAUGBAYEBwUFCgYJBgQFBgQDAAcFBwIFAwUHBQUEBQUDAwEHAQYFBAIDAQQBBAEGAgUCBQICAQQA
2528
- AABcIxAAWCAQAEoAAABLAAAArtqcAz01Rgx7YehYUwUZQwBB2MzAAAskAQAAAGfmCWqFrme7cvNu
2529
- PDr1T6V/Ug5RjGgFm6vZgx8ZzeBbAEGgzcAACzhMAAAAIAAAAAEgQAAAAAAADCUQAFwgEABNAAAA
2530
- TgAAAIzWOjOW5hMThVhPt0zy5acf0sgLfrKcOABB+M3AAAv/CNieBcFdnbvLB9V8NiopmmIX3XAw
2531
- WgFZkTlZDvfY7C8VMQvA/2cmM2cRFVhoh0q0jqeP+WQNLgzbpE/6vh1ItUc7AAAAQAAAAAIwgAAA
2532
- AAAAFCYQAFgmEABPAAAAAAAAABQmEADwJhAATwAAAAIAAACwJhAAWCYQAE8AAAADAAAAsCYQAPAm
2533
- EABPAAAABAAAAEVDRFNBX1AyNTZfU0hBMjU2X0FTTjFFQ0RTQV9QMjU2X1NIQTI1Nl9GSVhFREVD
2534
- RFNBX1AyNTZfU0hBMzg0X0FTTjFFQ0RTQV9QMzg0X1NIQTI1Nl9BU04xRUNEU0FfUDM4NF9TSEEz
2535
- ODRfQVNOMUVDRFNBX1AzODRfU0hBMzg0X0ZJWEVEY2FsbGVkIGBSZXN1bHQ6OnVud3JhcCgpYCBv
2536
- biBhbiBgRXJyYCB2YWx1ZSgpL3J1c3RjLzE3MDY3ZTlhYzZkN2VjYjcwZTUwZjkyYzE5NDRlNTQ1
2537
- MTg4ZDIzNTkvbGlicmFyeS9jb3JlL3NyYy9zbGljZS9pdGVyLnJzAAAAOygQAE4AAACDBwAAEQAA
2538
- AC9ydXN0Yy8xNzA2N2U5YWM2ZDdlY2I3MGU1MGY5MmMxOTQ0ZTU0NTE4OGQyMzU5L2xpYnJhcnkv
2539
- YWxsb2Mvc3JjL3N0cmluZy5ycwCcKBAASwAAAH0FAAAbAAAA3CkQAFAAAAAuAgAAEQAAAC9ydXN0
2540
- L2RlcHMvZGxtYWxsb2MtMC4yLjcvc3JjL2RsbWFsbG9jLnJzYXNzZXJ0aW9uIGZhaWxlZDogcHNp
2541
- emUgPj0gc2l6ZSArIG1pbl9vdmVyaGVhZAAIKRAAKQAAAKgEAAAJAAAAYXNzZXJ0aW9uIGZhaWxl
2542
- ZDogcHNpemUgPD0gc2l6ZSArIG1heF9vdmVyaGVhZAAACCkQACkAAACuBAAADQAAAFRyaWVkIHRv
2543
- IHNocmluayB0byBhIGxhcmdlciBjYXBhY2l0ebApEAAkAAAAL3J1c3RjLzE3MDY3ZTlhYzZkN2Vj
2544
- YjcwZTUwZjkyYzE5NDRlNTQ1MTg4ZDIzNTkvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy9tb2Qu
2545
- cnPcKRAAUAAAALkCAAAJAAAAbnVsbCBwb2ludGVyIHBhc3NlZCB0byBydXN0cmVjdXJzaXZlIHVz
2546
- ZSBvZiBhbiBvYmplY3QgZGV0ZWN0ZWQgd2hpY2ggd291bGQgbGVhZCB0byB1bnNhZmUgYWxpYXNp
2547
- bmcgaW4gcnVzdC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0x
2548
- OTQ5Y2Y4YzZiNWI1NTdmL3dhc20tYmluZGdlbi0wLjIuOTIvc3JjL2NvbnZlcnQvc2xpY2VzLnJz
2549
- AACmKhAAaAAAAN4AAAABAAAABAAAAAYAAAAGAAAABgAAAAoAAAApGhAALRoQADMaEAA5GhAAPxoQ
2550
- ABYAAAAXAAAAFgAAABYAAAAWAAAAFwAAAIgnEACeJxAAtScQAMsnEADhJxAA9ycQAEGA18AAC5gB
2551
- USVj/MLKufOEnhenrfrmvP//////////AAAAAP////9PvADuqsjRzAAAAAAAAAAA/////wAAAAAA
2552
- AAAA//////7/////////////////////////////////////////cynFzGoZ7Ox6p7BIsg0aWN8t
2553
- N/SBTWPH////////////////////////////////RdyP6Ilg1G4AQaPYwAALMoAAAAAAAAAAgP//
2554
- /3//////////////////////////////////////////fwEAAAABAEHg2MAACxEBAAAA////////
2555
- //8AAAAAAQBBkNnAAAsBAQBBnNnAAAueD/////////////////7///8AAAAAPBSpGNQw53kBtu1f
2556
- /JW6dRAlYncrc/t5xlU3pXZfkBgKVpXOV1Py3VzkGbrkuEqLJfMh3YiG6NKFXYglGP9xhbvSoBbF
2557
- L5JPmTRiGmzBXA2LLMZXOs9Bkn9mG/1haV4vlxeg9QvHFVySYZVgTbQgPVLbHwc3G5EEew9vjRb5
2558
- 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
- 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
- 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
- 7RkYPKOBHvpSxlbA1o8nEU+GcAis1RnVM7XSNHdXYsDdvaH2ijtnk8Kep5p8flexZrLDUeZtu7NZ
2562
- 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
- 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
- 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
- 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
- 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
- K5MVOZvFtWj8/HCCWaL1hcO73JrRqvNEcQyu+4OZiVXd9C+4dI6LuJPJNOdxQDzg0ioywEOvnnqa
2568
- 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
- 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
- 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
- WNCV0MLAhevdlj0IuZtEQHqNK2mE4R7uLk80w5t0MJFCVuNaDbFCpUgnG0lVKnMQs2WmnEbBTBpf
2572
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- oizI5OBE3am3c87YuQGpjORzbgNs8FNxpOEh5OHJGASSeTtsuHJ2XXCHzr2Td5q3ypPnWvIMnYZt
2580
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
2588
- UUACWjjOR2Gl7NGRkMYqvCPVlL4PGux5/a6NLZecs8791rw7lRr2WPxfV/UgtPetxIbZ27ee8xUU
2589
- iKqBbJeNufX84m59cS/PXUdlVNC7YGjE0ySOBAQEBAQEAQEEBABB8OnAAAsJUQAAAAAAAABSAEGI
2590
- 6sAAC80DUQAAAAAAAABJbnZhbGlkIGZsYWdzAGN0eCAhPSBzZWNwMjU2azFfY29udGV4dF9ub19w
2591
- cmVjb21wAHNlbGYgdGVzdCBmYWlsZWQARm9yIHRoaXMgc2FtcGxlLCB0aGlzIDYzLWJ5dGUgc3Ry
2592
- aW5nIHdpbGwgYmUgdXNlZCBhcyBpbnB1dCBkYXRhAChmbGFncyAmIFNFQ1AyNTZLMV9GTEFHU19U
2593
- WVBFX01BU0spID09IFNFQ1AyNTZLMV9GTEFHU19UWVBFX0NPTVBSRVNTSU9OAHJlY2lkID49IDAg
2594
- JiYgcmVjaWQgPD0gMwBzZWNwMjU2azFfZWNtdWx0X2NvbnRleHRfaXNfYnVpbHQoJmN0eC0+ZWNt
2595
- dWx0X2N0eCkAc2VjcDI1NmsxX2VjbXVsdF9nZW5fY29udGV4dF9pc19idWlsdCgmY3R4LT5lY211
2596
- bHRfZ2VuX2N0eCkAIXNlY3AyNTZrMV9mZV9pc196ZXJvKCZnZS0+eCkAKm91dHB1dGxlbiA+PSAo
2597
- KGZsYWdzICYgU0VDUDI1NksxX0ZMQUdTX0JJVF9DT01QUkVTU0lPTikgPyAzM3UgOiA2NXUpAFIA
2598
- AAAAAAAAUAAAAFAAQeDtwAALEEVDRFNBK0RFUiAgICAgICAAQZjuwAALAQEAQcDuwAALEEVDRFNB
2599
- K1JlY292ZXJ5ICAAQeDuwAALbvCKeMu67ggrBSrgcI8y+h5QxcQhqncrpdu0BqLqa+NCmBf4FluB
2600
- AgCflY3i3LINAPybAgcLhw4AXCkGWsW6CwDc+X5mvnkAALjUEPuP0AcAxJlBVWiKBAC0F/2oCBEO
2601
- AMC/T9pVRgwAoyZ32jpIAEHg78AACzBUaGUgc2NhbGFyIGZvciB0aGlzIHggaXMgdW5rbm93bgAA
2602
- AAAAAAAAL/z///7///8AQanwwAALEAEAAAAAAADPytot4vbHJwcAQeDwwAALFO66yS9yoQ0AAkT8
2603
- dQuVAQAjUUUBAEGI8cAAC0BBQTbQjF4CAP27A4r0ag4A3K66/v//DwD///////8PAP///////wAA
2604
- QUE20Ixe0j/ugCK9mnO7Kuv/////////AEHR8cAACxgBAAAAAAAAwU53qpkA8jQAAQAAAAAAAAEA
2605
- QZDywAALAQEAQcDywAALAYAAQYDzwAALEMPkvwqpf1RvKIgOAdZ+Q+QAQaDzwAALpgEsVrE9qM1l
2606
- 1200dAfFCiiK/v///////////////////zGw20WaIJPof8rocRSKqj0V64SS5JBs6M1r1Kch0oYw
2607
- cX/Eiq60cRXGBvWdrAgSIsTkvwqpf1RvKIgOAdZ+Q+RyvSMbfJYC33hmgSDqIi4SWmQSiAIcJqXg
2608
- MFzATK1jU+4BlXEobAkAE1yZWC9RBwBJ8JzpNDQMAOp5ROYGcQAAfGUraul6AEHQ9MAACxBTY2hu
2609
- b3JyK1NIQTI1NiAgAEHk9MAACwNANBAAKgRuYW1lASMB6QIfX193YmluZGdlbl9hZGRfdG9fc3Rh
2610
- Y2tfcG9pbnRlcgCIAQlwcm9kdWNlcnMCCGxhbmd1YWdlAgRSdXN0AANDOTkADHByb2Nlc3NlZC1i
2611
- eQQFcnVzdGMdMS44Ny4wICgxNzA2N2U5YWMgMjAyNS0wNS0wOSkMRGViaWFuIGNsYW5nBjE0LjAu
2612
- NgZ3YWxydXMGMC4yMC4zDHdhc20tYmluZGdlbgYwLjIuOTIAaw90YXJnZXRfZmVhdHVyZXMGKw9t
2613
- dXRhYmxlLWdsb2JhbHMrE25vbnRyYXBwaW5nLWZwdG9pbnQrC2J1bGstbWVtb3J5KwhzaWduLWV4
2614
- dCsPcmVmZXJlbmNlLXR5cGVzKwptdWx0aXZhbHVl
2484
+ AA8AQYS4wAALrQEBAAAANAAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNy
2485
+ YXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3JpbmctMC4xNy4xNC9zcmMvYXJpdGhtZXRpYy9tb250
2486
+ Z29tZXJ5LnJzDBwQAGgAAAAYAQAABgAAAAwcEABoAAAAJQEAAAYAAAAMHBAAaAAAACgBAAAmAAAA
2487
+ DBwQAGgAAAAnAQAACQBBwLnAAAugCwjJvPNn5glqO6fKhIWuZ7sr+JT+cvNuPPE2HV869U+l0YLm
2488
+ rX9SDlEfbD4rjGgFm2u9Qfur2YMfeSF+ExnN4Fs7AAAAQAAAAANAgAAAAAAAYXNzZXJ0aW9uIGZh
2489
+ aWxlZDogbWluX2JpdHMgPj0gTUlOX0JJVFMvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9p
2490
+ bmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9yaW5nLTAuMTcuMTQvc3JjL3JzYS9wdWJs
2491
+ aWNfbW9kdWx1cy5ycwA2HRAAZQAAAD4AAAAJAAAANh0QAGUAAABBAAAADgAAAAwcEABoAAAA6wAA
2492
+ AB8AAABVbnNwZWNpZmllZAAirijXmC+KQs1l7yORRDdxLztN7M/7wLW824mBpdu16Ti1SPNbwlY5
2493
+ GdAFtvER8VmbTxmvpII/khiBbdrVXhyrQgIDo5iqB9i+b3BFAVuDEoyy5E6+hTEk4rT/1cN9DFVv
2494
+ iXvydF2+crGWFjv+sd6ANRLHJacG3JuUJmnPdPGbwdJK8Z7BaZvk4yVPOIZHvu+11YyLxp3BD2Wc
2495
+ rHfMoQwkdQIrWW8s6S2D5KZuqoR0StT7Qb3cqbBctVMRg9qI+Xar32buUlE+mBAytC1txjGoPyH7
2496
+ mMgnA7DkDu++x39Zv8KPqD3zC+DGJacKk0eRp9VvggPgUWPKBnBuDgpnKSkU/C/SRoUKtycmySZc
2497
+ OCEbLu0qxFr8bSxN37OVnRMNOFPeY6+LVHMKZaiydzy7Cmp25q7tRy7JwoE7NYIUhSxykmQD8Uyh
2498
+ 6L+iATBCvEtmGqiRl/jQcItLwjC+VAajUWzHGFLv1hnoktEQqWVVJAaZ1iogcVeFNQ70uNG7MnCg
2499
+ ahDI0NK4FsGkGVOrQVEIbDcemeuO30x3SCeoSJvhtbywNGNaycWzDBw5y4pB40qq2E5z42N3T8qc
2500
+ W6O4stbzby5o/LLvXe6Cj3RgLxdDb2OleHKr8KEUeMiE7DlkGggCx4woHmMj+v++kOm9gt7rbFCk
2501
+ FXnGsvej+b4rU3Lj8nhxxpxhJurOPifKB8LAIce4htEe6+DN1n3a6njRbu5/T331um8Xcqpn8Aam
2502
+ mMiixX1jCq4N+b4EmD8RG0ccEzULcRuEfQQj9XfbKJMkx0B7q8oyvL7JFQq+njxMDRCcxGcdQ7ZC
2503
+ Psu+1MVMKn5l/Jwpf1ns+tY6q2/LXxdYR0qMGURsTCIQAJwjEAAvdXNyL2xvY2FsL2NhcmdvL3Jl
2504
+ Z2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9yaW5nLTAuMTcuMTQv
2505
+ c3JjL2FyaXRobWV0aWMvYmlnaW50L21vZHVsdXMucnNgIBAAbAAAAFwAAAAuAAAAYCAQAGwAAABi
2506
+ AAAAJgAAAGAgEABsAAAAkwAAAAkAAABgIBAAbAAAAKQAAAAdAAAAL3Vzci9sb2NhbC9jYXJnby9y
2507
+ ZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcmluZy0wLjE3LjE0
2508
+ L3NyYy9lYy9zdWl0ZV9iL29wcy5ycwAAAAwhEABhAAAABgEAADQAAAAMIRAAYQAAAAYBAAAeAAAA
2509
+ DCEQAGEAAAANAQAANAAAAAwhEABhAAAADQEAAB4AAAAMIRAAYQAAABQBAAA0AAAADCEQAGEAAAAU
2510
+ AQAAHgAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGVhc3NlcnRpb24g
2511
+ ZmFpbGVkOiAhc2VsZi5zY2FsYXJfb3BzLmNvbW1vbi5pc196ZXJvKGEpDCEQAGEAAADYAQAACQAA
2512
+ AAwhEABhAAAAYQIAAAUAAAA8AAAAPQAAAP///////////////wBB7MTAAAsIAQAAAP////8AQYTF
2513
+ wAALHQMAAAAAAAAA//////v////+//////////3///8EAEG0xcAACyBRJWP8wsq584SeF6et+ua8
2514
+ //////////8AAAAA/////wBB5MXAAAsN/P//////////////AwBB/MXAAAsIBAAAAPz///8AQZTG
2515
+ wAALIN+9xCli35zYkDCEeM0F8KzWLiH3qyCi5TRIhwQdBjDcAEHIxsAAC0RMIhAAPgAAAD8AAABA
2516
+ AAAAQQAAAEwiEABCAAAAXCMQAEMAAACi7nm+lUwkg6ZvvUmceZlGWexrKzmyRSggVtnzlC3hZgBB
2517
+ nMfAAAtZHAAAAB0AAAD/////AAAAAAAAAAD//////v//////////////////////////////////
2518
+ //////8BAAAA/v///wAAAAACAAAAAAAAAP7///8AAAAAAgAAAAEAQYTIwAALsARzKcXMahns7Hqn
2519
+ sEiyDRpY3y039IFNY8f////////////////////////////////8////AwAAAAAAAAD8////+///
2520
+ ///////////////////////////////////////MLUGdcYgRCOwyTHrYrSn3LgIgGZsg8nfiipOU
2521
+ 7ks345QgAh/0ISu2+b9PYEsRCM0BAAAAKLXASWZ10D04ztag4njjIG5NG1T8OpyH/w6jWYSGVGQr
2522
+ 3k5hI/cvgRMVninCrTpN/qQDS609BCOsqbR7v6i/oVCwgy5W562L2f/0aBlSw8ZAqGk5JgKA3enF
2523
+ FVrCq3grnCMQAEQAAABFAAAARgAAAEcAAACcIxAASAAAAAwlEABJAAAAqQm0GSSbMS0ZpBrf5YE9
2524
+ /0cpuPw6SD68xRyrShdJDdSVaCYoeluwPyG/OSsB7oQML3Vzci9sb2NhbC9jYXJnby9yZWdpc3Ry
2525
+ eS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcmluZy0wLjE3LjE0L3NyYy9l
2526
+ Yy9zdWl0ZV9iL29wcy9wMzg0LnJzAABMJRAAZgAAAAgBAAA8AAAAAgEGAwMBBQEFBAQFCgcDAgUA
2527
+ BAUEBAUGBAYEBwUFCgYJBgQFBgQDAAcFBwIFAwUHBQUEBQUDAwEHAQYFBAIDAQQBBAEGAgUCBQIC
2528
+ AQQAAABcIxAAWCAQAEoAAABLAAAArtqcAz01Rgx7YehYUwUZQwBB2MzAAAskAQAAAGfmCWqFrme7
2529
+ cvNuPDr1T6V/Ug5RjGgFm6vZgx8ZzeBbAEGgzcAACzhMAAAAIAAAAAEgQAAAAAAADCUQAFwgEABN
2530
+ AAAATgAAAIzWOjOW5hMThVhPt0zy5acf0sgLfrKcOABB+M3AAAv/CNieBcFdnbvLB9V8NiopmmIX
2531
+ 3XAwWgFZkTlZDvfY7C8VMQvA/2cmM2cRFVhoh0q0jqeP+WQNLgzbpE/6vh1ItUc7AAAAQAAAAAIw
2532
+ gAAAAAAAFCYQAFgmEABPAAAAAAAAABQmEADwJhAATwAAAAIAAACwJhAAWCYQAE8AAAADAAAAsCYQ
2533
+ APAmEABPAAAABAAAAEVDRFNBX1AyNTZfU0hBMjU2X0FTTjFFQ0RTQV9QMjU2X1NIQTI1Nl9GSVhF
2534
+ REVDRFNBX1AyNTZfU0hBMzg0X0FTTjFFQ0RTQV9QMzg0X1NIQTI1Nl9BU04xRUNEU0FfUDM4NF9T
2535
+ SEEzODRfQVNOMUVDRFNBX1AzODRfU0hBMzg0X0ZJWEVEY2FsbGVkIGBSZXN1bHQ6OnVud3JhcCgp
2536
+ YCBvbiBhbiBgRXJyYCB2YWx1ZSgpL3J1c3RjLzE3MDY3ZTlhYzZkN2VjYjcwZTUwZjkyYzE5NDRl
2537
+ NTQ1MTg4ZDIzNTkvbGlicmFyeS9jb3JlL3NyYy9zbGljZS9pdGVyLnJzAAAAOygQAE4AAACDBwAA
2538
+ EQAAAC9ydXN0Yy8xNzA2N2U5YWM2ZDdlY2I3MGU1MGY5MmMxOTQ0ZTU0NTE4OGQyMzU5L2xpYnJh
2539
+ cnkvYWxsb2Mvc3JjL3N0cmluZy5ycwCcKBAASwAAAH0FAAAbAAAA3CkQAFAAAAAuAgAAEQAAAC9y
2540
+ dXN0L2RlcHMvZGxtYWxsb2MtMC4yLjcvc3JjL2RsbWFsbG9jLnJzYXNzZXJ0aW9uIGZhaWxlZDog
2541
+ cHNpemUgPj0gc2l6ZSArIG1pbl9vdmVyaGVhZAAIKRAAKQAAAKgEAAAJAAAAYXNzZXJ0aW9uIGZh
2542
+ aWxlZDogcHNpemUgPD0gc2l6ZSArIG1heF9vdmVyaGVhZAAACCkQACkAAACuBAAADQAAAFRyaWVk
2543
+ IHRvIHNocmluayB0byBhIGxhcmdlciBjYXBhY2l0ebApEAAkAAAAL3J1c3RjLzE3MDY3ZTlhYzZk
2544
+ N2VjYjcwZTUwZjkyYzE5NDRlNTQ1MTg4ZDIzNTkvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy9t
2545
+ b2QucnPcKRAAUAAAALkCAAAJAAAAbnVsbCBwb2ludGVyIHBhc3NlZCB0byBydXN0cmVjdXJzaXZl
2546
+ IHVzZSBvZiBhbiBvYmplY3QgZGV0ZWN0ZWQgd2hpY2ggd291bGQgbGVhZCB0byB1bnNhZmUgYWxp
2547
+ YXNpbmcgaW4gcnVzdC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5p
2548
+ by0xOTQ5Y2Y4YzZiNWI1NTdmL3dhc20tYmluZGdlbi0wLjIuOTIvc3JjL2NvbnZlcnQvc2xpY2Vz
2549
+ LnJzAACmKhAAaAAAAN4AAAABAAAABAAAAAYAAAAGAAAABgAAAAoAAAApGhAALRoQADMaEAA5GhAA
2550
+ PxoQABYAAAAXAAAAFgAAABYAAAAWAAAAFwAAAIgnEACeJxAAtScQAMsnEADhJxAA9ycQAEGA18AA
2551
+ C5gBUSVj/MLKufOEnhenrfrmvP//////////AAAAAP////9PvADuqsjRzAAAAAAAAAAA/////wAA
2552
+ AAAAAAAA//////7/////////////////////////////////////////cynFzGoZ7Ox6p7BIsg0a
2553
+ WN8tN/SBTWPH////////////////////////////////RdyP6Ilg1G4AQaPYwAALMoAAAAAAAAAA
2554
+ gP///3//////////////////////////////////////////fwEAAAABAEHg2MAACxEBAAAA////
2555
+ //////8AAAAAAQBBkNnAAAsBAQBBnNnAAAueD/////////////////7///8AAAAAPBSpGNQw53kB
2556
+ tu1f/JW6dRAlYncrc/t5xlU3pXZfkBgKVpXOV1Py3VzkGbrkuEqLJfMh3YiG6NKFXYglGP9xhbvS
2557
+ oBbFL5JPmTRiGmzBXA2LLMZXOs9Bkn9mG/1haV4vlxeg9QvHFVySYZVgTbQgPVLbHwc3G5EEew9v
2558
+ jRb5SPa8uzfhR2hWnuwLaoqeRjTkYzTXeWEnxLEVAD0ThQK+Wqt9TMB8g6qSBwwmQ0yfPVc3zOZ4
2559
+ YhWTDINzb2tbcruUJQniv0TCqGJn6NyPw5rBkWNwON3VpZZa9iTTIdSH1WHqc3GjonN26GWLd1MI
2560
+ gIQjPrS6BR5E+BC+7yFGEv4R+v2fsSwrH4kcIzySsVuNugGOysWKZz3Qtty+Ex9MsG5YCe3oJ+XG
2561
+ NQzi7RkYPKOBHvpSxlbA1o8nEU+GcAis1RnVM7XSNHdXYsDdvaH2ijtnk8Kep5p8flexZrLDUeZt
2562
+ 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
2592
+ c3RyaW5nIHdpbGwgYmUgdXNlZCBhcyBpbnB1dCBkYXRhAChmbGFncyAmIFNFQ1AyNTZLMV9GTEFH
2593
+ U19UWVBFX01BU0spID09IFNFQ1AyNTZLMV9GTEFHU19UWVBFX0NPTVBSRVNTSU9OAHJlY2lkID49
2594
+ IDAgJiYgcmVjaWQgPD0gMwBzZWNwMjU2azFfZWNtdWx0X2NvbnRleHRfaXNfYnVpbHQoJmN0eC0+
2595
+ ZWNtdWx0X2N0eCkAc2VjcDI1NmsxX2VjbXVsdF9nZW5fY29udGV4dF9pc19idWlsdCgmY3R4LT5l
2596
+ Y211bHRfZ2VuX2N0eCkAIXNlY3AyNTZrMV9mZV9pc196ZXJvKCZnZS0+eCkAKm91dHB1dGxlbiA+
2597
+ PSAoKGZsYWdzICYgU0VDUDI1NksxX0ZMQUdTX0JJVF9DT01QUkVTU0lPTikgPyAzM3UgOiA2NXUp
2598
+ AFIAAAAAAAAAUAAAAFAAQeDtwAALEEVDRFNBK0RFUiAgICAgICAAQZjuwAALAQEAQcDuwAALEEVD
2599
+ RFNBK1JlY292ZXJ5ICAAQeDuwAALbvCKeMu67ggrBSrgcI8y+h5QxcQhqncrpdu0BqLqa+NCmBf4
2600
+ FluBAgCflY3i3LINAPybAgcLhw4AXCkGWsW6CwDc+X5mvnkAALjUEPuP0AcAxJlBVWiKBAC0F/2o
2601
+ CBEOAMC/T9pVRgwAoyZ32jpIAEHg78AACzBUaGUgc2NhbGFyIGZvciB0aGlzIHggaXMgdW5rbm93
2602
+ bgAAAAAAAAAAL/z///7///8AQanwwAALEAEAAAAAAADPytot4vbHJwcAQeDwwAALFO66yS9yoQ0A
2603
+ AkT8dQuVAQAjUUUBAEGI8cAAC0BBQTbQjF4CAP27A4r0ag4A3K66/v//DwD///////8PAP//////
2604
+ /wAAQUE20Ixe0j/ugCK9mnO7Kuv/////////AEHR8cAACxgBAAAAAAAAwU53qpkA8jQAAQAAAAAA
2605
+ AAEAQZDywAALAQEAQcDywAALAYAAQYDzwAALEMPkvwqpf1RvKIgOAdZ+Q+QAQaDzwAALpgEsVrE9
2606
+ qM1l1200dAfFCiiK/v///////////////////zGw20WaIJPof8rocRSKqj0V64SS5JBs6M1r1Kch
2607
+ 0oYwcX/Eiq60cRXGBvWdrAgSIsTkvwqpf1RvKIgOAdZ+Q+RyvSMbfJYC33hmgSDqIi4SWmQSiAIc
2608
+ JqXgMFzATK1jU+4BlXEobAkAE1yZWC9RBwBJ8JzpNDQMAOp5ROYGcQAAfGUraul6AEHQ9MAACxBT
2609
+ Y2hub3JyK1NIQTI1NiAgAEHk9MAACwNANBAAKgRuYW1lASMB6QIfX193YmluZGdlbl9hZGRfdG9f
2610
+ c3RhY2tfcG9pbnRlcgCIAQlwcm9kdWNlcnMCCGxhbmd1YWdlAgRSdXN0AANDOTkADHByb2Nlc3Nl
2611
+ ZC1ieQQFcnVzdGMdMS44Ny4wICgxNzA2N2U5YWMgMjAyNS0wNS0wOSkMRGViaWFuIGNsYW5nBjE0
2612
+ LjAuNgZ3YWxydXMGMC4yMC4zDHdhc20tYmluZGdlbgYwLjIuOTIAaw90YXJnZXRfZmVhdHVyZXMG
2613
+ Kw9tdXRhYmxlLWdsb2JhbHMrE25vbnRyYXBwaW5nLWZwdG9pbnQrC2J1bGstbWVtb3J5KwhzaWdu
2614
+ LWV4dCsPcmVmZXJlbmNlLXR5cGVzKwptdWx0aXZhbHVl
2615
2615
  `;
package/dist/index.d.ts CHANGED
@@ -26,5 +26,6 @@ export * from './token/common.js';
26
26
  export * from './token/empp.js';
27
27
  export * from './token/slp.js';
28
28
  export * from './token/slp.parse.js';
29
+ export * from './parse/opreturn.js';
29
30
  export * as payment from './payment';
30
31
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -58,5 +58,6 @@ __exportStar(require("./token/common.js"), exports);
58
58
  __exportStar(require("./token/empp.js"), exports);
59
59
  __exportStar(require("./token/slp.js"), exports);
60
60
  __exportStar(require("./token/slp.parse.js"), exports);
61
+ __exportStar(require("./parse/opreturn.js"), exports);
61
62
  exports.payment = __importStar(require("./payment"));
62
63
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,4CAA4C;AAC5C,mEAAmE;AACnE,sEAAsE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEtE,8CAA4B;AAC5B,2CAAyB;AACzB,4CAA0B;AAC1B,0CAAwB;AACxB,8CAA4B;AAC5B,8CAA4B;AAC5B,gDAA8B;AAC9B,gDAA8B;AAC9B,gDAA8B;AAC9B,uDAAqC;AACrC,mDAAiC;AACjC,0CAAwB;AACxB,iDAA+B;AAC/B,kDAAgC;AAChC,gDAA8B;AAC9B,8CAA4B;AAC5B,8CAA4B;AAC5B,8CAA4B;AAC5B,kDAAgC;AAChC,iDAA+B;AAC/B,sDAAoC;AACpC,uDAAqC;AACrC,iDAA+B;AAC/B,uDAAqC;AACrC,oDAAkC;AAClC,kDAAgC;AAChC,iDAA+B;AAC/B,uDAAqC;AACrC,qDAAqC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,4CAA4C;AAC5C,mEAAmE;AACnE,sEAAsE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEtE,8CAA4B;AAC5B,2CAAyB;AACzB,4CAA0B;AAC1B,0CAAwB;AACxB,8CAA4B;AAC5B,8CAA4B;AAC5B,gDAA8B;AAC9B,gDAA8B;AAC9B,gDAA8B;AAC9B,uDAAqC;AACrC,mDAAiC;AACjC,0CAAwB;AACxB,iDAA+B;AAC/B,kDAAgC;AAChC,gDAA8B;AAC9B,8CAA4B;AAC5B,8CAA4B;AAC5B,8CAA4B;AAC5B,kDAAgC;AAChC,iDAA+B;AAC/B,sDAAoC;AACpC,uDAAqC;AACrC,iDAA+B;AAC/B,uDAAqC;AACrC,oDAAkC;AAClC,kDAAgC;AAChC,iDAA+B;AAC/B,uDAAqC;AACrC,sDAAoC;AACpC,qDAAqC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Convert an OP_RETURN outputScript into an array of pushes
3
+ * @param outputScript - An OP_RETURN output script, e.g. 6a042e7865630003333333150076458db0ed96fe9863fc1ccec9fa2cfab884b0f6
4
+ * @returns An array of hex pushes, e.g. ['2e786563', '00', '333333', '0076458db0ed96fe9863fc1ccec9fa2cfab884b0f6']
5
+ * @throws Error if outputScript is not a valid OP_RETURN outputScript
6
+ */
7
+ export declare function getStackArray(outputScript: string): string[];
8
+ /**
9
+ * Swap endianness of a hex string
10
+ * @param hexString a string of hex bytes, e.g. 04000000
11
+ * @returns a string of hex bytes with swapped endianness, e.g. for 04000000, returns 00000004
12
+ */
13
+ export declare function swapEndianness(hexString: string): string;
14
+ /**
15
+ * Consume a specified number of bytes from a stack object
16
+ * @param stack an object containing a hex string outputScript of an eCash tx, e.g. {remainingHex: '6a...'}
17
+ * @param byteCount integer
18
+ * @returns consumed, a hex string of byteCount bytes
19
+ * The stack object is modified in place so that consumed bytes are removed
20
+ */
21
+ export declare function consume(stack: {
22
+ remainingHex: string;
23
+ }, byteCount: number): string;
24
+ /**
25
+ * Parse, decode and consume the data push from the top of the stack.
26
+ * If the stack does not start with a valid push, it raises an error and the stack is left untouched.
27
+ * @param stack an object containing a hex string outputScript of an eCash tx, e.g. {remainingHex: '4d...'}
28
+ * @returns {data, pushedWith}
29
+ * stack is modified in place so that the push is removed
30
+ */
31
+ export declare function consumeNextPush(stack: {
32
+ remainingHex: string;
33
+ }): {
34
+ data: string;
35
+ pushedWith: string;
36
+ };
37
+ //# sourceMappingURL=opreturn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opreturn.d.ts","sourceRoot":"","sources":["../../src/parse/opreturn.ts"],"names":[],"mappings":"AAgCA;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAiC5D;AAmCD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CA4BxD;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CACnB,KAAK,EAAE;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,EAC/B,SAAS,EAAE,MAAM,GAClB,MAAM,CAmCR;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACtB,CAyDA"}
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ // Copyright (c) 2025 The Bitcoin developers
3
+ // Distributed under the MIT software license, see the accompanying
4
+ // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.consumeNextPush = exports.consume = exports.swapEndianness = exports.getStackArray = void 0;
7
+ const consts_js_1 = require("../consts.js");
8
+ const hex_js_1 = require("../io/hex.js");
9
+ const opcode_js_1 = require("../opcode.js");
10
+ /**
11
+ * Convert an OP_RETURN outputScript into an array of pushes
12
+ * @param outputScript - An OP_RETURN output script, e.g. 6a042e7865630003333333150076458db0ed96fe9863fc1ccec9fa2cfab884b0f6
13
+ * @returns An array of hex pushes, e.g. ['2e786563', '00', '333333', '0076458db0ed96fe9863fc1ccec9fa2cfab884b0f6']
14
+ * @throws Error if outputScript is not a valid OP_RETURN outputScript
15
+ */
16
+ function getStackArray(outputScript) {
17
+ const opReturnHex = (0, hex_js_1.toHex)(new Uint8Array([opcode_js_1.OP_RETURN]));
18
+ // Validate for OP_RETURN outputScript
19
+ if (typeof outputScript !== 'string' ||
20
+ !outputScript.startsWith(opReturnHex)) {
21
+ throw new Error(`outputScript must be a string that starts with ${opReturnHex}`);
22
+ }
23
+ if (outputScript.length > 2 * consts_js_1.OP_RETURN_MAX_BYTES) {
24
+ throw new Error(`Invalid eCash OP_RETURN size: ${outputScript.length / 2} bytes. eCash OP_RETURN outputs cannot exceed ${consts_js_1.OP_RETURN_MAX_BYTES} bytes.`);
25
+ }
26
+ // Create stack, the input object required by consumeNextPush
27
+ const stack = {
28
+ remainingHex: outputScript.slice(opReturnHex.length),
29
+ };
30
+ // Initialize stackArray
31
+ const stackArray = [];
32
+ while (stack.remainingHex.length > 0) {
33
+ stackArray.push(consumeNextPush(stack).data);
34
+ }
35
+ return stackArray;
36
+ }
37
+ exports.getStackArray = getStackArray;
38
+ /**
39
+ * One-byte stack additions that can be pushed to OP_RETURN in isolation
40
+ */
41
+ const ONE_BYTE_STACK_ADDS = [
42
+ opcode_js_1.OP_0,
43
+ opcode_js_1.OP_1NEGATE,
44
+ opcode_js_1.OP_RESERVED,
45
+ opcode_js_1.OP_1,
46
+ opcode_js_1.OP_2,
47
+ opcode_js_1.OP_3,
48
+ opcode_js_1.OP_4,
49
+ opcode_js_1.OP_5,
50
+ opcode_js_1.OP_6,
51
+ opcode_js_1.OP_7,
52
+ opcode_js_1.OP_8,
53
+ opcode_js_1.OP_9,
54
+ opcode_js_1.OP_10,
55
+ opcode_js_1.OP_11,
56
+ opcode_js_1.OP_12,
57
+ opcode_js_1.OP_13,
58
+ opcode_js_1.OP_14,
59
+ opcode_js_1.OP_15,
60
+ opcode_js_1.OP_16,
61
+ ];
62
+ /**
63
+ * One-byte pushdata opcodes (0x01-0x4b)
64
+ */
65
+ const ONE_BYTE_PUSHDATAS = [];
66
+ for (let i = 1; i <= 0x4b; i++) {
67
+ ONE_BYTE_PUSHDATAS.push(i);
68
+ }
69
+ /**
70
+ * Swap endianness of a hex string
71
+ * @param hexString a string of hex bytes, e.g. 04000000
72
+ * @returns a string of hex bytes with swapped endianness, e.g. for 04000000, returns 00000004
73
+ */
74
+ function swapEndianness(hexString) {
75
+ const byteLength = 2;
76
+ if (hexString.length % byteLength === 1) {
77
+ throw new Error(`Invalid input length ${hexString.length}: hexString must be divisible by bytes, i.e. have an even length.`);
78
+ }
79
+ // Check if input contains only hex characters
80
+ if (!/^[\da-f]+$/i.test(hexString)) {
81
+ throw new Error(`Invalid input. ${hexString} contains non-hexadecimal characters.`);
82
+ }
83
+ let swappedEndianHexString = '';
84
+ let remainingHex = hexString;
85
+ while (remainingHex.length > 0) {
86
+ // Get the last byte on the string
87
+ const thisByte = remainingHex.slice(-byteLength);
88
+ // Add thisByte to swappedEndianHexString in swapped-endian order
89
+ swappedEndianHexString += thisByte;
90
+ // Remove thisByte from remainingHex
91
+ remainingHex = remainingHex.slice(0, -byteLength);
92
+ }
93
+ return swappedEndianHexString;
94
+ }
95
+ exports.swapEndianness = swapEndianness;
96
+ /**
97
+ * Consume a specified number of bytes from a stack object
98
+ * @param stack an object containing a hex string outputScript of an eCash tx, e.g. {remainingHex: '6a...'}
99
+ * @param byteCount integer
100
+ * @returns consumed, a hex string of byteCount bytes
101
+ * The stack object is modified in place so that consumed bytes are removed
102
+ */
103
+ function consume(stack, byteCount) {
104
+ // Validation for stack
105
+ if (typeof stack !== 'object' || typeof stack.remainingHex !== 'string') {
106
+ throw new Error('Invalid input. Stack must be an object with string stored at key remainingHex.');
107
+ }
108
+ if (stack.remainingHex.length % 2 === 1) {
109
+ throw new Error('Invalid input: stack.remainingHex must be divisible by bytes, i.e. have an even length.');
110
+ }
111
+ // Throw an error if byteCount input is not an integer
112
+ if (!Number.isInteger(byteCount)) {
113
+ throw new Error(`byteCount must be an integer, received ${byteCount}`);
114
+ }
115
+ // One byte is 2 characters of a hex string
116
+ const byteLength = 2;
117
+ // Get byte slice size
118
+ const byteSliceSize = byteCount * byteLength;
119
+ // Throw an error if byteCount is greater than consumable hex bytes in outputScript
120
+ if (byteSliceSize > stack.remainingHex.length) {
121
+ throw new Error(`consume called with byteCount (${byteCount}) greater than remaining bytes in outputScript (${stack.remainingHex.length / byteLength})`);
122
+ }
123
+ // Get consumed bytes
124
+ const consumed = stack.remainingHex.slice(0, byteSliceSize);
125
+ // Remove consumed from the stack
126
+ stack.remainingHex = stack.remainingHex.slice(byteSliceSize);
127
+ return consumed;
128
+ }
129
+ exports.consume = consume;
130
+ /**
131
+ * Parse, decode and consume the data push from the top of the stack.
132
+ * If the stack does not start with a valid push, it raises an error and the stack is left untouched.
133
+ * @param stack an object containing a hex string outputScript of an eCash tx, e.g. {remainingHex: '4d...'}
134
+ * @returns {data, pushedWith}
135
+ * stack is modified in place so that the push is removed
136
+ */
137
+ function consumeNextPush(stack) {
138
+ // Clone stack in case you have an error and wish to leave it unmodified
139
+ const clonedStack = structuredClone(stack);
140
+ // Get the first byte on the stack
141
+ const pushOpCodeHex = consume(clonedStack, 1);
142
+ const pushOpCode = parseInt(pushOpCodeHex, 16);
143
+ if (ONE_BYTE_STACK_ADDS.includes(pushOpCode)) {
144
+ // If this is a one-byte push, consume stack and return the byte
145
+ stack.remainingHex = clonedStack.remainingHex;
146
+ return { data: pushOpCodeHex, pushedWith: pushOpCodeHex };
147
+ }
148
+ // Initialize variables
149
+ let pushBytecountHex;
150
+ // Apply conditional checks to determine the size of this push
151
+ if (ONE_BYTE_PUSHDATAS.includes(pushOpCode)) {
152
+ // If the first byte on the stack is 0x01-0x4b, then this is pushedBytesHex
153
+ pushBytecountHex = pushOpCodeHex;
154
+ }
155
+ else if (pushOpCode === opcode_js_1.OP_PUSHDATA1) {
156
+ // The next byte contains the number of bytes to be pushed onto the stack.
157
+ pushBytecountHex = consume(clonedStack, 1);
158
+ }
159
+ else if (pushOpCode === opcode_js_1.OP_PUSHDATA2) {
160
+ // The next two bytes contain the number of bytes to be pushed onto the stack in little endian order.
161
+ pushBytecountHex = consume(clonedStack, 2);
162
+ }
163
+ else if (pushOpCode === opcode_js_1.OP_PUSHDATA4) {
164
+ // The next four bytes contain the number of bytes to be pushed onto the stack in little endian order.
165
+ pushBytecountHex = consume(clonedStack, 4);
166
+ }
167
+ else {
168
+ throw new Error(`${pushOpCodeHex} is invalid pushdata`);
169
+ }
170
+ // Now that you know how many bytes are in the push, get the pushed data
171
+ const data = consume(clonedStack, parseInt(swapEndianness(pushBytecountHex), 16));
172
+ // If no error, consume stack
173
+ stack.remainingHex = clonedStack.remainingHex;
174
+ /*
175
+ Return {data, pushedWith}
176
+ Note that if the first byte on the stack is 0x01-0x4b,
177
+ this is both pushOpCode and pushBytecountHex
178
+
179
+ You don't want to return '0404' for e.g. '042e786563'
180
+ Conditionally remove pushBytecountHex for this case
181
+ */
182
+ return {
183
+ data,
184
+ pushedWith: `${pushOpCodeHex}${pushOpCodeHex !== pushBytecountHex ? pushBytecountHex : ''}`,
185
+ };
186
+ }
187
+ exports.consumeNextPush = consumeNextPush;
188
+ //# sourceMappingURL=opreturn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opreturn.js","sourceRoot":"","sources":["../../src/parse/opreturn.ts"],"names":[],"mappings":"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"}