@alpha-arcade/sdk 0.1.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/dist/index.cjs ADDED
@@ -0,0 +1,2178 @@
1
+ 'use strict';
2
+
3
+ var algosdk2 = require('algosdk');
4
+ var algokit3 = require('@algorandfoundation/algokit-utils');
5
+ var decimal_js = require('decimal.js');
6
+
7
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
+
9
+ function _interopNamespace(e) {
10
+ if (e && e.__esModule) return e;
11
+ var n = Object.create(null);
12
+ if (e) {
13
+ Object.keys(e).forEach(function (k) {
14
+ if (k !== 'default') {
15
+ var d = Object.getOwnPropertyDescriptor(e, k);
16
+ Object.defineProperty(n, k, d.get ? d : {
17
+ enumerable: true,
18
+ get: function () { return e[k]; }
19
+ });
20
+ }
21
+ });
22
+ }
23
+ n.default = e;
24
+ return Object.freeze(n);
25
+ }
26
+
27
+ var algosdk2__default = /*#__PURE__*/_interopDefault(algosdk2);
28
+ var algokit3__namespace = /*#__PURE__*/_interopNamespace(algokit3);
29
+
30
+ // src/modules/trading.ts
31
+ var APP_SPEC = {
32
+ "hints": {
33
+ "on_create(string,uint64,address,uint64,address,string,address,uint64,uint64,address)uint8": {
34
+ "call_config": {
35
+ "no_op": "CREATE"
36
+ }
37
+ },
38
+ "create_escrow(uint64,uint64,uint64,uint8)uint64": {
39
+ "call_config": {
40
+ "no_op": "CALL"
41
+ }
42
+ },
43
+ "activate_market()uint8": {
44
+ "call_config": {
45
+ "no_op": "CALL"
46
+ }
47
+ },
48
+ "process_potential_match(application,application)uint8": {
49
+ "call_config": {
50
+ "no_op": "CALL"
51
+ }
52
+ },
53
+ "resolve_market(uint8)uint8": {
54
+ "call_config": {
55
+ "no_op": "CALL"
56
+ }
57
+ },
58
+ "merge_shares()uint8": {
59
+ "call_config": {
60
+ "no_op": "CALL"
61
+ }
62
+ },
63
+ "split_shares()uint8": {
64
+ "call_config": {
65
+ "no_op": "CALL"
66
+ }
67
+ },
68
+ "claim()uint8": {
69
+ "call_config": {
70
+ "no_op": "CALL"
71
+ }
72
+ },
73
+ "donate_excess_to_market_friend()uint8": {
74
+ "call_config": {
75
+ "no_op": "CALL"
76
+ }
77
+ },
78
+ "delete_escrow(uint64,address)uint8": {
79
+ "call_config": {
80
+ "no_op": "CALL"
81
+ }
82
+ },
83
+ "delete()uint8": {
84
+ "call_config": {
85
+ "delete_application": "CALL"
86
+ }
87
+ },
88
+ "do_noop(uint64)uint64": {
89
+ "call_config": {
90
+ "no_op": "CALL"
91
+ }
92
+ },
93
+ "on_update()uint64": {
94
+ "call_config": {
95
+ "update_application": "CALL"
96
+ }
97
+ }
98
+ },
99
+ "source": {
100
+ "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50Y2Jsb2NrIDEgMCAyIDI1NiAxMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAwMDAgMTg0NDY3NDQwNzM3MDk1NTE2MTUKYnl0ZWNibG9jayAweDYzNmY2YzZjNjE3NDY1NzI2MTZjNWY2MTczNzM2NTc0NWY2OTY0IDB4Nzk2NTczNWY3Mzc1NzA3MDZjNzkgMHg2ZTZmNWY3Mzc1NzA3MDZjNzkgMHg3OTY1NzM1ZjYxNzM3MzY1NzQ1ZjY5NjQgMHg2ZTZmNWY2MTczNzM2NTc0NWY2OTY0IDB4MTUxZjdjNzUgMHg3MDZmNzM2OTc0Njk2ZjZlIDB4MDAgMHg2OTczNWY3MjY1NzM2ZjZjNzY2NTY0IDB4NmQ2MTcyNmI2NTc0NWY2NjcyNjk2NTZlNjQ1ZjYxNjQ2NDcyIDB4NzA3MjY5NjM2NSAweDczNjk2NDY1IDB4IDB4NmY3NzZlNjU3MiAweDY5NzM1ZjYxNjM3NDY5NzY2MTc0NjU2NCAweDY2NjU2NTVmNjI2MTczNjU1ZjcwNjU3MjYzNjU2ZTc0IDB4NmQ2MTcyNmI2NTc0NWY2MTcwNzA1ZjY5NjQgMHg3MzZjNjk3MDcwNjE2NzY1IDB4NmY3NTc0NjM2ZjZkNjUgMHgxMTllM2M0YiAweDZmNzI2MTYzNmM2NTVmNjE2NDY0NzI2NTczNzMgMHg2NjY1NjU1ZjYxNjQ2NDcyNjU3MzczIDB4NjU3MzYzNzI2Zjc3NWY2MzYxNmU2MzY1NmM1ZjYxNjQ2NDcyNjU3MzczIDB4NDE2YzcwNjg2MTIwNGQ2MTcyNmI2NTc0MjAgMHg2ODc0NzQ3MDczM2EyZjJmNzc3Nzc3MmU2MTZjNzA2ODYxNjE3MjYzNjE2NDY1MmU2MzZmNmQyZjZkNjE3MjZiNjU3NDJmIDB4NjY2NTY1NWY3NDY5NmQ2NTcyNWY3Mzc0NjE3Mjc0CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4YmE4ZDYxY2IgLy8gIm9uX2NyZWF0ZShzdHJpbmcsdWludDY0LGFkZHJlc3MsdWludDY0LGFkZHJlc3Msc3RyaW5nLGFkZHJlc3MsdWludDY0LHVpbnQ2NCxhZGRyZXNzKXVpbnQ4Igo9PQpibnogbWFpbl9sMjYKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHhlMTFhZjJhMCAvLyAiY3JlYXRlX2VzY3Jvdyh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50OCl1aW50NjQiCj09CmJueiBtYWluX2wyNQp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDAyYTRlMzA5IC8vICJhY3RpdmF0ZV9tYXJrZXQoKXVpbnQ4Igo9PQpibnogbWFpbl9sMjQKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHhiYTFkZWVmNSAvLyAicHJvY2Vzc19wb3RlbnRpYWxfbWF0Y2goYXBwbGljYXRpb24sYXBwbGljYXRpb24pdWludDgiCj09CmJueiBtYWluX2wyMwp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweGZiZGJmMTExIC8vICJyZXNvbHZlX21hcmtldCh1aW50OCl1aW50OCIKPT0KYm56IG1haW5fbDIyCnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4OGM1ZGIwNTYgLy8gIm1lcmdlX3NoYXJlcygpdWludDgiCj09CmJueiBtYWluX2wyMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDgzMjFiM2JkIC8vICJzcGxpdF9zaGFyZXMoKXVpbnQ4Igo9PQpibnogbWFpbl9sMjAKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgzMjAwNjIzYiAvLyAiY2xhaW0oKXVpbnQ4Igo9PQpibnogbWFpbl9sMTkKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHhhN2ExNTcxZSAvLyAiZG9uYXRlX2V4Y2Vzc190b19tYXJrZXRfZnJpZW5kKCl1aW50OCIKPT0KYm56IG1haW5fbDE4CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4NDI1ZGViM2QgLy8gImRlbGV0ZV9lc2Nyb3codWludDY0LGFkZHJlc3MpdWludDgiCj09CmJueiBtYWluX2wxNwp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCmJ5dGVjIDE5IC8vICJkZWxldGUoKXVpbnQ4Igo9PQpibnogbWFpbl9sMTYKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHhiNGYxMWExOCAvLyAiZG9fbm9vcCh1aW50NjQpdWludDY0Igo9PQpibnogbWFpbl9sMTUKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgyNGMzZDIzNCAvLyAib25fdXBkYXRlKCl1aW50NjQiCj09CmJueiBtYWluX2wxNAplcnIKbWFpbl9sMTQ6CnR4biBPbkNvbXBsZXRpb24KcHVzaGludCA0IC8vIFVwZGF0ZUFwcGxpY2F0aW9uCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMSAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIG9udXBkYXRlY2FzdGVyXzQyCmludGNfMCAvLyAxCnJldHVybgptYWluX2wxNToKdHhuIE9uQ29tcGxldGlvbgppbnRjXzEgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzEgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBkb25vb3BjYXN0ZXJfNDEKaW50Y18wIC8vIDEKcmV0dXJuCm1haW5fbDE2Ogp0eG4gT25Db21wbGV0aW9uCnB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzEgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBkZWxldGVjYXN0ZXJfNDAKaW50Y18wIC8vIDEKcmV0dXJuCm1haW5fbDE3Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMSAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMSAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIGRlbGV0ZWVzY3Jvd2Nhc3Rlcl8zOQppbnRjXzAgLy8gMQpyZXR1cm4KbWFpbl9sMTg6CnR4biBPbkNvbXBsZXRpb24KaW50Y18xIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18xIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgZG9uYXRlZXhjZXNzdG9tYXJrZXRmcmllbmRjYXN0ZXJfMzgKaW50Y18wIC8vIDEKcmV0dXJuCm1haW5fbDE5Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMSAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMSAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIGNsYWltY2FzdGVyXzM3CmludGNfMCAvLyAxCnJldHVybgptYWluX2wyMDoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzEgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzEgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBzcGxpdHNoYXJlc2Nhc3Rlcl8zNgppbnRjXzAgLy8gMQpyZXR1cm4KbWFpbl9sMjE6CnR4biBPbkNvbXBsZXRpb24KaW50Y18xIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18xIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgbWVyZ2VzaGFyZXNjYXN0ZXJfMzUKaW50Y18wIC8vIDEKcmV0dXJuCm1haW5fbDIyOgp0eG4gT25Db21wbGV0aW9uCmludGNfMSAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMSAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIHJlc29sdmVtYXJrZXRjYXN0ZXJfMzQKaW50Y18wIC8vIDEKcmV0dXJuCm1haW5fbDIzOgp0eG4gT25Db21wbGV0aW9uCmludGNfMSAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMSAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIHByb2Nlc3Nwb3RlbnRpYWxtYXRjaGNhc3Rlcl8zMwppbnRjXzAgLy8gMQpyZXR1cm4KbWFpbl9sMjQ6CnR4biBPbkNvbXBsZXRpb24KaW50Y18xIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18xIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgYWN0aXZhdGVtYXJrZXRjYXN0ZXJfMzIKaW50Y18wIC8vIDEKcmV0dXJuCm1haW5fbDI1Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMSAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMSAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIGNyZWF0ZWVzY3Jvd2Nhc3Rlcl8zMQppbnRjXzAgLy8gMQpyZXR1cm4KbWFpbl9sMjY6CnR4biBPbkNvbXBsZXRpb24KaW50Y18xIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18xIC8vIDAKPT0KJiYKYXNzZXJ0CmNhbGxzdWIgb25jcmVhdGVjYXN0ZXJfMzAKaW50Y18wIC8vIDEKcmV0dXJuCgovLyBkaXZfY2VpbF9ieXRlcwpkaXZjZWlsYnl0ZXNfMDoKcHJvdG8gMiAxCmZyYW1lX2RpZyAtMgpmcmFtZV9kaWcgLTEKYi8Kc3RvcmUgMTIKZnJhbWVfZGlnIC0yCmZyYW1lX2RpZyAtMQpiJQpsZW4KaW50Y18xIC8vIDAKPgpibnogZGl2Y2VpbGJ5dGVzXzBfbDIKbG9hZCAxMgpyZXRzdWIKZGl2Y2VpbGJ5dGVzXzBfbDI6CmxvYWQgMTIKaW50Y18wIC8vIDEKaXRvYgpiKwpyZXRzdWIKCi8vIGNhbGN1bGF0ZV9mZWUKY2FsY3VsYXRlZmVlXzE6CnByb3RvIDMgMQpmcmFtZV9kaWcgLTMKaXRvYgpzdG9yZSAyCmZyYW1lX2RpZyAtMgppdG9iCnN0b3JlIDMKaW50YyA0IC8vIDEwMDAwMDAKZnJhbWVfZGlnIC0yCi0KaXRvYgpzdG9yZSA0CmxvYWQgMgpsb2FkIDMKYioKc3RvcmUgMgpsb2FkIDIKbG9hZCA0CmIqCnN0b3JlIDIKbG9hZCAyCmZyYW1lX2RpZyAtMQppdG9iCmIqCnN0b3JlIDIKbG9hZCAyCmludGMgNSAvLyAxMDAwMDAwMDAwMDAwMDAwMDAwCml0b2IKYi8KYnRvaQpyZXRzdWIKCi8vIGNhbGN1bGF0ZV9mZWVfY29tbWl0CmNhbGN1bGF0ZWZlZWNvbW1pdF8yOgpwcm90byAzIDEKZnJhbWVfZGlnIC0zCml0b2IKc3RvcmUgOQpmcmFtZV9kaWcgLTIKaXRvYgpzdG9yZSAxMAppbnRjIDQgLy8gMTAwMDAwMApmcmFtZV9kaWcgLTIKLQppdG9iCnN0b3JlIDExCmxvYWQgOQpsb2FkIDEwCmIqCnN0b3JlIDkKbG9hZCA5CmxvYWQgMTEKYioKc3RvcmUgOQpsb2FkIDkKZnJhbWVfZGlnIC0xCml0b2IKYioKc3RvcmUgOQpsb2FkIDkKaW50YyA1IC8vIDEwMDAwMDAwMDAwMDAwMDAwMDAKaXRvYgpjYWxsc3ViIGRpdmNlaWxieXRlc18wCmJ0b2kKcmV0c3ViCgovLyBnbG9iYWxfbXVzdF9nZXQKZ2xvYmFsbXVzdGdldF8zOgpwcm90byAyIDEKZnJhbWVfZGlnIC0yCmZyYW1lX2RpZyAtMQphcHBfZ2xvYmFsX2dldF9leApzdG9yZSAxCnN0b3JlIDAKbG9hZCAxCmFzc2VydApsb2FkIDAKcmV0c3ViCgovLyBnZXRfYXBwX2FkZHIKZ2V0YXBwYWRkcl80Ogpwcm90byAxIDEKZnJhbWVfZGlnIC0xCmFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKc3RvcmUgNgpzdG9yZSA1CmxvYWQgNgphc3NlcnQKbG9hZCA1CnJldHN1YgoKLy8gZ2V0X2FwcF9jcmVhdG9yCmdldGFwcGNyZWF0b3JfNToKcHJvdG8gMSAxCmZyYW1lX2RpZyAtMQphcHBfcGFyYW1zX2dldCBBcHBDcmVhdG9yCnN0b3JlIDE2CnN0b3JlIDE1CmxvYWQgMTYKYXNzZXJ0CmxvYWQgMTUKcmV0c3ViCgovLyBzZW5kX2Fzc2V0CnNlbmRhc3NldF82Ogpwcm90byA0IDAKaXR4bl9iZWdpbgpwdXNoaW50IDQgLy8gYXhmZXIKaXR4bl9maWVsZCBUeXBlRW51bQpmcmFtZV9kaWcgLTQKaXR4bl9maWVsZCBTZW5kZXIKZnJhbWVfZGlnIC0zCml0eG5fZmllbGQgQXNzZXRBbW91bnQKZnJhbWVfZGlnIC0yCml0eG5fZmllbGQgWGZlckFzc2V0CmZyYW1lX2RpZyAtMQppdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKaXR4bl9zdWJtaXQKcmV0c3ViCgovLyBzZW5kX2FsZ28Kc2VuZGFsZ29fNzoKcHJvdG8gMyAwCml0eG5fYmVnaW4KaW50Y18wIC8vIHBheQppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAtMwppdHhuX2ZpZWxkIFNlbmRlcgpmcmFtZV9kaWcgLTIKaXR4bl9maWVsZCBBbW91bnQKZnJhbWVfZGlnIC0xCml0eG5fZmllbGQgUmVjZWl2ZXIKaXR4bl9zdWJtaXQKcmV0c3ViCgovLyBnZXRfZnVuZHNfdG9fdHJhZGVyCmdldGZ1bmRzdG90cmFkZXJfODoKcHJvdG8gNCAwCmZyYW1lX2RpZyAtNApmcmFtZV9kaWcgLTIKYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCnN0b3JlIDgKc3RvcmUgNwpsb2FkIDgKYm56IGdldGZ1bmRzdG90cmFkZXJfOF9sMgpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpmcmFtZV9kaWcgLTEKZnJhbWVfZGlnIC0yCmZyYW1lX2RpZyAtMwpjYWxsc3ViIHNlbmRhc3NldF82CmIgZ2V0ZnVuZHN0b3RyYWRlcl84X2wzCmdldGZ1bmRzdG90cmFkZXJfOF9sMjoKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKZnJhbWVfZGlnIC0xCmZyYW1lX2RpZyAtMgpmcmFtZV9kaWcgLTQKY2FsbHN1YiBzZW5kYXNzZXRfNgpnZXRmdW5kc3RvdHJhZGVyXzhfbDM6CnJldHN1YgoKLy8gc2FmZV93YWxsZXRfYmFsYW5jZQpzYWZld2FsbGV0YmFsYW5jZV85Ogpwcm90byAyIDEKZnJhbWVfZGlnIC0xCmZyYW1lX2RpZyAtMgphc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKc3RvcmUgMTgKcmV0c3ViCgovLyBvbl9jcmVhdGUKb25jcmVhdGVfMTA6CnByb3RvIDEwIDEKaW50Y18xIC8vIDAKcHVzaGJ5dGVzIDB4NzQ2OTc0NmM2NSAvLyAidGl0bGUiCmZyYW1lX2RpZyAtMTAKZXh0cmFjdCAyIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWNfMCAvLyAiY29sbGF0ZXJhbF9hc3NldF9pZCIKZnJhbWVfZGlnIC05CmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDIwIC8vICJvcmFjbGVfYWRkcmVzcyIKZnJhbWVfZGlnIC04CmFwcF9nbG9iYWxfcHV0CnB1c2hieXRlcyAweDcyNjU3MzZmNmM3NTc0Njk2ZjZlNWY3NDY5NmQ2NSAvLyAicmVzb2x1dGlvbl90aW1lIgpmcmFtZV9kaWcgLTcKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgMTQgLy8gImlzX2FjdGl2YXRlZCIKaW50Y18xIC8vIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgOCAvLyAiaXNfcmVzb2x2ZWQiCmludGNfMSAvLyAwCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDkgLy8gIm1hcmtldF9mcmllbmRfYWRkciIKZnJhbWVfZGlnIC02CmFwcF9nbG9iYWxfcHV0CnB1c2hieXRlcyAweDcyNzU2YzY1NzMgLy8gInJ1bGVzIgpmcmFtZV9kaWcgLTUKZXh0cmFjdCAyIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgMjEgLy8gImZlZV9hZGRyZXNzIgpmcmFtZV9kaWcgLTQKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgMTUgLy8gImZlZV9iYXNlX3BlcmNlbnQiCmZyYW1lX2RpZyAtMwphcHBfZ2xvYmFsX3B1dApwdXNoYnl0ZXMgMHg2NjY1NjU1Zjc0Njk2ZDY1NzI1Zjc0Njg3MjY1NzM2ODZmNmM2NCAvLyAiZmVlX3RpbWVyX3RocmVzaG9sZCIKZnJhbWVfZGlnIC0yCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDIyIC8vICJlc2Nyb3dfY2FuY2VsX2FkZHJlc3MiCmZyYW1lX2RpZyAtMQphcHBfZ2xvYmFsX3B1dAppbnRjXzAgLy8gMQpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKaW50Y18zIC8vIDI1Ngo8CmFzc2VydApyZXRzdWIKCi8vIGludF90b19hc2NpaQppbnR0b2FzY2lpXzExOgpwcm90byAxIDEKcHVzaGJ5dGVzIDB4MzAzMTMyMzMzNDM1MzYzNzM4MzkgLy8gIjAxMjM0NTY3ODkiCmZyYW1lX2RpZyAtMQppbnRjXzAgLy8gMQpleHRyYWN0MwpyZXRzdWIKCi8vIGl0b2EKaXRvYV8xMjoKcHJvdG8gMSAxCmZyYW1lX2RpZyAtMQppbnRjXzEgLy8gMAo9PQpibnogaXRvYV8xMl9sNQpmcmFtZV9kaWcgLTEKcHVzaGludCAxMCAvLyAxMAovCmludGNfMSAvLyAwCj4KYm56IGl0b2FfMTJfbDQKYnl0ZWMgMTIgLy8gIiIKaXRvYV8xMl9sMzoKZnJhbWVfZGlnIC0xCnB1c2hpbnQgMTAgLy8gMTAKJQpjYWxsc3ViIGludHRvYXNjaWlfMTEKY29uY2F0CmIgaXRvYV8xMl9sNgppdG9hXzEyX2w0OgpmcmFtZV9kaWcgLTEKcHVzaGludCAxMCAvLyAxMAovCmNhbGxzdWIgaXRvYV8xMgpiIGl0b2FfMTJfbDMKaXRvYV8xMl9sNToKcHVzaGJ5dGVzIDB4MzAgLy8gIjAiCml0b2FfMTJfbDY6CnJldHN1YgoKLy8gc2V0dXBfZXNjcm93CnNldHVwZXNjcm93XzEzOgpwcm90byA3IDAKaXR4bl9iZWdpbgppbnRjXzAgLy8gcGF5Cml0eG5fZmllbGQgVHlwZUVudW0KZnJhbWVfZGlnIC03CmNhbGxzdWIgZ2V0YXBwYWRkcl80Cml0eG5fZmllbGQgUmVjZWl2ZXIKcHVzaGludCAzMDAwMDAgLy8gMzAwMDAwCnB1c2hpbnQgMzAwMCAvLyAzMDAwCisKcHVzaGludCAxMDAwMDAgLy8gMTAwMDAwCisKaXR4bl9maWVsZCBBbW91bnQKZ2xvYmFsIE1pblR4bkZlZQppdHhuX2ZpZWxkIEZlZQppdHhuX25leHQKcHVzaGludCA2IC8vIGFwcGwKaXR4bl9maWVsZCBUeXBlRW51bQpmcmFtZV9kaWcgLTcKaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECnB1c2hieXRlcyAweDk1NGU3ZDcyIC8vICJzZXR1cChzdHJpbmcsc3RyaW5nLHN0cmluZyxzdHJpbmcsc3RyaW5nKXVpbnQ4IgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgLTMKaXRvYgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgLTYKaXRvYgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgLTIKaXRvYgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgLTQKaXRvYgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgLTUKaXRvYgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uSUQKaXR4bl9maWVsZCBBcHBsaWNhdGlvbnMKZnJhbWVfZGlnIC0xCml0eG5fZmllbGQgQXNzZXRzCmJ5dGVjXzAgLy8gImNvbGxhdGVyYWxfYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0Cml0eG5fZmllbGQgQXNzZXRzCmJ5dGVjXzMgLy8gInllc19hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKaXR4bl9maWVsZCBBc3NldHMKYnl0ZWMgNCAvLyAibm9fYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0Cml0eG5fZmllbGQgQXNzZXRzCnR4biBTZW5kZXIKaXR4bl9maWVsZCBBY2NvdW50cwppdHhuX25leHQKcHVzaGludCA0IC8vIGF4ZmVyCml0eG5fZmllbGQgVHlwZUVudW0KdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBYZmVyQXNzZXQKaXR4bl9maWVsZCBYZmVyQXNzZXQKZnJhbWVfZGlnIC03CmNhbGxzdWIgZ2V0YXBwYWRkcl80Cml0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgpnbG9iYWwgTWluVHhuRmVlCml0eG5fZmllbGQgRmVlCnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgQXNzZXRBbW91bnQKaXR4bl9maWVsZCBBc3NldEFtb3VudAppdHhuX3N1Ym1pdApyZXRzdWIKCi8vIGNyZWF0ZV9lc2Nyb3cKY3JlYXRlZXNjcm93XzE0Ogpwcm90byA0IDEKaW50Y18xIC8vIDAKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBTZW5kZXIKdHhuIFNlbmRlcgo9PQphc3NlcnQKdHhuIFR5cGVFbnVtCnB1c2hpbnQgNiAvLyBhcHBsCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIFR5cGVFbnVtCnB1c2hpbnQgNCAvLyBheGZlcgo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBBc3NldFJlY2VpdmVyCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzIgLy8gMgotCmd0eG5zIFNlbmRlcgp0eG4gU2VuZGVyCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzIgLy8gMgotCmd0eG5zIFR5cGVFbnVtCmludGNfMCAvLyBwYXkKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMiAvLyAyCi0KZ3R4bnMgUmVjZWl2ZXIKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMiAvLyAyCi0KZ3R4bnMgQW1vdW50CnB1c2hpbnQgOTU2NTAwIC8vIDk1NjUwMAo+PQphc3NlcnQKYnl0ZWMgOCAvLyAiaXNfcmVzb2x2ZWQiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAwCj09CmFzc2VydApieXRlYyAxNCAvLyAiaXNfYWN0aXZhdGVkIgphcHBfZ2xvYmFsX2dldAppbnRjXzAgLy8gMQo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBYZmVyQXNzZXQKYnl0ZWNfMyAvLyAieWVzX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldAo9PQp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIFhmZXJBc3NldApieXRlYyA0IC8vICJub19hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKPT0KfHwKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBYZmVyQXNzZXQKYnl0ZWNfMCAvLyAiY29sbGF0ZXJhbF9hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKPT0KfHwKYXNzZXJ0Cml0eG5fYmVnaW4KcHVzaGludCA2IC8vIGFwcGwKaXR4bl9maWVsZCBUeXBlRW51bQpwdXNoYnl0ZXMgMHgwODIwMDYwMDAxYzA4NDNkMDQ4MDAyODA4MDkwYmJiYWQ2YWRmMDBkMjYxNzBkNmQ2MTcyNmI2NTc0NWY2MTcwNzA1ZjY5NjQwODcwNmY3MzY5NzQ2OTZmNmUwNTcwNzI2OTYzNjUwNDczNjk2NDY1MDg3MzZjNjk3MDcwNjE2NzY1MDU2Zjc3NmU2NTcyMDg3MTc1NjE2ZTc0Njk3NDc5MGY2NjY1NjU1Zjc0Njk2ZDY1NzI1ZjczNzQ2MTcyNzQwZjcxNzU2MTZlNzQ2OTc0Nzk1ZjY2Njk2YzZjNjU2NDEzNjM2ZjZjNmM2MTc0NjU3MjYxNmM1ZjYxNzM3MzY1NzQ1ZjY5NjQwNDE1MWY3Yzc1MGM3OTY1NzM1ZjYxNzM3MzY1NzQ1ZjY5NjQwYjZlNmY1ZjYxNzM3MzY1NzQ1ZjY5NjQxMDY2NjU2NTVmNjI2MTczNjU1ZjcwNjU3MjYzNjU2ZTc0MDEwMDBjNjE3MzczNjU3NDVmNmM2OTczNzQ2NTY0MGI2NjY1NjU1ZjYxNjQ2NDcyNjU3MzczMDQ5NTRlN2Q3MjA0MzJjZTI4MWUwNGM5MWU4OGY1MDRkYjkyMmZjMjAwMDRiYTFkZWVmNTMxMWIyMjEyNDAwMGI2MzYxYTAwODAwNDQzZGI2MmExMTI0MDAwOWEzNjFhMDAyNzExMTI0MDAwODIzNjFhMDAyNzEyMTI0MDAwNmEzNjFhMDAyNzEzMTI0MDAwNTIzNjFhMDAyNzE0MTI0MDAwM2EzNjFhMDA4MDA0MTE5ZTNjNGIxMjQwMDAxZDM2MWEwMDgwMDQyNGMzZDIzNDEyNDAwMDAxMDAzMTE5MjUxMjMxMTgyMjEzMTA0NDg4MGMxNDIzNDMzMTE5ODEwNTEyMzExODIyMTMxMDQ0ODgwYmYwMjM0MzMxMTkyMjEyMzExODIyMTMxMDQ0ODgwYmM2MjM0MzMxMTkyMjEyMzExODIyMTMxMDQ0ODgwYjg5MjM0MzMxMTkyMjEyMzExODIyMTMxMDQ0ODgwYjUzMjM0MzMxMTkyMjEyMzExODIyMTMxMDQ0ODgwYjA5MjM0MzMxMTkyMjEyMzExODIyMTIxMDQ0ODgwYWU2MjM0MzMxMTkyMjEyNDAwMDAxMDAzMTE4MjIxMjQ0ODgwMTBjMjM0MzhhMDIwMThiZmU4YmZmMGEzNTA5OGJmZThiZmYxODgxZjQwMzBkNDAwMDAzMzQwOTg5MzQwOTIzMDg4OThhMDIwMThiZmU4YmZmYTIzNTExOGJmZThiZmZhYTE1MjIwZDQwMDAwMzM0MTE4OTM0MTEyMzE2YTA4OThhMDMwMThiZmQxNjM1MDI4YmZlMTYzNTAzMjQ4YmZlMDkxNjM1MDQzNDAyMzQwM2EzMzUwMjM0MDIzNDA0YTMzNTAyMzQwMjhiZmYxNmEzMzUwMjM0MDIyMTA1MTZhMjE3ODk4YTAzMDE4YmZkMTYzNTBlOGJmZTE2MzUwZjI0OGJmZTA5MTYzNTEwMzQwZTM0MGZhMzM1MGUzNDBlMzQxMGEzMzUwZTM0MGU4YmZmMTZhMzM1MGUzNDBlMjEwNTE2ODhmZjdlMTc4OThhMDIwMThiZmU4YmZmNjUzNTAxMzUwMDM0MDE0NDM0MDA4OThhMDEwMThiZmY3MjA4MzUwNjM1MDUzNDA2NDQzNDA1ODk4YTA0MDBiMTI1YjIxMDhiZmNiMjAwOGJmZGIyMTI4YmZlYjIxMThiZmZiMjE0YjM4OThhMDQwMDhiZmM4YmZlNzAwMDM1MDgzNTA3MzQwODQwMDAwZTMyMGE4YmZmOGJmZThiZmQ4OGZmY2E0MjAwMGIzMjBhOGJmZjhiZmU4YmZjODhmZmJjODk4YTAwMDAyNzBmMjI2NzI3MDcyMjY3MjgyMjY3MjcwNTI3MTU2NzI5MjI2NzJhMjI2NzI3MDYyMjY3MjcwODIyNjcyYjIyNjcyNzA0MjI2Nzg5OGEwMDAxMjIyMzhjMDA4YjAwMjEwNDBjNDQ4OThhMDUwMTIyMzEwMDMyMDkxMjQ0MzExMDgxMDYxMjQ0MzYxYTAwMjcxMTEyNDQ4YmZiNTcwMjAwMTcyMjEyOGJmYjU3MDIwMDE3MjMxMjExNDQ4YmZkNTcwMjAwMTcyMjEyOGJmZDU3MDIwMDE3MjMxMjExNDQ4YmZjNTcwMjAwMTcyMjBkNDQ4YmZjNTcwMjAwMTcyNDBjNDQ4YmZlNTcwMjAwMTcyMjBkNDQyNzBmMjJjMDMwNjcyODMyMGQ2NzI5OGJmYjU3MDIwMDE3NjcyYjhiZmQ1NzAyMDAxNzY3MjcwNjhiZmU1NzAyMDAxNzY3MjcwODIyNjcyYThiZmM1NzAyMDAxNzY3MjcwNTIzYzAxYzY3MjcwNDhiZmY1NzAyMDAxNzY3MzIwYTIyMjg2NDI3MDk4OGZlYzMzMjBhODhmZWUxMzIwYTIyMjg2NDI3MGI4OGZlYjQzMjBhODhmZWQyMzIwYTIyMjg2NDI3MGM4OGZlYTUzMjBhODhmZWMzMjcwNzMyMDc2NzIzOGMwMDhiMDAyMTA0MGM0NDg5OGEwMTAwMzExNjIzMDgzODEwODEwNjEyNDQzMTE2MjMwODM5MWEwMDI3MTQxMjQ0MzExNjIzMDgzODE4OGJmZmMwMzIxMjQ0MzExNjgxMDIwODM4MTA4MTA2MTI0NDMxMTY4MTAyMDgzOTFhMDAyNzE2MTI0NDMxMTY4MTAyMDgzODE4Mjg2NDEyNDQzMTE2MjMwODM4MTkyMjEyNDQzMTE2ODEwMjA4MzgxOTIyMTI0NDg5OGEwNTAwOGJmYjhiZmM4YmZkOGJmZTg4ZmRjMzI4NjQyNzA5ODhmZTIyOGJmZjg4ZmU0MDg5OGEwMjAwMmE2NDhiZmUyYTg4ZmUxMThiZmUyNzA0ODhmZTBhMDkwZjQ0OGJmZTI3MDU4OGZlMDA4YmZlODhmZTBkMjg2NDI3MDk4OGZkZjQ4YmZmMmE2NDBiMjQwYThiZmYyYTY0Mjg2NDI3MGQ4OGZkZTI4OGZkNzkwOTg4ZmUxNzMyMGE4YmZmMmE2NDI4NjQyNzBkODhmZGNlMjg2NDI3MTA4OGZkYzc4OGZmOGQ4OThhMDIwMDJhNjQ4YmZlMmE4OGZkYjg4YmZlMjcwNDg4ZmRiMTA4MGU0NDhiZmUyNzA1ODhmZGE3OGJmZTg4ZmRiNDI5NjQyMjEyNDAwMDBhMjg2NDI3MGI4OGZkOTQ0MjAwMDcyODY0MjcwYzg4ZmQ4YThiZmY4OGZkYzE4OThhMDIwMDJhNjQ4YmZlMmE4OGZkNzkwODhiZmUyNzA0ODhmZDcxMDgyNDBmNDQzMjBhOGJmZjJhNjQwYjI0ODhmY2MwMjg2NDI3MDk4OGZkNWIyODY0ODhmZDY4ODhmZDc2ODk4YTAyMDAyYTY0OGJmZTJhODhmZDQ3OGJmZTI3MDQ4OGZkNDAwOTA4MjQwZTQ0MzIwYThiZmYyOTY0MjIxMjQwMDAwYTI4NjQyNzBiODhmZDI5NDIwMDA3Mjg2NDI3MGM4OGZkMWYyODY0ODhmZDJjODhmZDNhODk4YTAyMDEyMjhiZmU4OGZlN2M4YmZmMjcwNjY0MjcwODY0MDkwZTQ0MjcwNDY0MjIwZDQwMDE0ZDI3MDQ2NDIyMGQ0MDAxMzgyOTY0MjIxMjJiNjQyMzEyMTA4YmZlYzAzMjI5ODhmY2UxMjIxMjEwOGJmZWMwMzIyYjg4ZmNkNjIyMTIxMDI5NjQyMzEyMmI2NDIzMTIxMDhiZmVjMDMyMjk4OGZjYzIyMzEyMTA4YmZlYzAzMjJiODhmY2I3MjIxMjEwMTE0MDAwZWEyOTY0MjIxMjJiNjQyMjEyMTA4YmZlYzAzMjI5ODhmYzlmMjIxMjEwOGJmZWMwMzIyYjg4ZmM5NDIzMTIxMDI5NjQyMzEyMmI2NDIyMTIxMDhiZmVjMDMyMjk4OGZjODAyMzEyMTA4YmZlYzAzMjJiODhmYzc1MjMxMjEwMTE0MDAwOWMyOTY0MjIxMjJiNjQyMzEyMTA4YmZlYzAzMjI5ODhmYzVkMjMxMjEwOGJmZWMwMzIyYjg4ZmM1MjIzMTIxMDI5NjQyMzEyMmI2NDIzMTIxMDhiZmVjMDMyMjk4OGZjM2UyMjEyMTA4YmZlYzAzMjJiODhmYzMzMjMxMjEwMTE0MDAwNGUyOTY0MjIxMjJiNjQyMjEyMTA4YmZlYzAzMjI5ODhmYzFiMjMxMjEwOGJmZWMwMzIyYjg4ZmMxMDIyMTIxMDI5NjQyMzEyMmI2NDIyMTIxMDhiZmVjMDMyMjk4OGZiZmMyMjEyMTA4YmZlYzAzMjJiODhmYmYxMjIxMjEwMTE0MTAwNWE4YmZlYzAzMjhiZmY4OGZlOGY0MjAwNGU4YmZlYzAzMjhiZmY4OGZlNTE0MjAwNDI4YmZlYzAzMjhiZmY4OGZlMDY0MjAwMzY4YmZlYzAzMjhiZmY4OGZkYTE0MjAwMmEzMjA3MjcwNzY0ODE3ODA4MGM0NDQyZmViYjhiZmVjMDMyMjcwNDg4ZmJhNDIyMGQyNzA3NjQ4YmZlYzAzMjI3MDc4OGZiOTYwZTEwNDQ0MmZlOTYyNzA4MjcwODY0OGJmZjA4NjcyMzhjMDA4YjAwMjEwNDBjNDQ4OThhMDEwMDMxMTYyMzA5MzgxMDgxMDYxMjQ0MzExNjIzMDkzOTFhMDAyNzEyMTI0NDMxMTYyMzA5MzgxODhiZmYxMjQ0MzExNjIzMDgzODEwODEwNjEyNDQzMTE2MjMwODM5MWEwMDI3MTYxMjQ0MzExNjIzMDgzODE4Mjg2NDEyNDQzMTE2MjMwOTM5MWEwMjE3MjcwNjY0MjcwODY0MDkwZTQ0MzExNjIzMDkzODE5MjIxMjQ0MzExNjIzMDgzODE5MjIxMjQ0ODk4YTAyMDAyYTY0MjcwNDY0MDg4YmZlMmE4OGZiMDkwZjQ0OGJmZTI3MDU4OGZiMDA4YmZlODhmYjBkMjg2NDI3MDk4OGZhZjQ4YmZmOGJmZTJhODhmYWVjMGIyNDBhODhmYjIyMzIwYThiZmY4YmZlMmE4OGZhZGMyODY0MjcwZDg4ZmFkNTI4NjQyNzEwODhmYWNlODhmYzk0ODk4YTAyMDAyYTY0MjcwNDY0MDk4YmZlMmE4OGZhYmIwZTQ0OGJmZTI3MDU4OGZhYjI4YmZlODhmYWJmMjk2NDIyMTI0MDAwMGEyODY0MjcwYjg4ZmE5ZjQyMDAwNzI4NjQyNzBjODhmYTk1OGJmZjg4ZmFjYzg5OGEwMjAwMmE2NDhiZmUyYTg4ZmE4NDA4MjcwNDY0MDgyNDBmNDQyYTY0MjcwNDY0MDgyNDhiZmUyYTg4ZmE2ZjA5MGQ0MDAwMGIyYTY0MjcwNDY0MDgzNTEyNDIwMDBhMjQ4YmZlMmE4OGZhIC8vIDB4MDgyMDA2MDAwMWMwODQzZDA0ODAwMjgwODA5MGJiYmFkNmFkZjAwZDI2MTcwZDZkNjE3MjZiNjU3NDVmNjE3MDcwNWY2OTY0MDg3MDZmNzM2OTc0Njk2ZjZlMDU3MDcyNjk2MzY1MDQ3MzY5NjQ2NTA4NzM2YzY5NzA3MDYxNjc2NTA1NmY3NzZlNjU3MjA4NzE3NTYxNmU3NDY5NzQ3OTBmNjY2NTY1NWY3NDY5NmQ2NTcyNWY3Mzc0NjE3Mjc0MGY3MTc1NjE2ZTc0Njk3NDc5NWY2NjY5NmM2YzY1NjQxMzYzNmY2YzZjNjE3NDY1NzI2MTZjNWY2MTczNzM2NTc0NWY2OTY0MDQxNTFmN2M3NTBjNzk2NTczNWY2MTczNzM2NTc0NWY2OTY0MGI2ZTZmNWY2MTczNzM2NTc0NWY2OTY0MTA2NjY1NjU1ZjYyNjE3MzY1NWY3MDY1NzI2MzY1NmU3NDAxMDAwYzYxNzM3MzY1NzQ1ZjZjNjk3Mzc0NjU2NDBiNjY2NTY1NWY2MTY0NjQ3MjY1NzM3MzA0OTU0ZTdkNzIwNDMyY2UyODFlMDRjOTFlODhmNTA0ZGI5MjJmYzIwMDA0YmExZGVlZjUzMTFiMjIxMjQwMDBiNjM2MWEwMDgwMDQ0M2RiNjJhMTEyNDAwMDlhMzYxYTAwMjcxMTEyNDAwMDgyMzYxYTAwMjcxMjEyNDAwMDZhMzYxYTAwMjcxMzEyNDAwMDUyMzYxYTAwMjcxNDEyNDAwMDNhMzYxYTAwODAwNDExOWUzYzRiMTI0MDAwMWQzNjFhMDA4MDA0MjRjM2QyMzQxMjQwMDAwMTAwMzExOTI1MTIzMTE4MjIxMzEwNDQ4ODBjMTQyMzQzMzExOTgxMDUxMjMxMTgyMjEzMTA0NDg4MGJmMDIzNDMzMTE5MjIxMjMxMTgyMjEzMTA0NDg4MGJjNjIzNDMzMTE5MjIxMjMxMTgyMjEzMTA0NDg4MGI4OTIzNDMzMTE5MjIxMjMxMTgyMjEzMTA0NDg4MGI1MzIzNDMzMTE5MjIxMjMxMTgyMjEzMTA0NDg4MGIwOTIzNDMzMTE5MjIxMjMxMTgyMjEyMTA0NDg4MGFlNjIzNDMzMTE5MjIxMjQwMDAwMTAwMzExODIyMTI0NDg4MDEwYzIzNDM4YTAyMDE4YmZlOGJmZjBhMzUwOThiZmU4YmZmMTg4MWY0MDMwZDQwMDAwMzM0MDk4OTM0MDkyMzA4ODk4YTAyMDE4YmZlOGJmZmEyMzUxMThiZmU4YmZmYWExNTIyMGQ0MDAwMDMzNDExODkzNDExMjMxNmEwODk4YTAzMDE4YmZkMTYzNTAyOGJmZTE2MzUwMzI0OGJmZTA5MTYzNTA0MzQwMjM0MDNhMzM1MDIzNDAyMzQwNGEzMzUwMjM0MDI4YmZmMTZhMzM1MDIzNDAyMjEwNTE2YTIxNzg5OGEwMzAxOGJmZDE2MzUwZThiZmUxNjM1MGYyNDhiZmUwOTE2MzUxMDM0MGUzNDBmYTMzNTBlMzQwZTM0MTBhMzM1MGUzNDBlOGJmZjE2YTMzNTBlMzQwZTIxMDUxNjg4ZmY3ZTE3ODk4YTAyMDE4YmZlOGJmZjY1MzUwMTM1MDAzNDAxNDQzNDAwODk4YTAxMDE4YmZmNzIwODM1MDYzNTA1MzQwNjQ0MzQwNTg5OGEwNDAwYjEyNWIyMTA4YmZjYjIwMDhiZmRiMjEyOGJmZWIyMTE4YmZmYjIxNGIzODk4YTA0MDA4YmZjOGJmZTcwMDAzNTA4MzUwNzM0MDg0MDAwMGUzMjBhOGJmZjhiZmU4YmZkODhmZmNhNDIwMDBiMzIwYThiZmY4YmZlOGJmYzg4ZmZiYzg5OGEwMDAwMjcwZjIyNjcyNzA3MjI2NzI4MjI2NzI3MDUyNzE1NjcyOTIyNjcyYTIyNjcyNzA2MjI2NzI3MDgyMjY3MmIyMjY3MjcwNDIyNjc4OThhMDAwMTIyMjM4YzAwOGIwMDIxMDQwYzQ0ODk4YTA1MDEyMjMxMDAzMjA5MTI0NDMxMTA4MTA2MTI0NDM2MWEwMDI3MTExMjQ0OGJmYjU3MDIwMDE3MjIxMjhiZmI1NzAyMDAxNzIzMTIxMTQ0OGJmZDU3MDIwMDE3MjIxMjhiZmQ1NzAyMDAxNzIzMTIxMTQ0OGJmYzU3MDIwMDE3MjIwZDQ0OGJmYzU3MDIwMDE3MjQwYzQ0OGJmZTU3MDIwMDE3MjIwZDQ0MjcwZjIyYzAzMDY3MjgzMjBkNjcyOThiZmI1NzAyMDAxNzY3MmI4YmZkNTcwMjAwMTc2NzI3MDY4YmZlNTcwMjAwMTc2NzI3MDgyMjY3MmE4YmZjNTcwMjAwMTc2NzI3MDUyM2MwMWM2NzI3MDQ4YmZmNTcwMjAwMTc2NzMyMGEyMjI4NjQyNzA5ODhmZWMzMzIwYTg4ZmVlMTMyMGEyMjI4NjQyNzBiODhmZWI0MzIwYTg4ZmVkMjMyMGEyMjI4NjQyNzBjODhmZWE1MzIwYTg4ZmVjMzI3MDczMjA3NjcyMzhjMDA4YjAwMjEwNDBjNDQ4OThhMDEwMDMxMTYyMzA4MzgxMDgxMDYxMjQ0MzExNjIzMDgzOTFhMDAyNzE0MTI0NDMxMTYyMzA4MzgxODhiZmZjMDMyMTI0NDMxMTY4MTAyMDgzODEwODEwNjEyNDQzMTE2ODEwMjA4MzkxYTAwMjcxNjEyNDQzMTE2ODEwMjA4MzgxODI4NjQxMjQ0MzExNjIzMDgzODE5MjIxMjQ0MzExNjgxMDIwODM4MTkyMjEyNDQ4OThhMDUwMDhiZmI4YmZjOGJmZDhiZmU4OGZkYzMyODY0MjcwOTg4ZmUyMjhiZmY4OGZlNDA4OThhMDIwMDJhNjQ4YmZlMmE4OGZlMTE4YmZlMjcwNDg4ZmUwYTA5MGY0NDhiZmUyNzA1ODhmZTAwOGJmZTg4ZmUwZDI4NjQyNzA5ODhmZGY0OGJmZjJhNjQwYjI0MGE4YmZmMmE2NDI4NjQyNzBkODhmZGUyODhmZDc5MDk4OGZlMTczMjBhOGJmZjJhNjQyODY0MjcwZDg4ZmRjZTI4NjQyNzEwODhmZGM3ODhmZjhkODk4YTAyMDAyYTY0OGJmZTJhODhmZGI4OGJmZTI3MDQ4OGZkYjEwODBlNDQ4YmZlMjcwNTg4ZmRhNzhiZmU4OGZkYjQyOTY0MjIxMjQwMDAwYTI4NjQyNzBiODhmZDk0NDIwMDA3Mjg2NDI3MGM4OGZkOGE4YmZmODhmZGMxODk4YTAyMDAyYTY0OGJmZTJhODhmZDc5MDg4YmZlMjcwNDg4ZmQ3MTA4MjQwZjQ0MzIwYThiZmYyYTY0MGIyNDg4ZmNjMDI4NjQyNzA5ODhmZDViMjg2NDg4ZmQ2ODg4ZmQ3Njg5OGEwMjAwMmE2NDhiZmUyYTg4ZmQ0NzhiZmUyNzA0ODhmZDQwMDkwODI0MGU0NDMyMGE4YmZmMjk2NDIyMTI0MDAwMGEyODY0MjcwYjg4ZmQyOTQyMDAwNzI4NjQyNzBjODhmZDFmMjg2NDg4ZmQyYzg4ZmQzYTg5OGEwMjAxMjI4YmZlODhmZTdjOGJmZjI3MDY2NDI3MDg2NDA5MGU0NDI3MDQ2NDIyMGQ0MDAxNGQyNzA0NjQyMjBkNDAwMTM4Mjk2NDIyMTIyYjY0MjMxMjEwOGJmZWMwMzIyOTg4ZmNlMTIyMTIxMDhiZmVjMDMyMmI4OGZjZDYyMjEyMTAyOTY0MjMxMjJiNjQyMzEyMTA4YmZlYzAzMjI5ODhmY2MyMjMxMjEwOGJmZWMwMzIyYjg4ZmNiNzIyMTIxMDExNDAwMGVhMjk2NDIyMTIyYjY0MjIxMjEwOGJmZWMwMzIyOTg4ZmM5ZjIyMTIxMDhiZmVjMDMyMmI4OGZjOTQyMzEyMTAyOTY0MjMxMjJiNjQyMjEyMTA4YmZlYzAzMjI5ODhmYzgwMjMxMjEwOGJmZWMwMzIyYjg4ZmM3NTIzMTIxMDExNDAwMDljMjk2NDIyMTIyYjY0MjMxMjEwOGJmZWMwMzIyOTg4ZmM1ZDIzMTIxMDhiZmVjMDMyMmI4OGZjNTIyMzEyMTAyOTY0MjMxMjJiNjQyMzEyMTA4YmZlYzAzMjI5ODhmYzNlMjIxMjEwOGJmZWMwMzIyYjg4ZmMzMzIzMTIxMDExNDAwMDRlMjk2NDIyMTIyYjY0MjIxMjEwOGJmZWMwMzIyOTg4ZmMxYjIzMTIxMDhiZmVjMDMyMmI4OGZjMTAyMjEyMTAyOTY0MjMxMjJiNjQyMjEyMTA4YmZlYzAzMjI5ODhmYmZjMjIxMjEwOGJmZWMwMzIyYjg4ZmJmMTIyMTIxMDExNDEwMDVhOGJmZWMwMzI4YmZmODhmZThmNDIwMDRlOGJmZWMwMzI4YmZmODhmZTUxNDIwMDQyOGJmZWMwMzI4YmZmODhmZTA2NDIwMDM2OGJmZWMwMzI4YmZmODhmZGExNDIwMDJhMzIwNzI3MDc2NDgxNzgwODBjNDQ0MmZlYmI4YmZlYzAzMjI3MDQ4OGZiYTQyMjBkMjcwNzY0OGJmZWMwMzIyNzA3ODhmYjk2MGUxMDQ0NDJmZTk2MjcwODI3MDg2NDhiZmYwODY3MjM4YzAwOGIwMDIxMDQwYzQ0ODk4YTAxMDAzMTE2MjMwOTM4MTA4MTA2MTI0NDMxMTYyMzA5MzkxYTAwMjcxMjEyNDQzMTE2MjMwOTM4MTg4YmZmMTI0NDMxMTYyMzA4MzgxMDgxMDYxMjQ0MzExNjIzMDgzOTFhMDAyNzE2MTI0NDMxMTYyMzA4MzgxODI4NjQxMjQ0MzExNjIzMDkzOTFhMDIxNzI3MDY2NDI3MDg2NDA5MGU0NDMxMTYyMzA5MzgxOTIyMTI0NDMxMTYyMzA4MzgxOTIyMTI0NDg5OGEwMjAwMmE2NDI3MDQ2NDA4OGJmZTJhODhmYjA5MGY0NDhiZmUyNzA1ODhmYjAwOGJmZTg4ZmIwZDI4NjQyNzA5ODhmYWY0OGJmZjhiZmUyYTg4ZmFlYzBiMjQwYTg4ZmIyMjMyMGE4YmZmOGJmZTJhODhmYWRjMjg2NDI3MGQ4OGZhZDUyODY0MjcxMDg4ZmFjZTg4ZmM5NDg5OGEwMjAwMmE2NDI3MDQ2NDA5OGJmZTJhODhmYWJiMGU0NDhiZmUyNzA1ODhmYWIyOGJmZTg4ZmFiZjI5NjQyMjEyNDAwMDBhMjg2NDI3MGI4OGZhOWY0MjAwMDcyODY0MjcwYzg4ZmE5NThiZmY4OGZhY2M4OThhMDIwMDJhNjQ4YmZlMmE4OGZhODQwODI3MDQ2NDA4MjQwZjQ0MmE2NDI3MDQ2NDA4MjQ4YmZlMmE4OGZhNmYwOTBkNDAwMDBiMmE2NDI3MDQ2NDA4MzUxMjQyMDAwYTI0OGJmZTJhODhmYQppdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCnB1c2hieXRlcyAweDU4MDkzNTEyMzIwYThiZmYzNDEyMGIyNDg4ZjlhODI4NjQyNzA5ODhmYTQzMjg2NDg4ZmE1MDg4ZmE1ZTMyMGE4YmZmMzQxMjI4NjQyNzBkODhmYTJlMjg2NDI3MTA4OGZhMjc4OGZiZWQ4OThhMDIwMDJhNjQ4YmZlMmE4OGZhMTgwODI3MDQ2NDA5MjQwZTQ0MmE2NDI3MDQ2NDA5MjQ4YmZlMmE4OGZhMDMwOTBjNDAwMDI5MjQ4YmZlMmE4OGY5ZjcwOTM1MTMzMjBhOGJmZjI5NjQyMjEyNDAwMDBhMjg2NDI3MGI4OGY5ZTI0MjAwMTUyODY0MjcwYzg4ZjlkODQyMDAwYjJhNjQyNzA0NjQwOTM1MTM0MmZmZDYyODY0ODhmOWQ3ODhmOWU1ODk4YTAzMDEyMjMxMTA4MTA2MTI0NDM2MWEwMDI3MTMxMjQ0MzEwMDI3MDU2NDEyNDQyNzA4NjQyMjEyNDQ4YmZkMjIwZDQ0OGJmZDI0MGM0NDhiZmUyMjBkNDQ4YmZkMmE2NDEzOGJmZTI3MDY2NDEzMTE4YmZmMjcwNDY0MTMxMTQ0MmI2NDIzMTI0MDAwNmMyNzBmNjQzNTBkOGJmZTI3MDY2NDBkNDAwMDFkMjcwNjY0OGJmZTA5MzUwYzM0MGMyMjBkNDEwMGZhMzIwYTM0MGMzNDBkMzEwMDg4Zjk3NDQyMDBlYzhiZmUyNzA2NjQwOTM1MGMzMTE2MjIwZDQ0MzExNjIzMDkzODEwMjUxMjQ0MzExNjIzMDkzODAwMzEwMDEyNDQzMTE2MjMwOTM4MTQzMjBhMTI0NDMxMTYyMzA5MzgxMTM0MGQxMjQ0MzExNjIzMDkzODEyMzQwYzEyNDQ0MjAwYWIyNzA2NjQyYTY0MjcwNDY0MDgwYjI0MGEyNzA2NjQyYTY0MjcwNDY0MDgyODY0MjcwZDg4ZjhmMTg4ZjhiYTA4MzUwYThiZmU4YmZkOGJmZjA4MGIyNDBhOGJmZThiZmQ4YmZmMDgyODY0MjcwZDg4ZjhkMzg4Zjg5YzA4MzUwYjM0MGIzNDBhMGQ0MDAwMjEzNDBhMzQwYjA5MzUwYzM0MGMyMjBkNDEwMDU1MzIwYTM0MGMyODY0MjcwOTg4ZjhhYzMxMDA4OGY4Y2E0MjAwNDIzNDBiMzQwYTA5MzUwYzMxMTYyMjBkNDQzMTE2MjMwOTM4MTAyNTEyNDQzMTE2MjMwOTM4MDAzMTAwMTI0NDMxMTYyMzA5MzgxNDMyMGExMjQ0MzExNjIzMDkzODExMjg2NDI3MDk4OGY4NmUxMjQ0MzExNjIzMDkzODEyMzQwYzEyNDQyYThiZmQ2NzI3MDY4YmZlNjcyNzA0OGJmZjY3MjcwNzMyMDc2NzIzOGMwMDhiMDAyMTA0MGM0NDg5OGEwMTAxMjI4YmZmYzAzMjg4ZmNiZDhiZmZjMDMyMjcwNDg4ZjgzMTIyMGQ0MDAxNjUyNzA0NjQyMjBkNDAwMTUwMjk2NDIyMTIyYjY0MjMxMjEwOGJmZmMwMzIyOTg4ZjgxMzIyMTIxMDhiZmZjMDMyMmI4OGY4MDgyMjEyMTAyOTY0MjMxMjJiNjQyMzEyMTA4YmZmYzAzMjI5ODhmN2Y0MjMxMjEwOGJmZmMwMzIyYjg4ZjdlOTIyMTIxMDExNDAwMGZjMjk2NDIyMTIyYjY0MjIxMjEwOGJmZmMwMzIyOTg4ZjdkMTIyMTIxMDhiZmZjMDMyMmI4OGY3YzYyMzEyMTAyOTY0MjMxMjJiNjQyMjEyMTA4YmZmYzAzMjI5ODhmN2IyMjMxMjEwOGJmZmMwMzIyYjg4ZjdhNzIzMTIxMDExNDAwMGE4Mjk2NDIyMTIyYjY0MjMxMjEwOGJmZmMwMzIyOTg4Zjc4ZjIzMTIxMDhiZmZjMDMyMmI4OGY3ODQyMzEyMTAyOTY0MjMxMjJiNjQyMzEyMTA4YmZmYzAzMjI5ODhmNzcwMjIxMjEwOGJmZmMwMzIyYjg4Zjc2NTIzMTIxMDExNDAwMDU0Mjk2NDIyMTIyYjY0MjIxMjEwOGJmZmMwMzIyOTg4Zjc0ZDIzMTIxMDhiZmZjMDMyMmI4OGY3NDIyMjEyMTAyOTY0MjMxMjJiNjQyMjEyMTA4YmZmYzAzMjI5ODhmNzJlMjIxMjEwOGJmZmMwMzIyYjg4ZjcyMzIyMTIxMDExNDEwMDZjOGJmZmMwMzIzMTE2MjMwOTM5MWEwMjE3ODhmY2VhNDIwMDVhOGJmZmMwMzIzMTE2MjMwOTM5MWEwMjE3ODhmYzZjNDIwMDQ4OGJmZmMwMzIzMTE2MjMwOTM5MWEwMjE3ODhmYzFmNDIwMDM2OGJmZmMwMzIzMTE2MjMwOTM5MWEwMjE3ODhmYmJmNDIwMDI0MzIwNzI3MDc2NDgxNzgwODBjNDQ0MmZlYTMyNzA0NjQyMjBkOGJmZmMwMzIyNzA3ODhmNmI5MjcwNzY0MGUxMDQ0NDJmZTg0MjcwODI3MDg2NDMxMTYyMzA5MzkxYTAyMTcwODY3MjM4YzAwODk4YTAwMDEyMjMxMDAzMjA5MTIzMTAwMjg2NDgwMTU2NTczNjM3MjZmNzc1ZjYzNjE2ZTYzNjU2YzVmNjE2NDY0NzI2NTczNzM4OGY2NzYxMjExNDRiMTI1YjIxMDI4NjQyNzA5ODhmNjY4YjIxMTI3MDU2NGIyMTQyMmIyMDEyMmIyMTIyNzA1NjRiMjE1YjNiMTI1YjIxMDI4NjQyNzBiODhmNjRhYjIxMTI3MDU2NGIyMTQyMmIyMDEyMmIyMTIyNzA1NjRiMjE1YjNiMTI1YjIxMDI4NjQyNzBjODhmNjJjYjIxMTI3MDU2NGIyMTQyMmIyMDEyMmIyMTIyNzA1NjRiMjE1YjNiMTIzYjIxMDIyYjIwODI3MDU2NGIyMDcyMmIyMDEyNzA1NjRiMjA5YjMyMzhjMDA4YjAwMjEwNDBjNDQ4OThhMDAwMTIyMzEwMDI4NjQ4MDEyNmQ2MTcyNmI2NTc0NWY2NjcyNjk2NTZlNjQ1ZjYxNjQ2NDcyODhmNWRiMTIzMjA0MjMxMjEwNDQyMzhjMDA4OThhMDAwMDIyODhmNjVhOGMwMDI3MGEyNzBlMjI4YjAwNTY1MGIwODk4YTAwMDAyMjI3MTU0NzA0MzYxYTAxOGMwMTM2MWEwMjhjMDIzNjFhMDM4YzAzMzYxYTA0OGMwNDM2MWEwNThjMDU4YjAxOGIwMjhiMDM4YjA0OGIwNTg4ZjYyZDhjMDAyNzBhMjcwZTIyOGIwMDU2NTBiMDg5OGEwMDAwMjI0NzAyMzYxYTAxMjI1NThjMDEzNjFhMDIxNzhjMDI4YjAxOGIwMjg4Zjg1MThjMDAyNzBhMjcwZTIyOGIwMDU2NTBiMDg5OGEwMDAwMjI0NzAzMzYxYTAxMTc4YzAxMzYxYTAyMTc4YzAyMzYxYTAzMTc4YzAzOGIwMThiMDI4YjAzODhmYjc4OGMwMDI3MGEyNzBlMjI4YjAwNTY1MGIwODk4YTAwMDAyMjQ5MzYxYTAxMjI1NThjMDE4YjAxODhmY2Q2OGMwMDI3MGE4YjAwMTY1MGIwODk4YTAwMDAyMjg4ZmU2ZDhjMDAyNzBhMjcwZTIyOGIwMDU2NTBiMDg5OGEwMDAwMjI4OGZlZmM4YzAwMjcwYThiMDAxNjUwYjA4OSAvLyAweDU4MDkzNTEyMzIwYThiZmYzNDEyMGIyNDg4ZjlhODI4NjQyNzA5ODhmYTQzMjg2NDg4ZmE1MDg4ZmE1ZTMyMGE4YmZmMzQxMjI4NjQyNzBkODhmYTJlMjg2NDI3MTA4OGZhMjc4OGZiZWQ4OThhMDIwMDJhNjQ4YmZlMmE4OGZhMTgwODI3MDQ2NDA5MjQwZTQ0MmE2NDI3MDQ2NDA5MjQ4YmZlMmE4OGZhMDMwOTBjNDAwMDI5MjQ4YmZlMmE4OGY5ZjcwOTM1MTMzMjBhOGJmZjI5NjQyMjEyNDAwMDBhMjg2NDI3MGI4OGY5ZTI0MjAwMTUyODY0MjcwYzg4ZjlkODQyMDAwYjJhNjQyNzA0NjQwOTM1MTM0MmZmZDYyODY0ODhmOWQ3ODhmOWU1ODk4YTAzMDEyMjMxMTA4MTA2MTI0NDM2MWEwMDI3MTMxMjQ0MzEwMDI3MDU2NDEyNDQyNzA4NjQyMjEyNDQ4YmZkMjIwZDQ0OGJmZDI0MGM0NDhiZmUyMjBkNDQ4YmZkMmE2NDEzOGJmZTI3MDY2NDEzMTE4YmZmMjcwNDY0MTMxMTQ0MmI2NDIzMTI0MDAwNmMyNzBmNjQzNTBkOGJmZTI3MDY2NDBkNDAwMDFkMjcwNjY0OGJmZTA5MzUwYzM0MGMyMjBkNDEwMGZhMzIwYTM0MGMzNDBkMzEwMDg4Zjk3NDQyMDBlYzhiZmUyNzA2NjQwOTM1MGMzMTE2MjIwZDQ0MzExNjIzMDkzODEwMjUxMjQ0MzExNjIzMDkzODAwMzEwMDEyNDQzMTE2MjMwOTM4MTQzMjBhMTI0NDMxMTYyMzA5MzgxMTM0MGQxMjQ0MzExNjIzMDkzODEyMzQwYzEyNDQ0MjAwYWIyNzA2NjQyYTY0MjcwNDY0MDgwYjI0MGEyNzA2NjQyYTY0MjcwNDY0MDgyODY0MjcwZDg4ZjhmMTg4ZjhiYTA4MzUwYThiZmU4YmZkOGJmZjA4MGIyNDBhOGJmZThiZmQ4YmZmMDgyODY0MjcwZDg4ZjhkMzg4Zjg5YzA4MzUwYjM0MGIzNDBhMGQ0MDAwMjEzNDBhMzQwYjA5MzUwYzM0MGMyMjBkNDEwMDU1MzIwYTM0MGMyODY0MjcwOTg4ZjhhYzMxMDA4OGY4Y2E0MjAwNDIzNDBiMzQwYTA5MzUwYzMxMTYyMjBkNDQzMTE2MjMwOTM4MTAyNTEyNDQzMTE2MjMwOTM4MDAzMTAwMTI0NDMxMTYyMzA5MzgxNDMyMGExMjQ0MzExNjIzMDkzODExMjg2NDI3MDk4OGY4NmUxMjQ0MzExNjIzMDkzODEyMzQwYzEyNDQyYThiZmQ2NzI3MDY4YmZlNjcyNzA0OGJmZjY3MjcwNzMyMDc2NzIzOGMwMDhiMDAyMTA0MGM0NDg5OGEwMTAxMjI4YmZmYzAzMjg4ZmNiZDhiZmZjMDMyMjcwNDg4ZjgzMTIyMGQ0MDAxNjUyNzA0NjQyMjBkNDAwMTUwMjk2NDIyMTIyYjY0MjMxMjEwOGJmZmMwMzIyOTg4ZjgxMzIyMTIxMDhiZmZjMDMyMmI4OGY4MDgyMjEyMTAyOTY0MjMxMjJiNjQyMzEyMTA4YmZmYzAzMjI5ODhmN2Y0MjMxMjEwOGJmZmMwMzIyYjg4ZjdlOTIyMTIxMDExNDAwMGZjMjk2NDIyMTIyYjY0MjIxMjEwOGJmZmMwMzIyOTg4ZjdkMTIyMTIxMDhiZmZjMDMyMmI4OGY3YzYyMzEyMTAyOTY0MjMxMjJiNjQyMjEyMTA4YmZmYzAzMjI5ODhmN2IyMjMxMjEwOGJmZmMwMzIyYjg4ZjdhNzIzMTIxMDExNDAwMGE4Mjk2NDIyMTIyYjY0MjMxMjEwOGJmZmMwMzIyOTg4Zjc4ZjIzMTIxMDhiZmZjMDMyMmI4OGY3ODQyMzEyMTAyOTY0MjMxMjJiNjQyMzEyMTA4YmZmYzAzMjI5ODhmNzcwMjIxMjEwOGJmZmMwMzIyYjg4Zjc2NTIzMTIxMDExNDAwMDU0Mjk2NDIyMTIyYjY0MjIxMjEwOGJmZmMwMzIyOTg4Zjc0ZDIzMTIxMDhiZmZjMDMyMmI4OGY3NDIyMjEyMTAyOTY0MjMxMjJiNjQyMjEyMTA4YmZmYzAzMjI5ODhmNzJlMjIxMjEwOGJmZmMwMzIyYjg4ZjcyMzIyMTIxMDExNDEwMDZjOGJmZmMwMzIzMTE2MjMwOTM5MWEwMjE3ODhmY2VhNDIwMDVhOGJmZmMwMzIzMTE2MjMwOTM5MWEwMjE3ODhmYzZjNDIwMDQ4OGJmZmMwMzIzMTE2MjMwOTM5MWEwMjE3ODhmYzFmNDIwMDM2OGJmZmMwMzIzMTE2MjMwOTM5MWEwMjE3ODhmYmJmNDIwMDI0MzIwNzI3MDc2NDgxNzgwODBjNDQ0MmZlYTMyNzA0NjQyMjBkOGJmZmMwMzIyNzA3ODhmNmI5MjcwNzY0MGUxMDQ0NDJmZTg0MjcwODI3MDg2NDMxMTYyMzA5MzkxYTAyMTcwODY3MjM4YzAwODk4YTAwMDEyMjMxMDAzMjA5MTIzMTAwMjg2NDgwMTU2NTczNjM3MjZmNzc1ZjYzNjE2ZTYzNjU2YzVmNjE2NDY0NzI2NTczNzM4OGY2NzYxMjExNDRiMTI1YjIxMDI4NjQyNzA5ODhmNjY4YjIxMTI3MDU2NGIyMTQyMmIyMDEyMmIyMTIyNzA1NjRiMjE1YjNiMTI1YjIxMDI4NjQyNzBiODhmNjRhYjIxMTI3MDU2NGIyMTQyMmIyMDEyMmIyMTIyNzA1NjRiMjE1YjNiMTI1YjIxMDI4NjQyNzBjODhmNjJjYjIxMTI3MDU2NGIyMTQyMmIyMDEyMmIyMTIyNzA1NjRiMjE1YjNiMTIzYjIxMDIyYjIwODI3MDU2NGIyMDcyMmIyMDEyNzA1NjRiMjA5YjMyMzhjMDA4YjAwMjEwNDBjNDQ4OThhMDAwMTIyMzEwMDI4NjQ4MDEyNmQ2MTcyNmI2NTc0NWY2NjcyNjk2NTZlNjQ1ZjYxNjQ2NDcyODhmNWRiMTIzMjA0MjMxMjEwNDQyMzhjMDA4OThhMDAwMDIyODhmNjVhOGMwMDI3MGEyNzBlMjI4YjAwNTY1MGIwODk4YTAwMDAyMjI3MTU0NzA0MzYxYTAxOGMwMTM2MWEwMjhjMDIzNjFhMDM4YzAzMzYxYTA0OGMwNDM2MWEwNThjMDU4YjAxOGIwMjhiMDM4YjA0OGIwNTg4ZjYyZDhjMDAyNzBhMjcwZTIyOGIwMDU2NTBiMDg5OGEwMDAwMjI0NzAyMzYxYTAxMjI1NThjMDEzNjFhMDIxNzhjMDI4YjAxOGIwMjg4Zjg1MThjMDAyNzBhMjcwZTIyOGIwMDU2NTBiMDg5OGEwMDAwMjI0NzAzMzYxYTAxMTc4YzAxMzYxYTAyMTc4YzAyMzYxYTAzMTc4YzAzOGIwMThiMDI4YjAzODhmYjc4OGMwMDI3MGEyNzBlMjI4YjAwNTY1MGIwODk4YTAwMDAyMjQ5MzYxYTAxMjI1NThjMDE4YjAxODhmY2Q2OGMwMDI3MGE4YjAwMTY1MGIwODk4YTAwMDAyMjg4ZmU2ZDhjMDAyNzBhMjcwZTIyOGIwMDU2NTBiMDg5OGEwMDAwMjI4OGZlZmM4YzAwMjcwYThiMDAxNjUwYjA4OQppdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCnB1c2hieXRlcyAweDA4ODEwMDQzIC8vIDB4MDg4MTAwNDMKaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCmludGNfMCAvLyAxCml0eG5fZmllbGQgRXh0cmFQcm9ncmFtUGFnZXMKaW50Y18wIC8vIDEKaXR4bl9maWVsZCBHbG9iYWxOdW1CeXRlU2xpY2UKcHVzaGludCA5IC8vIDkKaXR4bl9maWVsZCBHbG9iYWxOdW1VaW50Cml0eG5fc3VibWl0Cml0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKc3RvcmUgMTMKbG9hZCAxMwpmcmFtZV9idXJ5IDAKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBYZmVyQXNzZXQKYnl0ZWNfMyAvLyAieWVzX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldAo9PQpibnogY3JlYXRlZXNjcm93XzE0X2w0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgWGZlckFzc2V0CmJ5dGVjIDQgLy8gIm5vX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldAo9PQpibnogY3JlYXRlZXNjcm93XzE0X2wzCnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgQXNzZXRBbW91bnQKZnJhbWVfZGlnIC0zCmZyYW1lX2RpZyAtNApmcmFtZV9kaWcgLTIKKwoqCmludGMgNCAvLyAxMDAwMDAwCi8KZnJhbWVfZGlnIC0zCmZyYW1lX2RpZyAtNApmcmFtZV9kaWcgLTIKKwpieXRlYyAxNSAvLyAiZmVlX2Jhc2VfcGVyY2VudCIKYXBwX2dsb2JhbF9nZXQKY2FsbHN1YiBjYWxjdWxhdGVmZWVjb21taXRfMgorCj09CmFzc2VydApsb2FkIDEzCmZyYW1lX2RpZyAtNApmcmFtZV9kaWcgLTIKZnJhbWVfZGlnIC0zCmZyYW1lX2RpZyAtMQppbnRjXzAgLy8gMQpieXRlY18wIC8vICJjb2xsYXRlcmFsX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldApjYWxsc3ViIHNldHVwZXNjcm93XzEzCmIgY3JlYXRlZXNjcm93XzE0X2w1CmNyZWF0ZWVzY3Jvd18xNF9sMzoKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBBc3NldEFtb3VudApmcmFtZV9kaWcgLTMKPT0KYXNzZXJ0CmxvYWQgMTMKZnJhbWVfZGlnIC00CmZyYW1lX2RpZyAtMgp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIEFzc2V0QW1vdW50CmludGNfMSAvLyAwCmludGNfMSAvLyAwCmJ5dGVjIDQgLy8gIm5vX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldApjYWxsc3ViIHNldHVwZXNjcm93XzEzCmIgY3JlYXRlZXNjcm93XzE0X2w1CmNyZWF0ZWVzY3Jvd18xNF9sNDoKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBBc3NldEFtb3VudApmcmFtZV9kaWcgLTMKPT0KYXNzZXJ0CmxvYWQgMTMKZnJhbWVfZGlnIC00CmZyYW1lX2RpZyAtMgp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIEFzc2V0QW1vdW50CmludGNfMCAvLyAxCmludGNfMSAvLyAwCmJ5dGVjXzMgLy8gInllc19hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKY2FsbHN1YiBzZXR1cGVzY3Jvd18xMwpjcmVhdGVlc2Nyb3dfMTRfbDU6CnJldHN1YgoKLy8gYWN0aXZhdGVfbWFya2V0CmFjdGl2YXRlbWFya2V0XzE1Ogpwcm90byAwIDEKaW50Y18xIC8vIDAKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbklECmNhbGxzdWIgaXRvYV8xMgpzdG9yZSAxNApieXRlYyAxNCAvLyAiaXNfYWN0aXZhdGVkIgphcHBfZ2xvYmFsX2dldAppbnRjXzEgLy8gMAo9PQphc3NlcnQKaXR4bl9iZWdpbgpwdXNoaW50IDMgLy8gYWNmZwppdHhuX2ZpZWxkIFR5cGVFbnVtCmJ5dGVjIDIzIC8vICJBbHBoYSBNYXJrZXQgIgpsb2FkIDE0CmNvbmNhdApwdXNoYnl0ZXMgMHgyMDU5NjU3MyAvLyAiIFllcyIKY29uY2F0Cml0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCmJ5dGVjIDI0IC8vICJodHRwczovL3d3dy5hbHBoYWFyY2FkZS5jb20vbWFya2V0LyIKbG9hZCAxNApjb25jYXQKaXR4bl9maWVsZCBDb25maWdBc3NldFVSTApwdXNoaW50IDYgLy8gNgppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKaW50YyA2IC8vIDE4NDQ2NzQ0MDczNzA5NTUxNjE1Cml0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbApnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgpwdXNoYnl0ZXMgMHg0MTRjNTA0ODQxMmQ1OSAvLyAiQUxQSEEtWSIKaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCml0eG5fc3VibWl0CmJ5dGVjXzMgLy8gInllc19hc3NldF9pZCIKaXR4biBDcmVhdGVkQXNzZXRJRAphcHBfZ2xvYmFsX3B1dAppdHhuX2JlZ2luCnB1c2hpbnQgMyAvLyBhY2ZnCml0eG5fZmllbGQgVHlwZUVudW0KYnl0ZWMgMjMgLy8gIkFscGhhIE1hcmtldCAiCmxvYWQgMTQKY29uY2F0CnB1c2hieXRlcyAweDIwNGU2ZiAvLyAiIE5vIgpjb25jYXQKaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKYnl0ZWMgMjQgLy8gImh0dHBzOi8vd3d3LmFscGhhYXJjYWRlLmNvbS9tYXJrZXQvIgpsb2FkIDE0CmNvbmNhdAppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCnB1c2hpbnQgNiAvLyA2Cml0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwppbnRjIDYgLy8gMTg0NDY3NDQwNzM3MDk1NTE2MTUKaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCml0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCnB1c2hieXRlcyAweDQxNGM1MDQ4NDEyZDRlIC8vICJBTFBIQS1OIgppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKaXR4bl9zdWJtaXQKYnl0ZWMgNCAvLyAibm9fYXNzZXRfaWQiCml0eG4gQ3JlYXRlZEFzc2V0SUQKYXBwX2dsb2JhbF9wdXQKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKaW50Y18xIC8vIDAKYnl0ZWNfMCAvLyAiY29sbGF0ZXJhbF9hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKY2FsbHN1YiBzZW5kYXNzZXRfNgpieXRlYyAxNCAvLyAiaXNfYWN0aXZhdGVkIgppbnRjXzAgLy8gMQphcHBfZ2xvYmFsX3B1dApieXRlY18xIC8vICJ5ZXNfc3VwcGx5IgppbnRjXzEgLy8gMAphcHBfZ2xvYmFsX3B1dApieXRlY18yIC8vICJub19zdXBwbHkiCmludGNfMSAvLyAwCmFwcF9nbG9iYWxfcHV0CmludGNfMCAvLyAxCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMAppbnRjXzMgLy8gMjU2CjwKYXNzZXJ0CnJldHN1YgoKLy8gdmFsaWRhdGVfbWF0Y2hfZ3JvdXBfc3RydWN0dXJlCnZhbGlkYXRlbWF0Y2hncm91cHN0cnVjdHVyZV8xNjoKcHJvdG8gMiAwCmJ5dGVjIDE0IC8vICJpc19hY3RpdmF0ZWQiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAxCj09CmFzc2VydApieXRlYyA4IC8vICJpc19yZXNvbHZlZCIKYXBwX2dsb2JhbF9nZXQKaW50Y18xIC8vIDAKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgVHlwZUVudW0KcHVzaGludCA2IC8vIGFwcGwKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnNhIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweGRiOTIyZmMyIC8vICJtYXRjaF90YWtlcihhcHBsaWNhdGlvbil1aW50NjQiCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIEFwcGxpY2F0aW9uSUQKZnJhbWVfZGlnIC0xCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzIgLy8gMgotCmd0eG5zIFR5cGVFbnVtCnB1c2hpbnQgNiAvLyBhcHBsCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzIgLy8gMgotCmd0eG5zYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgzMmNlMjgxZSAvLyAibWF0Y2hfbWFrZXIoYXBwbGljYXRpb24sdWludDY0KXVpbnQ4Igo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18yIC8vIDIKLQpndHhucyBBcHBsaWNhdGlvbklECmZyYW1lX2RpZyAtMgo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBPbkNvbXBsZXRpb24KaW50Y18xIC8vIE5vT3AKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMiAvLyAyCi0KZ3R4bnMgT25Db21wbGV0aW9uCmludGNfMSAvLyBOb09wCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIE9uQ29tcGxldGlvbgppbnRjXzEgLy8gTm9PcAo9PQphc3NlcnQKcmV0c3ViCgovLyB2YWxpZGF0ZV9tYXJrZXRfY29uc2lzdGVuY3kKdmFsaWRhdGVtYXJrZXRjb25zaXN0ZW5jeV8xNzoKcHJvdG8gMiAwCmZyYW1lX2RpZyAtMgpieXRlYyAxNiAvLyAibWFya2V0X2FwcF9pZCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKZnJhbWVfZGlnIC0xCmJ5dGVjIDE2IC8vICJtYXJrZXRfYXBwX2lkIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwo9PQphc3NlcnQKZnJhbWVfZGlnIC0yCmJ5dGVjIDE2IC8vICJtYXJrZXRfYXBwX2lkIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uSUQKPT0KYXNzZXJ0CmZyYW1lX2RpZyAtMQpieXRlYyAxNiAvLyAibWFya2V0X2FwcF9pZCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbklECj09CmFzc2VydApyZXRzdWIKCi8vIGhhbmRsZV9iaWRfYmlkX2NvbXBsZW1lbnRfbWF0Y2gKaGFuZGxlYmlkYmlkY29tcGxlbWVudG1hdGNoXzE4Ogpwcm90byAzIDAKZnJhbWVfZGlnIC0yCmJ5dGVjIDEwIC8vICJwcmljZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKZnJhbWVfZGlnIC0zCmJ5dGVjIDEwIC8vICJwcmljZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKKwpmcmFtZV9kaWcgLTIKYnl0ZWMgMTcgLy8gInNsaXBwYWdlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMworCmludGMgNCAvLyAxMDAwMDAwCj49CmFzc2VydApmcmFtZV9kaWcgLTMKYnl0ZWMgMTMgLy8gIm93bmVyIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwpmcmFtZV9kaWcgLTMKY2FsbHN1YiBnZXRhcHBhZGRyXzQKZnJhbWVfZGlnIC0zCmJ5dGVjIDYgLy8gInBvc2l0aW9uIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwppbnRjXzEgLy8gMAo9PQpibnogaGFuZGxlYmlkYmlkY29tcGxlbWVudG1hdGNoXzE4X2w1CmJ5dGVjXzMgLy8gInllc19hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKaGFuZGxlYmlkYmlkY29tcGxlbWVudG1hdGNoXzE4X2wyOgpmcmFtZV9kaWcgLTEKY2FsbHN1YiBnZXRmdW5kc3RvdHJhZGVyXzgKZnJhbWVfZGlnIC0yCmJ5dGVjIDEzIC8vICJvd25lciIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKZnJhbWVfZGlnIC0yCmNhbGxzdWIgZ2V0YXBwYWRkcl80CmZyYW1lX2RpZyAtMgpieXRlYyA2IC8vICJwb3NpdGlvbiIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKaW50Y18xIC8vIDAKPT0KYm56IGhhbmRsZWJpZGJpZGNvbXBsZW1lbnRtYXRjaF8xOF9sNApieXRlY18zIC8vICJ5ZXNfYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CmIgaGFuZGxlYmlkYmlkY29tcGxlbWVudG1hdGNoXzE4X2w2CmhhbmRsZWJpZGJpZGNvbXBsZW1lbnRtYXRjaF8xOF9sNDoKYnl0ZWMgNCAvLyAibm9fYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CmIgaGFuZGxlYmlkYmlkY29tcGxlbWVudG1hdGNoXzE4X2w2CmhhbmRsZWJpZGJpZGNvbXBsZW1lbnRtYXRjaF8xOF9sNToKYnl0ZWMgNCAvLyAibm9fYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CmIgaGFuZGxlYmlkYmlkY29tcGxlbWVudG1hdGNoXzE4X2wyCmhhbmRsZWJpZGJpZGNvbXBsZW1lbnRtYXRjaF8xOF9sNjoKZnJhbWVfZGlnIC0xCmNhbGxzdWIgZ2V0ZnVuZHN0b3RyYWRlcl84CmJ5dGVjXzEgLy8gInllc19zdXBwbHkiCmJ5dGVjXzEgLy8gInllc19zdXBwbHkiCmFwcF9nbG9iYWxfZ2V0CmZyYW1lX2RpZyAtMQorCmFwcF9nbG9iYWxfcHV0CmJ5dGVjXzIgLy8gIm5vX3N1cHBseSIKYnl0ZWNfMiAvLyAibm9fc3VwcGx5IgphcHBfZ2xvYmFsX2dldApmcmFtZV9kaWcgLTEKKwphcHBfZ2xvYmFsX3B1dApyZXRzdWIKCi8vIGhhbmRsZV9hc2tfYXNrX2NvbXBsZW1lbnRfbWF0Y2gKaGFuZGxlYXNrYXNrY29tcGxlbWVudG1hdGNoXzE5Ogpwcm90byAzIDAKZnJhbWVfZGlnIC0yCmJ5dGVjIDEwIC8vICJwcmljZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKZnJhbWVfZGlnIC0zCmJ5dGVjIDEwIC8vICJwcmljZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKKwpmcmFtZV9kaWcgLTIKYnl0ZWMgMTcgLy8gInNsaXBwYWdlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwotCmludGMgNCAvLyAxMDAwMDAwCjw9CmFzc2VydApmcmFtZV9kaWcgLTIKYnl0ZWMgMTAgLy8gInByaWNlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwpmcmFtZV9kaWcgLTIKYnl0ZWMgMTcgLy8gInNsaXBwYWdlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwotCmludGMgNCAvLyAxMDAwMDAwCmZyYW1lX2RpZyAtMwpieXRlYyAxMCAvLyAicHJpY2UiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF8zCi0KPApibnogaGFuZGxlYXNrYXNrY29tcGxlbWVudG1hdGNoXzE5X2wyCmludGMgNCAvLyAxMDAwMDAwCmZyYW1lX2RpZyAtMwpieXRlYyAxMCAvLyAicHJpY2UiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF8zCi0Kc3RvcmUgMTcKYiBoYW5kbGVhc2thc2tjb21wbGVtZW50bWF0Y2hfMTlfbDMKaGFuZGxlYXNrYXNrY29tcGxlbWVudG1hdGNoXzE5X2wyOgpmcmFtZV9kaWcgLTIKYnl0ZWMgMTAgLy8gInByaWNlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwpmcmFtZV9kaWcgLTIKYnl0ZWMgMTcgLy8gInNsaXBwYWdlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwotCnN0b3JlIDE3CmhhbmRsZWFza2Fza2NvbXBsZW1lbnRtYXRjaF8xOV9sMzoKZnJhbWVfZGlnIC0zCmJ5dGVjIDEzIC8vICJvd25lciIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKZnJhbWVfZGlnIC0zCmNhbGxzdWIgZ2V0YXBwYWRkcl80CmJ5dGVjXzAgLy8gImNvbGxhdGVyYWxfYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CmZyYW1lX2RpZyAtMQpmcmFtZV9kaWcgLTMKYnl0ZWMgMTAgLy8gInByaWNlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwoqCmludGMgNCAvLyAxMDAwMDAwCi8KY2FsbHN1YiBnZXRmdW5kc3RvdHJhZGVyXzgKZnJhbWVfZGlnIC0yCmJ5dGVjIDEzIC8vICJvd25lciIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKZnJhbWVfZGlnIC0yCmNhbGxzdWIgZ2V0YXBwYWRkcl80CmJ5dGVjXzAgLy8gImNvbGxhdGVyYWxfYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CmZyYW1lX2RpZyAtMQpsb2FkIDE3CioKaW50YyA0IC8vIDEwMDAwMDAKLwpmcmFtZV9kaWcgLTEKbG9hZCAxNwpieXRlYyAxNSAvLyAiZmVlX2Jhc2VfcGVyY2VudCIKYXBwX2dsb2JhbF9nZXQKY2FsbHN1YiBjYWxjdWxhdGVmZWVfMQotCmNhbGxzdWIgZ2V0ZnVuZHN0b3RyYWRlcl84Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmZyYW1lX2RpZyAtMQpsb2FkIDE3CmJ5dGVjIDE1IC8vICJmZWVfYmFzZV9wZXJjZW50IgphcHBfZ2xvYmFsX2dldApjYWxsc3ViIGNhbGN1bGF0ZWZlZV8xCmJ5dGVjXzAgLy8gImNvbGxhdGVyYWxfYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjIDIxIC8vICJmZWVfYWRkcmVzcyIKYXBwX2dsb2JhbF9nZXQKY2FsbHN1YiBzZW5kYXNzZXRfNgpieXRlY18xIC8vICJ5ZXNfc3VwcGx5IgpieXRlY18xIC8vICJ5ZXNfc3VwcGx5IgphcHBfZ2xvYmFsX2dldApmcmFtZV9kaWcgLTEKLQphcHBfZ2xvYmFsX3B1dApieXRlY18yIC8vICJub19zdXBwbHkiCmJ5dGVjXzIgLy8gIm5vX3N1cHBseSIKYXBwX2dsb2JhbF9nZXQKZnJhbWVfZGlnIC0xCi0KYXBwX2dsb2JhbF9wdXQKcmV0c3ViCgovLyBwcm9jZXNzX3BvdGVudGlhbF9tYXRjaApwcm9jZXNzcG90ZW50aWFsbWF0Y2hfMjA6CnByb3RvIDIgMQppbnRjXzEgLy8gMApmcmFtZV9kaWcgLTIKdHhuYXMgQXBwbGljYXRpb25zCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKY2FsbHN1YiB2YWxpZGF0ZW1hdGNoZ3JvdXBzdHJ1Y3R1cmVfMTYKZnJhbWVfZGlnIC0yCnR4bmFzIEFwcGxpY2F0aW9ucwpmcmFtZV9kaWcgLTEKdHhuYXMgQXBwbGljYXRpb25zCmNhbGxzdWIgdmFsaWRhdGVtYXJrZXRjb25zaXN0ZW5jeV8xNwpieXRlYyA4IC8vICJpc19yZXNvbHZlZCIKYXBwX2dsb2JhbF9nZXQKaW50Y18xIC8vIDAKPT0KYXNzZXJ0CmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKY2FsbHN1YiBnZXRhcHBjcmVhdG9yXzUKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKPT0KYXNzZXJ0CmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKY2FsbHN1YiBnZXRhcHBjcmVhdG9yXzUKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKPT0KYXNzZXJ0CmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWMgMjUgLy8gImZlZV90aW1lcl9zdGFydCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlYyAyNSAvLyAiZmVlX3RpbWVyX3N0YXJ0IgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwo8PQphc3NlcnQKZnJhbWVfZGlnIC0yCnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlYyA2IC8vICJwb3NpdGlvbiIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKaW50Y18xIC8vIDAKPT0KZnJhbWVfZGlnIC0yCnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlYyAxMSAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKaW50Y18wIC8vIDEKPT0KJiYKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlYyA2IC8vICJwb3NpdGlvbiIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKaW50Y18wIC8vIDEKPT0KJiYKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlYyAxMSAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKaW50Y18wIC8vIDEKPT0KJiYKZnJhbWVfZGlnIC0yCnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlYyA2IC8vICJwb3NpdGlvbiIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKaW50Y18wIC8vIDEKPT0KZnJhbWVfZGlnIC0yCnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlYyAxMSAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKaW50Y18wIC8vIDEKPT0KJiYKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlYyA2IC8vICJwb3NpdGlvbiIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKaW50Y18xIC8vIDAKPT0KJiYKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlYyAxMSAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKaW50Y18wIC8vIDEKPT0KJiYKfHwKYm56IHByb2Nlc3Nwb3RlbnRpYWxtYXRjaF8yMF9sMwpmcmFtZV9kaWcgLTIKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjIDYgLy8gInBvc2l0aW9uIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwppbnRjXzEgLy8gMAo9PQpmcmFtZV9kaWcgLTIKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjIDExIC8vICJzaWRlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwppbnRjXzEgLy8gMAo9PQomJgpmcmFtZV9kaWcgLTEKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjIDYgLy8gInBvc2l0aW9uIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwppbnRjXzAgLy8gMQo9PQomJgpmcmFtZV9kaWcgLTEKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjIDExIC8vICJzaWRlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwppbnRjXzEgLy8gMAo9PQomJgpmcmFtZV9kaWcgLTIKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjIDYgLy8gInBvc2l0aW9uIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwppbnRjXzAgLy8gMQo9PQpmcmFtZV9kaWcgLTIKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjIDExIC8vICJzaWRlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwppbnRjXzEgLy8gMAo9PQomJgpmcmFtZV9kaWcgLTEKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjIDYgLy8gInBvc2l0aW9uIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwppbnRjXzEgLy8gMAo9PQomJgpmcmFtZV9kaWcgLTEKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjIDExIC8vICJzaWRlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwppbnRjXzEgLy8gMAo9PQomJgp8fApieiBwcm9jZXNzcG90ZW50aWFsbWF0Y2hfMjBfbDQKZnJhbWVfZGlnIC0yCnR4bmFzIEFwcGxpY2F0aW9ucwpmcmFtZV9kaWcgLTEKdHhuYXMgQXBwbGljYXRpb25zCnR4biBHcm91cEluZGV4CmludGNfMiAvLyAyCi0KZ3R4bnNhIEFwcGxpY2F0aW9uQXJncyAyCmJ0b2kKY2FsbHN1YiBoYW5kbGVhc2thc2tjb21wbGVtZW50bWF0Y2hfMTkKYiBwcm9jZXNzcG90ZW50aWFsbWF0Y2hfMjBfbDQKcHJvY2Vzc3BvdGVudGlhbG1hdGNoXzIwX2wzOgpmcmFtZV9kaWcgLTIKdHhuYXMgQXBwbGljYXRpb25zCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKdHhuIEdyb3VwSW5kZXgKaW50Y18yIC8vIDIKLQpndHhuc2EgQXBwbGljYXRpb25BcmdzIDIKYnRvaQpjYWxsc3ViIGhhbmRsZWJpZGJpZGNvbXBsZW1lbnRtYXRjaF8xOApwcm9jZXNzcG90ZW50aWFsbWF0Y2hfMjBfbDQ6CmludGNfMCAvLyAxCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMAppbnRjXzMgLy8gMjU2CjwKYXNzZXJ0CnJldHN1YgoKLy8gcmVzb2x2ZV9tYXJrZXQKcmVzb2x2ZW1hcmtldF8yMToKcHJvdG8gMSAxCmludGNfMSAvLyAwCnR4biBTZW5kZXIKYnl0ZWMgMjAgLy8gIm9yYWNsZV9hZGRyZXNzIgphcHBfZ2xvYmFsX2dldAo9PQphc3NlcnQKYnl0ZWMgMTggLy8gIm91dGNvbWUiCmZyYW1lX2RpZyAtMQphcHBfZ2xvYmFsX3B1dApieXRlYyA4IC8vICJpc19yZXNvbHZlZCIKaW50Y18wIC8vIDEKYXBwX2dsb2JhbF9wdXQKaW50Y18wIC8vIDEKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmludGNfMyAvLyAyNTYKPAphc3NlcnQKcmV0c3ViCgovLyBtZXJnZV9zaGFyZXMKbWVyZ2VzaGFyZXNfMjI6CnByb3RvIDAgMQppbnRjXzEgLy8gMApieXRlYyA4IC8vICJpc19yZXNvbHZlZCIKYXBwX2dsb2JhbF9nZXQKaW50Y18xIC8vIDAKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMiAvLyAyCi0KZ3R4bnMgVHlwZUVudW0KcHVzaGludCA0IC8vIGF4ZmVyCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIFR5cGVFbnVtCnB1c2hpbnQgNCAvLyBheGZlcgo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18yIC8vIDIKLQpndHhucyBBc3NldFJlY2VpdmVyCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIEFzc2V0UmVjZWl2ZXIKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKPT0KYXNzZXJ0CmJ5dGVjXzMgLy8gInllc19hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKdHhuIEdyb3VwSW5kZXgKaW50Y18yIC8vIDIKLQpndHhucyBYZmVyQXNzZXQKPT0KYXNzZXJ0CmJ5dGVjIDQgLy8gIm5vX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIFhmZXJBc3NldAo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18yIC8vIDIKLQpndHhucyBBc3NldEFtb3VudAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIEFzc2V0QW1vdW50Cj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIEFzc2V0QW1vdW50CmludGNfMSAvLyAwCj4KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMiAvLyAyCi0KZ3R4bnMgU2VuZGVyCnR4biBTZW5kZXIKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgU2VuZGVyCnR4biBTZW5kZXIKPT0KYXNzZXJ0Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCnR4biBHcm91cEluZGV4CmludGNfMiAvLyAyCi0KZ3R4bnMgQXNzZXRBbW91bnQKYnl0ZWNfMCAvLyAiY29sbGF0ZXJhbF9hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKdHhuIFNlbmRlcgpjYWxsc3ViIHNlbmRhc3NldF82CmJ5dGVjXzEgLy8gInllc19zdXBwbHkiCmJ5dGVjXzEgLy8gInllc19zdXBwbHkiCmFwcF9nbG9iYWxfZ2V0CnR4biBHcm91cEluZGV4CmludGNfMiAvLyAyCi0KZ3R4bnMgQXNzZXRBbW91bnQKLQphcHBfZ2xvYmFsX3B1dApieXRlY18yIC8vICJub19zdXBwbHkiCmJ5dGVjXzIgLy8gIm5vX3N1cHBseSIKYXBwX2dsb2JhbF9nZXQKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBBc3NldEFtb3VudAotCmFwcF9nbG9iYWxfcHV0CmludGNfMCAvLyAxCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMAppbnRjXzMgLy8gMjU2CjwKYXNzZXJ0CnJldHN1YgoKLy8gc3BsaXRfc2hhcmVzCnNwbGl0c2hhcmVzXzIzOgpwcm90byAwIDEKaW50Y18xIC8vIDAKYnl0ZWMgOCAvLyAiaXNfcmVzb2x2ZWQiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAwCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIFR5cGVFbnVtCnB1c2hpbnQgNCAvLyBheGZlcgo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBBc3NldFJlY2VpdmVyCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCj09CmFzc2VydApieXRlY18wIC8vICJjb2xsYXRlcmFsX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIFhmZXJBc3NldAo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBBc3NldEFtb3VudAppbnRjXzEgLy8gMAo+CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIFNlbmRlcgp0eG4gU2VuZGVyCj09CmFzc2VydApnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIEFzc2V0QW1vdW50CmJ5dGVjXzMgLy8gInllc19hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKdHhuIFNlbmRlcgpjYWxsc3ViIHNlbmRhc3NldF82Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgQXNzZXRBbW91bnQKYnl0ZWMgNCAvLyAibm9fYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CnR4biBTZW5kZXIKY2FsbHN1YiBzZW5kYXNzZXRfNgpieXRlY18xIC8vICJ5ZXNfc3VwcGx5IgpieXRlY18xIC8vICJ5ZXNfc3VwcGx5IgphcHBfZ2xvYmFsX2dldAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIEFzc2V0QW1vdW50CisKYXBwX2dsb2JhbF9wdXQKYnl0ZWNfMiAvLyAibm9fc3VwcGx5IgpieXRlY18yIC8vICJub19zdXBwbHkiCmFwcF9nbG9iYWxfZ2V0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgQXNzZXRBbW91bnQKKwphcHBfZ2xvYmFsX3B1dAppbnRjXzAgLy8gMQpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKaW50Y18zIC8vIDI1Ngo8CmFzc2VydApyZXRzdWIKCi8vIGNsYWltCmNsYWltXzI0Ogpwcm90byAwIDEKaW50Y18xIC8vIDAKYnl0ZWMgOCAvLyAiaXNfcmVzb2x2ZWQiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAxCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIFR5cGVFbnVtCnB1c2hpbnQgNCAvLyBheGZlcgo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBBc3NldFJlY2VpdmVyCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCj09CmFzc2VydApieXRlY18zIC8vICJ5ZXNfYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgWGZlckFzc2V0Cj09CmJ5dGVjIDQgLy8gIm5vX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIFhmZXJBc3NldAo9PQp8fAphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBTZW5kZXIKdHhuIFNlbmRlcgo9PQphc3NlcnQKYnl0ZWMgMTggLy8gIm91dGNvbWUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAxCj09CmJ5dGVjXzMgLy8gInllc19hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBYZmVyQXNzZXQKPT0KJiYKYm56IGNsYWltXzI0X2wxMgpieXRlYyAxOCAvLyAib3V0Y29tZSIKYXBwX2dsb2JhbF9nZXQKaW50Y18xIC8vIDAKPT0KYnl0ZWMgNCAvLyAibm9fYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgWGZlckFzc2V0Cj09CiYmCmJueiBjbGFpbV8yNF9sMTEKYnl0ZWMgMTggLy8gIm91dGNvbWUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMiAvLyAyCj09CmJ5dGVjIDQgLy8gIm5vX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIFhmZXJBc3NldAo9PQpieXRlY18zIC8vICJ5ZXNfYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgWGZlckFzc2V0Cj09Cnx8CiYmCmJueiBjbGFpbV8yNF9sNwpieXRlY18zIC8vICJ5ZXNfYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgWGZlckFzc2V0Cj09CmJueiBjbGFpbV8yNF9sNgpieXRlYyA0IC8vICJub19hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBYZmVyQXNzZXQKPT0KYnogY2xhaW1fMjRfbDEzCmJ5dGVjXzIgLy8gIm5vX3N1cHBseSIKYnl0ZWNfMiAvLyAibm9fc3VwcGx5IgphcHBfZ2xvYmFsX2dldAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIEFzc2V0QW1vdW50Ci0KYXBwX2dsb2JhbF9wdXQKYiBjbGFpbV8yNF9sMTMKY2xhaW1fMjRfbDY6CmJ5dGVjXzEgLy8gInllc19zdXBwbHkiCmJ5dGVjXzEgLy8gInllc19zdXBwbHkiCmFwcF9nbG9iYWxfZ2V0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgQXNzZXRBbW91bnQKLQphcHBfZ2xvYmFsX3B1dApiIGNsYWltXzI0X2wxMwpjbGFpbV8yNF9sNzoKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBBc3NldEFtb3VudAppbnRjXzIgLy8gMgovCmJ5dGVjXzAgLy8gImNvbGxhdGVyYWxfYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CnR4biBTZW5kZXIKY2FsbHN1YiBzZW5kYXNzZXRfNgpieXRlYyA0IC8vICJub19hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBYZmVyQXNzZXQKPT0KYm56IGNsYWltXzI0X2wxMApieXRlY18zIC8vICJ5ZXNfYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgWGZlckFzc2V0Cj09CmJ6IGNsYWltXzI0X2wxMwpieXRlY18xIC8vICJ5ZXNfc3VwcGx5IgpieXRlY18xIC8vICJ5ZXNfc3VwcGx5IgphcHBfZ2xvYmFsX2dldAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIEFzc2V0QW1vdW50Ci0KYXBwX2dsb2JhbF9wdXQKYiBjbGFpbV8yNF9sMTMKY2xhaW1fMjRfbDEwOgpieXRlY18yIC8vICJub19zdXBwbHkiCmJ5dGVjXzIgLy8gIm5vX3N1cHBseSIKYXBwX2dsb2JhbF9nZXQKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBBc3NldEFtb3VudAotCmFwcF9nbG9iYWxfcHV0CmIgY2xhaW1fMjRfbDEzCmNsYWltXzI0X2wxMToKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBBc3NldEFtb3VudApieXRlY18wIC8vICJjb2xsYXRlcmFsX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldAp0eG4gU2VuZGVyCmNhbGxzdWIgc2VuZGFzc2V0XzYKYnl0ZWNfMiAvLyAibm9fc3VwcGx5IgpieXRlY18yIC8vICJub19zdXBwbHkiCmFwcF9nbG9iYWxfZ2V0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgQXNzZXRBbW91bnQKLQphcHBfZ2xvYmFsX3B1dApiIGNsYWltXzI0X2wxMwpjbGFpbV8yNF9sMTI6Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgQXNzZXRBbW91bnQKYnl0ZWNfMCAvLyAiY29sbGF0ZXJhbF9hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKdHhuIFNlbmRlcgpjYWxsc3ViIHNlbmRhc3NldF82CmJ5dGVjXzEgLy8gInllc19zdXBwbHkiCmJ5dGVjXzEgLy8gInllc19zdXBwbHkiCmFwcF9nbG9iYWxfZ2V0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgQXNzZXRBbW91bnQKLQphcHBfZ2xvYmFsX3B1dApjbGFpbV8yNF9sMTM6CmludGNfMCAvLyAxCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMAppbnRjXzMgLy8gMjU2CjwKYXNzZXJ0CnJldHN1YgoKLy8gZG9uYXRlX2V4Y2Vzc190b19tYXJrZXRfZnJpZW5kCmRvbmF0ZWV4Y2Vzc3RvbWFya2V0ZnJpZW5kXzI1Ogpwcm90byAwIDEKaW50Y18xIC8vIDAKdHhuIFNlbmRlcgpieXRlYyA5IC8vICJtYXJrZXRfZnJpZW5kX2FkZHIiCmFwcF9nbG9iYWxfZ2V0Cj09CmFzc2VydApieXRlY18wIC8vICJjb2xsYXRlcmFsX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldApnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpjYWxsc3ViIHNhZmV3YWxsZXRiYWxhbmNlXzkKYnl0ZWNfMSAvLyAieWVzX3N1cHBseSIKYXBwX2dsb2JhbF9nZXQKYnl0ZWNfMiAvLyAibm9fc3VwcGx5IgphcHBfZ2xvYmFsX2dldAorCj4KYnogZG9uYXRlZXhjZXNzdG9tYXJrZXRmcmllbmRfMjVfbDIKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKYnl0ZWNfMCAvLyAiY29sbGF0ZXJhbF9hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKY2FsbHN1YiBzYWZld2FsbGV0YmFsYW5jZV85CmJ5dGVjXzEgLy8gInllc19zdXBwbHkiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjXzIgLy8gIm5vX3N1cHBseSIKYXBwX2dsb2JhbF9nZXQKKwotCmJ5dGVjXzAgLy8gImNvbGxhdGVyYWxfYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjIDkgLy8gIm1hcmtldF9mcmllbmRfYWRkciIKYXBwX2dsb2JhbF9nZXQKY2FsbHN1YiBzZW5kYXNzZXRfNgpkb25hdGVleGNlc3N0b21hcmtldGZyaWVuZF8yNV9sMjoKaW50Y18wIC8vIDEKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmludGNfMyAvLyAyNTYKPAphc3NlcnQKcmV0c3ViCgovLyBkZWxldGVfZXNjcm93CmRlbGV0ZWVzY3Jvd18yNjoKcHJvdG8gMiAxCmludGNfMSAvLyAwCmZyYW1lX2RpZyAtMgpjYWxsc3ViIGdldGFwcGNyZWF0b3JfNQpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwo9PQphc3NlcnQKdHhuIFNlbmRlcgpmcmFtZV9kaWcgLTIKYnl0ZWMgMTMgLy8gIm93bmVyIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwo9PQp0eG4gU2VuZGVyCmJ5dGVjIDIyIC8vICJlc2Nyb3dfY2FuY2VsX2FkZHJlc3MiCmFwcF9nbG9iYWxfZ2V0Cj09Cnx8CmFzc2VydAppdHhuX2JlZ2luCnB1c2hpbnQgNiAvLyBhcHBsCml0eG5fZmllbGQgVHlwZUVudW0KZnJhbWVfZGlnIC0yCml0eG5fZmllbGQgQXBwbGljYXRpb25JRApieXRlYyAxOSAvLyAiZGVsZXRlKCl1aW50OCIKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCml0eG5fZmllbGQgT25Db21wbGV0aW9uCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25JRAppdHhuX2ZpZWxkIEFwcGxpY2F0aW9ucwpieXRlY18wIC8vICJjb2xsYXRlcmFsX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldAppdHhuX2ZpZWxkIEFzc2V0cwpieXRlY18zIC8vICJ5ZXNfYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0Cml0eG5fZmllbGQgQXNzZXRzCmJ5dGVjIDQgLy8gIm5vX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldAppdHhuX2ZpZWxkIEFzc2V0cwp0eG4gU2VuZGVyCml0eG5fZmllbGQgQWNjb3VudHMKZnJhbWVfZGlnIC0yCmJ5dGVjIDEzIC8vICJvd25lciIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKaXR4bl9maWVsZCBBY2NvdW50cwppdHhuX3N1Ym1pdApnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpwdXNoaW50IDU1NjUwMCAvLyA1NTY1MDAKZnJhbWVfZGlnIC0xCmNhbGxzdWIgc2VuZGFsZ29fNwppbnRjXzAgLy8gMQpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKaW50Y18zIC8vIDI1Ngo8CmFzc2VydApyZXRzdWIKCi8vIGRlbGV0ZQpkZWxldGVfMjc6CnByb3RvIDAgMQppbnRjXzEgLy8gMAp0eG4gU2VuZGVyCmJ5dGVjIDkgLy8gIm1hcmtldF9mcmllbmRfYWRkciIKYXBwX2dsb2JhbF9nZXQKPT0KYXNzZXJ0CmJ5dGVjIDggLy8gImlzX3Jlc29sdmVkIgphcHBfZ2xvYmFsX2dldAppbnRjXzAgLy8gMQo9PQphc3NlcnQKaXR4bl9iZWdpbgpwdXNoaW50IDQgLy8gYXhmZXIKaXR4bl9maWVsZCBUeXBlRW51bQpieXRlY18wIC8vICJjb2xsYXRlcmFsX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldAppdHhuX2ZpZWxkIFhmZXJBc3NldApieXRlYyA5IC8vICJtYXJrZXRfZnJpZW5kX2FkZHIiCmFwcF9nbG9iYWxfZ2V0Cml0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgppbnRjXzEgLy8gMAppdHhuX2ZpZWxkIEZlZQppbnRjXzEgLy8gMAppdHhuX2ZpZWxkIEFzc2V0QW1vdW50CmJ5dGVjIDkgLy8gIm1hcmtldF9mcmllbmRfYWRkciIKYXBwX2dsb2JhbF9nZXQKaXR4bl9maWVsZCBBc3NldENsb3NlVG8KaXR4bl9zdWJtaXQKaXR4bl9iZWdpbgpwdXNoaW50IDMgLy8gYWNmZwppdHhuX2ZpZWxkIFR5cGVFbnVtCmJ5dGVjXzMgLy8gInllc19hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKaXR4bl9maWVsZCBDb25maWdBc3NldAppdHhuX3N1Ym1pdAppdHhuX2JlZ2luCnB1c2hpbnQgMyAvLyBhY2ZnCml0eG5fZmllbGQgVHlwZUVudW0KYnl0ZWMgNCAvLyAibm9fYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0Cml0eG5fZmllbGQgQ29uZmlnQXNzZXQKaXR4bl9zdWJtaXQKaXR4bl9iZWdpbgppbnRjXzAgLy8gcGF5Cml0eG5fZmllbGQgVHlwZUVudW0KaW50Y18xIC8vIDAKaXR4bl9maWVsZCBBbW91bnQKYnl0ZWMgOSAvLyAibWFya2V0X2ZyaWVuZF9hZGRyIgphcHBfZ2xvYmFsX2dldAppdHhuX2ZpZWxkIFJlY2VpdmVyCmludGNfMSAvLyAwCml0eG5fZmllbGQgRmVlCmJ5dGVjIDkgLy8gIm1hcmtldF9mcmllbmRfYWRkciIKYXBwX2dsb2JhbF9nZXQKaXR4bl9maWVsZCBDbG9zZVJlbWFpbmRlclRvCml0eG5fc3VibWl0CmludGNfMCAvLyAxCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMAppbnRjXzMgLy8gMjU2CjwKYXNzZXJ0CnJldHN1YgoKLy8gZG9fbm9vcApkb25vb3BfMjg6CnByb3RvIDEgMQppbnRjXzEgLy8gMApmcmFtZV9kaWcgLTEKZnJhbWVfYnVyeSAwCnJldHN1YgoKLy8gb25fdXBkYXRlCm9udXBkYXRlXzI5Ogpwcm90byAwIDEKaW50Y18xIC8vIDAKdHhuIFNlbmRlcgpieXRlYyA5IC8vICJtYXJrZXRfZnJpZW5kX2FkZHIiCmFwcF9nbG9iYWxfZ2V0Cj09Cmdsb2JhbCBHcm91cFNpemUKaW50Y18wIC8vIDEKPT0KJiYKYXNzZXJ0CmludGNfMCAvLyAxCmZyYW1lX2J1cnkgMApyZXRzdWIKCi8vIG9uX2NyZWF0ZV9jYXN0ZXIKb25jcmVhdGVjYXN0ZXJfMzA6CnByb3RvIDAgMAppbnRjXzEgLy8gMApieXRlYyAxMiAvLyAiIgppbnRjXzEgLy8gMApieXRlYyAxMiAvLyAiIgppbnRjXzEgLy8gMApieXRlYyAxMiAvLyAiIgpkdXBuIDIKaW50Y18xIC8vIDAKZHVwCmJ5dGVjIDEyIC8vICIiCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKZnJhbWVfYnVyeSAxCnR4bmEgQXBwbGljYXRpb25BcmdzIDIKYnRvaQpmcmFtZV9idXJ5IDIKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwpmcmFtZV9idXJ5IDMKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNApidG9pCmZyYW1lX2J1cnkgNAp0eG5hIEFwcGxpY2F0aW9uQXJncyA1CmZyYW1lX2J1cnkgNQp0eG5hIEFwcGxpY2F0aW9uQXJncyA2CmZyYW1lX2J1cnkgNgp0eG5hIEFwcGxpY2F0aW9uQXJncyA3CmZyYW1lX2J1cnkgNwp0eG5hIEFwcGxpY2F0aW9uQXJncyA4CmJ0b2kKZnJhbWVfYnVyeSA4CnR4bmEgQXBwbGljYXRpb25BcmdzIDkKYnRvaQpmcmFtZV9idXJ5IDkKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTAKZnJhbWVfYnVyeSAxMApmcmFtZV9kaWcgMQpmcmFtZV9kaWcgMgpmcmFtZV9kaWcgMwpmcmFtZV9kaWcgNApmcmFtZV9kaWcgNQpmcmFtZV9kaWcgNgpmcmFtZV9kaWcgNwpmcmFtZV9kaWcgOApmcmFtZV9kaWcgOQpmcmFtZV9kaWcgMTAKY2FsbHN1YiBvbmNyZWF0ZV8xMApmcmFtZV9idXJ5IDAKYnl0ZWMgNSAvLyAweDE1MWY3Yzc1CmJ5dGVjIDcgLy8gMHgwMAppbnRjXzEgLy8gMApmcmFtZV9kaWcgMApzZXRieXRlCmNvbmNhdApsb2cKcmV0c3ViCgovLyBjcmVhdGVfZXNjcm93X2Nhc3RlcgpjcmVhdGVlc2Nyb3djYXN0ZXJfMzE6CnByb3RvIDAgMAppbnRjXzEgLy8gMApkdXBuIDQKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQpidG9pCmZyYW1lX2J1cnkgMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAyCmJ0b2kKZnJhbWVfYnVyeSAyCnR4bmEgQXBwbGljYXRpb25BcmdzIDMKYnRvaQpmcmFtZV9idXJ5IDMKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAppbnRjXzEgLy8gMApnZXRieXRlCmZyYW1lX2J1cnkgNApmcmFtZV9kaWcgMQpmcmFtZV9kaWcgMgpmcmFtZV9kaWcgMwpmcmFtZV9kaWcgNApjYWxsc3ViIGNyZWF0ZWVzY3Jvd18xNApmcmFtZV9idXJ5IDAKYnl0ZWMgNSAvLyAweDE1MWY3Yzc1CmZyYW1lX2RpZyAwCml0b2IKY29uY2F0CmxvZwpyZXRzdWIKCi8vIGFjdGl2YXRlX21hcmtldF9jYXN0ZXIKYWN0aXZhdGVtYXJrZXRjYXN0ZXJfMzI6CnByb3RvIDAgMAppbnRjXzEgLy8gMApjYWxsc3ViIGFjdGl2YXRlbWFya2V0XzE1CmZyYW1lX2J1cnkgMApieXRlYyA1IC8vIDB4MTUxZjdjNzUKYnl0ZWMgNyAvLyAweDAwCmludGNfMSAvLyAwCmZyYW1lX2RpZyAwCnNldGJ5dGUKY29uY2F0CmxvZwpyZXRzdWIKCi8vIHByb2Nlc3NfcG90ZW50aWFsX21hdGNoX2Nhc3Rlcgpwcm9jZXNzcG90ZW50aWFsbWF0Y2hjYXN0ZXJfMzM6CnByb3RvIDAgMAppbnRjXzEgLy8gMApkdXBuIDIKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQppbnRjXzEgLy8gMApnZXRieXRlCmZyYW1lX2J1cnkgMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAyCmludGNfMSAvLyAwCmdldGJ5dGUKZnJhbWVfYnVyeSAyCmZyYW1lX2RpZyAxCmZyYW1lX2RpZyAyCmNhbGxzdWIgcHJvY2Vzc3BvdGVudGlhbG1hdGNoXzIwCmZyYW1lX2J1cnkgMApieXRlYyA1IC8vIDB4MTUxZjdjNzUKYnl0ZWMgNyAvLyAweDAwCmludGNfMSAvLyAwCmZyYW1lX2RpZyAwCnNldGJ5dGUKY29uY2F0CmxvZwpyZXRzdWIKCi8vIHJlc29sdmVfbWFya2V0X2Nhc3RlcgpyZXNvbHZlbWFya2V0Y2FzdGVyXzM0Ogpwcm90byAwIDAKaW50Y18xIC8vIDAKZHVwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKaW50Y18xIC8vIDAKZ2V0Ynl0ZQpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDEKY2FsbHN1YiByZXNvbHZlbWFya2V0XzIxCmZyYW1lX2J1cnkgMApieXRlYyA1IC8vIDB4MTUxZjdjNzUKYnl0ZWMgNyAvLyAweDAwCmludGNfMSAvLyAwCmZyYW1lX2RpZyAwCnNldGJ5dGUKY29uY2F0CmxvZwpyZXRzdWIKCi8vIG1lcmdlX3NoYXJlc19jYXN0ZXIKbWVyZ2VzaGFyZXNjYXN0ZXJfMzU6CnByb3RvIDAgMAppbnRjXzEgLy8gMApjYWxsc3ViIG1lcmdlc2hhcmVzXzIyCmZyYW1lX2J1cnkgMApieXRlYyA1IC8vIDB4MTUxZjdjNzUKYnl0ZWMgNyAvLyAweDAwCmludGNfMSAvLyAwCmZyYW1lX2RpZyAwCnNldGJ5dGUKY29uY2F0CmxvZwpyZXRzdWIKCi8vIHNwbGl0X3NoYXJlc19jYXN0ZXIKc3BsaXRzaGFyZXNjYXN0ZXJfMzY6CnByb3RvIDAgMAppbnRjXzEgLy8gMApjYWxsc3ViIHNwbGl0c2hhcmVzXzIzCmZyYW1lX2J1cnkgMApieXRlYyA1IC8vIDB4MTUxZjdjNzUKYnl0ZWMgNyAvLyAweDAwCmludGNfMSAvLyAwCmZyYW1lX2RpZyAwCnNldGJ5dGUKY29uY2F0CmxvZwpyZXRzdWIKCi8vIGNsYWltX2Nhc3RlcgpjbGFpbWNhc3Rlcl8zNzoKcHJvdG8gMCAwCmludGNfMSAvLyAwCmNhbGxzdWIgY2xhaW1fMjQKZnJhbWVfYnVyeSAwCmJ5dGVjIDUgLy8gMHgxNTFmN2M3NQpieXRlYyA3IC8vIDB4MDAKaW50Y18xIC8vIDAKZnJhbWVfZGlnIDAKc2V0Ynl0ZQpjb25jYXQKbG9nCnJldHN1YgoKLy8gZG9uYXRlX2V4Y2Vzc190b19tYXJrZXRfZnJpZW5kX2Nhc3Rlcgpkb25hdGVleGNlc3N0b21hcmtldGZyaWVuZGNhc3Rlcl8zODoKcHJvdG8gMCAwCmludGNfMSAvLyAwCmNhbGxzdWIgZG9uYXRlZXhjZXNzdG9tYXJrZXRmcmllbmRfMjUKZnJhbWVfYnVyeSAwCmJ5dGVjIDUgLy8gMHgxNTFmN2M3NQpieXRlYyA3IC8vIDB4MDAKaW50Y18xIC8vIDAKZnJhbWVfZGlnIDAKc2V0Ynl0ZQpjb25jYXQKbG9nCnJldHN1YgoKLy8gZGVsZXRlX2VzY3Jvd19jYXN0ZXIKZGVsZXRlZXNjcm93Y2FzdGVyXzM5Ogpwcm90byAwIDAKaW50Y18xIC8vIDAKZHVwCmJ5dGVjIDEyIC8vICIiCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKYnRvaQpmcmFtZV9idXJ5IDEKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgpmcmFtZV9idXJ5IDIKZnJhbWVfZGlnIDEKZnJhbWVfZGlnIDIKY2FsbHN1YiBkZWxldGVlc2Nyb3dfMjYKZnJhbWVfYnVyeSAwCmJ5dGVjIDUgLy8gMHgxNTFmN2M3NQpieXRlYyA3IC8vIDB4MDAKaW50Y18xIC8vIDAKZnJhbWVfZGlnIDAKc2V0Ynl0ZQpjb25jYXQKbG9nCnJldHN1YgoKLy8gZGVsZXRlX2Nhc3RlcgpkZWxldGVjYXN0ZXJfNDA6CnByb3RvIDAgMAppbnRjXzEgLy8gMApjYWxsc3ViIGRlbGV0ZV8yNwpmcmFtZV9idXJ5IDAKYnl0ZWMgNSAvLyAweDE1MWY3Yzc1CmJ5dGVjIDcgLy8gMHgwMAppbnRjXzEgLy8gMApmcmFtZV9kaWcgMApzZXRieXRlCmNvbmNhdApsb2cKcmV0c3ViCgovLyBkb19ub29wX2Nhc3Rlcgpkb25vb3BjYXN0ZXJfNDE6CnByb3RvIDAgMAppbnRjXzEgLy8gMApkdXAKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQpidG9pCmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMQpjYWxsc3ViIGRvbm9vcF8yOApmcmFtZV9idXJ5IDAKYnl0ZWMgNSAvLyAweDE1MWY3Yzc1CmZyYW1lX2RpZyAwCml0b2IKY29uY2F0CmxvZwpyZXRzdWIKCi8vIG9uX3VwZGF0ZV9jYXN0ZXIKb251cGRhdGVjYXN0ZXJfNDI6CnByb3RvIDAgMAppbnRjXzEgLy8gMApjYWxsc3ViIG9udXBkYXRlXzI5CmZyYW1lX2J1cnkgMApieXRlYyA1IC8vIDB4MTUxZjdjNzUKZnJhbWVfZGlnIDAKaXRvYgpjb25jYXQKbG9nCnJldHN1Yg==",
101
+ "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKcHVzaGludCAwIC8vIDAKcmV0dXJu"
102
+ },
103
+ "state": {
104
+ "global": {
105
+ "num_byte_slices": 6,
106
+ "num_uints": 11
107
+ },
108
+ "local": {
109
+ "num_byte_slices": 0,
110
+ "num_uints": 0
111
+ }
112
+ },
113
+ "schema": {
114
+ "global": {
115
+ "declared": {
116
+ "collateral_asset_id": {
117
+ "type": "uint64",
118
+ "key": "collateral_asset_id",
119
+ "descr": "The asset id of the collatteral"
120
+ },
121
+ "escrow_cancel_address": {
122
+ "type": "bytes",
123
+ "key": "escrow_cancel_address",
124
+ "descr": "The address that can cancel escrows"
125
+ },
126
+ "fee_address": {
127
+ "type": "bytes",
128
+ "key": "fee_address",
129
+ "descr": "The address the fees go to"
130
+ },
131
+ "fee_base_percent": {
132
+ "type": "uint64",
133
+ "key": "fee_base_percent",
134
+ "descr": "The base fee percent of the market"
135
+ },
136
+ "fee_timer_threshold": {
137
+ "type": "uint64",
138
+ "key": "fee_timer_threshold",
139
+ "descr": "The number of seconds since fee_timer_start an order can match within to not pay fee"
140
+ },
141
+ "is_activated": {
142
+ "type": "uint64",
143
+ "key": "is_activated",
144
+ "descr": "The status of the market"
145
+ },
146
+ "is_resolved": {
147
+ "type": "uint64",
148
+ "key": "is_resolved",
149
+ "descr": "The status of the market"
150
+ },
151
+ "market_friend_addr": {
152
+ "type": "bytes",
153
+ "key": "market_friend_addr",
154
+ "descr": "The address of the market friend"
155
+ },
156
+ "no_asset_id": {
157
+ "type": "uint64",
158
+ "key": "no_asset_id",
159
+ "descr": "The asset id of the no outcome"
160
+ },
161
+ "no_supply": {
162
+ "type": "uint64",
163
+ "key": "no_supply",
164
+ "descr": "The supply of the no asset"
165
+ },
166
+ "oracle_address": {
167
+ "type": "bytes",
168
+ "key": "oracle_address",
169
+ "descr": "The address of the oracle"
170
+ },
171
+ "outcome": {
172
+ "type": "uint64",
173
+ "key": "outcome",
174
+ "descr": "The outcome of the market"
175
+ },
176
+ "resolution_time": {
177
+ "type": "uint64",
178
+ "key": "resolution_time",
179
+ "descr": "The timestamp the market should be resolved by (unix seconds)"
180
+ },
181
+ "rules": {
182
+ "type": "bytes",
183
+ "key": "rules",
184
+ "descr": "The rules of the market"
185
+ },
186
+ "title": {
187
+ "type": "bytes",
188
+ "key": "title",
189
+ "descr": "The name of the market"
190
+ },
191
+ "yes_asset_id": {
192
+ "type": "uint64",
193
+ "key": "yes_asset_id",
194
+ "descr": "The asset id of the yes outcome"
195
+ },
196
+ "yes_supply": {
197
+ "type": "uint64",
198
+ "key": "yes_supply",
199
+ "descr": "The supply of the yes asset"
200
+ }
201
+ },
202
+ "reserved": {}
203
+ },
204
+ "local": {
205
+ "declared": {},
206
+ "reserved": {}
207
+ }
208
+ },
209
+ "contract": {
210
+ "name": "market_app",
211
+ "methods": [
212
+ {
213
+ "name": "on_create",
214
+ "args": [
215
+ {
216
+ "type": "string",
217
+ "name": "title"
218
+ },
219
+ {
220
+ "type": "uint64",
221
+ "name": "collateral_asset_id"
222
+ },
223
+ {
224
+ "type": "address",
225
+ "name": "oracle_address"
226
+ },
227
+ {
228
+ "type": "uint64",
229
+ "name": "resolution_time"
230
+ },
231
+ {
232
+ "type": "address",
233
+ "name": "market_friend"
234
+ },
235
+ {
236
+ "type": "string",
237
+ "name": "rules"
238
+ },
239
+ {
240
+ "type": "address",
241
+ "name": "fee_address"
242
+ },
243
+ {
244
+ "type": "uint64",
245
+ "name": "fee_base_percent"
246
+ },
247
+ {
248
+ "type": "uint64",
249
+ "name": "fee_timer_threshhold"
250
+ },
251
+ {
252
+ "type": "address",
253
+ "name": "escrow_cancel_address"
254
+ }
255
+ ],
256
+ "returns": {
257
+ "type": "uint8"
258
+ }
259
+ },
260
+ {
261
+ "name": "create_escrow",
262
+ "args": [
263
+ {
264
+ "type": "uint64",
265
+ "name": "price"
266
+ },
267
+ {
268
+ "type": "uint64",
269
+ "name": "quantity"
270
+ },
271
+ {
272
+ "type": "uint64",
273
+ "name": "slippage"
274
+ },
275
+ {
276
+ "type": "uint8",
277
+ "name": "position"
278
+ }
279
+ ],
280
+ "returns": {
281
+ "type": "uint64"
282
+ }
283
+ },
284
+ {
285
+ "name": "activate_market",
286
+ "args": [],
287
+ "returns": {
288
+ "type": "uint8"
289
+ }
290
+ },
291
+ {
292
+ "name": "process_potential_match",
293
+ "args": [
294
+ {
295
+ "type": "application",
296
+ "name": "maker"
297
+ },
298
+ {
299
+ "type": "application",
300
+ "name": "taker"
301
+ }
302
+ ],
303
+ "returns": {
304
+ "type": "uint8"
305
+ }
306
+ },
307
+ {
308
+ "name": "resolve_market",
309
+ "args": [
310
+ {
311
+ "type": "uint8",
312
+ "name": "resolution"
313
+ }
314
+ ],
315
+ "returns": {
316
+ "type": "uint8"
317
+ }
318
+ },
319
+ {
320
+ "name": "merge_shares",
321
+ "args": [],
322
+ "returns": {
323
+ "type": "uint8"
324
+ }
325
+ },
326
+ {
327
+ "name": "split_shares",
328
+ "args": [],
329
+ "returns": {
330
+ "type": "uint8"
331
+ }
332
+ },
333
+ {
334
+ "name": "claim",
335
+ "args": [],
336
+ "returns": {
337
+ "type": "uint8"
338
+ }
339
+ },
340
+ {
341
+ "name": "donate_excess_to_market_friend",
342
+ "args": [],
343
+ "returns": {
344
+ "type": "uint8"
345
+ }
346
+ },
347
+ {
348
+ "name": "delete_escrow",
349
+ "args": [
350
+ {
351
+ "type": "uint64",
352
+ "name": "escrow_app_id"
353
+ },
354
+ {
355
+ "type": "address",
356
+ "name": "algo_receiver"
357
+ }
358
+ ],
359
+ "returns": {
360
+ "type": "uint8"
361
+ }
362
+ },
363
+ {
364
+ "name": "delete",
365
+ "args": [],
366
+ "returns": {
367
+ "type": "uint8"
368
+ }
369
+ },
370
+ {
371
+ "name": "do_noop",
372
+ "args": [
373
+ {
374
+ "type": "uint64",
375
+ "name": "call_number"
376
+ }
377
+ ],
378
+ "returns": {
379
+ "type": "uint64"
380
+ }
381
+ },
382
+ {
383
+ "name": "on_update",
384
+ "args": [],
385
+ "returns": {
386
+ "type": "uint64"
387
+ }
388
+ }
389
+ ],
390
+ "networks": {}
391
+ },
392
+ "bare_call_config": {}
393
+ };
394
+ var MarketAppCallFactory = class {
395
+ /**
396
+ * Gets available create call factories
397
+ */
398
+ static get create() {
399
+ return {
400
+ /**
401
+ * Constructs a create call for the market_app smart contract using the on_create(string,uint64,address,uint64,address,string,address,uint64,uint64,address)uint8 ABI method
402
+ *
403
+ * @param args Any args for the contract call
404
+ * @param params Any additional parameters for the call
405
+ * @returns A TypedCallParams object for the call
406
+ */
407
+ onCreate(args, params = {}) {
408
+ return {
409
+ method: "on_create(string,uint64,address,uint64,address,string,address,uint64,uint64,address)uint8",
410
+ methodArgs: Array.isArray(args) ? args : [args.title, args.collateralAssetId, args.oracleAddress, args.resolutionTime, args.marketFriend, args.rules, args.feeAddress, args.feeBasePercent, args.feeTimerThreshhold, args.escrowCancelAddress],
411
+ ...params
412
+ };
413
+ }
414
+ };
415
+ }
416
+ /**
417
+ * Gets available update call factories
418
+ */
419
+ static get update() {
420
+ return {
421
+ /**
422
+ * Constructs an update call for the market_app smart contract using the on_update()uint64 ABI method
423
+ *
424
+ * @param args Any args for the contract call
425
+ * @param params Any additional parameters for the call
426
+ * @returns A TypedCallParams object for the call
427
+ */
428
+ onUpdate(args, params = {}) {
429
+ return {
430
+ method: "on_update()uint64",
431
+ methodArgs: Array.isArray(args) ? args : [],
432
+ ...params
433
+ };
434
+ }
435
+ };
436
+ }
437
+ /**
438
+ * Gets available delete call factories
439
+ */
440
+ static get delete() {
441
+ return {
442
+ /**
443
+ * Constructs a delete call for the market_app smart contract using the delete()uint8 ABI method
444
+ *
445
+ * @param args Any args for the contract call
446
+ * @param params Any additional parameters for the call
447
+ * @returns A TypedCallParams object for the call
448
+ */
449
+ delete(args, params = {}) {
450
+ return {
451
+ method: "delete()uint8",
452
+ methodArgs: Array.isArray(args) ? args : [],
453
+ ...params
454
+ };
455
+ }
456
+ };
457
+ }
458
+ /**
459
+ * Constructs a no op call for the create_escrow(uint64,uint64,uint64,uint8)uint64 ABI method
460
+ *
461
+ * @param args Any args for the contract call
462
+ * @param params Any additional parameters for the call
463
+ * @returns A TypedCallParams object for the call
464
+ */
465
+ static createEscrow(args, params) {
466
+ return {
467
+ method: "create_escrow(uint64,uint64,uint64,uint8)uint64",
468
+ methodArgs: Array.isArray(args) ? args : [args.price, args.quantity, args.slippage, args.position],
469
+ ...params
470
+ };
471
+ }
472
+ /**
473
+ * Constructs a no op call for the activate_market()uint8 ABI method
474
+ *
475
+ * @param args Any args for the contract call
476
+ * @param params Any additional parameters for the call
477
+ * @returns A TypedCallParams object for the call
478
+ */
479
+ static activateMarket(args, params) {
480
+ return {
481
+ method: "activate_market()uint8",
482
+ methodArgs: Array.isArray(args) ? args : [],
483
+ ...params
484
+ };
485
+ }
486
+ /**
487
+ * Constructs a no op call for the process_potential_match(application,application)uint8 ABI method
488
+ *
489
+ * @param args Any args for the contract call
490
+ * @param params Any additional parameters for the call
491
+ * @returns A TypedCallParams object for the call
492
+ */
493
+ static processPotentialMatch(args, params) {
494
+ return {
495
+ method: "process_potential_match(application,application)uint8",
496
+ methodArgs: Array.isArray(args) ? args : [args.maker, args.taker],
497
+ ...params
498
+ };
499
+ }
500
+ /**
501
+ * Constructs a no op call for the resolve_market(uint8)uint8 ABI method
502
+ *
503
+ * @param args Any args for the contract call
504
+ * @param params Any additional parameters for the call
505
+ * @returns A TypedCallParams object for the call
506
+ */
507
+ static resolveMarket(args, params) {
508
+ return {
509
+ method: "resolve_market(uint8)uint8",
510
+ methodArgs: Array.isArray(args) ? args : [args.resolution],
511
+ ...params
512
+ };
513
+ }
514
+ /**
515
+ * Constructs a no op call for the merge_shares()uint8 ABI method
516
+ *
517
+ * @param args Any args for the contract call
518
+ * @param params Any additional parameters for the call
519
+ * @returns A TypedCallParams object for the call
520
+ */
521
+ static mergeShares(args, params) {
522
+ return {
523
+ method: "merge_shares()uint8",
524
+ methodArgs: Array.isArray(args) ? args : [],
525
+ ...params
526
+ };
527
+ }
528
+ /**
529
+ * Constructs a no op call for the split_shares()uint8 ABI method
530
+ *
531
+ * @param args Any args for the contract call
532
+ * @param params Any additional parameters for the call
533
+ * @returns A TypedCallParams object for the call
534
+ */
535
+ static splitShares(args, params) {
536
+ return {
537
+ method: "split_shares()uint8",
538
+ methodArgs: Array.isArray(args) ? args : [],
539
+ ...params
540
+ };
541
+ }
542
+ /**
543
+ * Constructs a no op call for the claim()uint8 ABI method
544
+ *
545
+ * @param args Any args for the contract call
546
+ * @param params Any additional parameters for the call
547
+ * @returns A TypedCallParams object for the call
548
+ */
549
+ static claim(args, params) {
550
+ return {
551
+ method: "claim()uint8",
552
+ methodArgs: Array.isArray(args) ? args : [],
553
+ ...params
554
+ };
555
+ }
556
+ /**
557
+ * Constructs a no op call for the donate_excess_to_market_friend()uint8 ABI method
558
+ *
559
+ * @param args Any args for the contract call
560
+ * @param params Any additional parameters for the call
561
+ * @returns A TypedCallParams object for the call
562
+ */
563
+ static donateExcessToMarketFriend(args, params) {
564
+ return {
565
+ method: "donate_excess_to_market_friend()uint8",
566
+ methodArgs: Array.isArray(args) ? args : [],
567
+ ...params
568
+ };
569
+ }
570
+ /**
571
+ * Constructs a no op call for the delete_escrow(uint64,address)uint8 ABI method
572
+ *
573
+ * @param args Any args for the contract call
574
+ * @param params Any additional parameters for the call
575
+ * @returns A TypedCallParams object for the call
576
+ */
577
+ static deleteEscrow(args, params) {
578
+ return {
579
+ method: "delete_escrow(uint64,address)uint8",
580
+ methodArgs: Array.isArray(args) ? args : [args.escrowAppId, args.algoReceiver],
581
+ ...params
582
+ };
583
+ }
584
+ /**
585
+ * Constructs a no op call for the do_noop(uint64)uint64 ABI method
586
+ *
587
+ * @param args Any args for the contract call
588
+ * @param params Any additional parameters for the call
589
+ * @returns A TypedCallParams object for the call
590
+ */
591
+ static doNoop(args, params) {
592
+ return {
593
+ method: "do_noop(uint64)uint64",
594
+ methodArgs: Array.isArray(args) ? args : [args.callNumber],
595
+ ...params
596
+ };
597
+ }
598
+ };
599
+ var MarketAppClient = class _MarketAppClient {
600
+ /**
601
+ * Creates a new instance of `MarketAppClient`
602
+ *
603
+ * @param appDetails appDetails The details to identify the app to deploy
604
+ * @param algod An algod client instance
605
+ */
606
+ constructor(appDetails, algod) {
607
+ this.algod = algod;
608
+ this.sender = appDetails.sender;
609
+ this.appClient = algokit3__namespace.getAppClient({
610
+ ...appDetails,
611
+ app: APP_SPEC
612
+ }, algod);
613
+ }
614
+ /**
615
+ * The underlying `ApplicationClient` for when you want to have more flexibility
616
+ */
617
+ appClient;
618
+ sender;
619
+ /**
620
+ * Checks for decode errors on the AppCallTransactionResult and maps the return value to the specified generic type
621
+ *
622
+ * @param result The AppCallTransactionResult to be mapped
623
+ * @param returnValueFormatter An optional delegate to format the return value if required
624
+ * @returns The smart contract response with an updated return value
625
+ */
626
+ mapReturnValue(result, returnValueFormatter) {
627
+ if (result.return?.decodeError) {
628
+ throw result.return.decodeError;
629
+ }
630
+ const returnValue = result.return?.returnValue !== void 0 && returnValueFormatter !== void 0 ? returnValueFormatter(result.return.returnValue) : result.return?.returnValue;
631
+ return { ...result, return: returnValue };
632
+ }
633
+ /**
634
+ * Calls the ABI method with the matching signature using an onCompletion code of NO_OP
635
+ *
636
+ * @param typedCallParams An object containing the method signature, args, and any other relevant parameters
637
+ * @param returnValueFormatter An optional delegate which when provided will be used to map non-undefined return values to the target type
638
+ * @returns The result of the smart contract call
639
+ */
640
+ async call(typedCallParams, returnValueFormatter) {
641
+ return this.mapReturnValue(await this.appClient.call(typedCallParams), returnValueFormatter);
642
+ }
643
+ /**
644
+ * Idempotently deploys the market_app smart contract.
645
+ *
646
+ * @param params The arguments for the contract calls and any additional parameters for the call
647
+ * @returns The deployment result
648
+ */
649
+ deploy(params = {}) {
650
+ const createArgs = params.createCall?.(MarketAppCallFactory.create);
651
+ const updateArgs = params.updateCall?.(MarketAppCallFactory.update);
652
+ const deleteArgs = params.deleteCall?.(MarketAppCallFactory.delete);
653
+ return this.appClient.deploy({
654
+ ...params,
655
+ updateArgs,
656
+ deleteArgs,
657
+ createArgs,
658
+ createOnCompleteAction: createArgs?.onCompleteAction
659
+ });
660
+ }
661
+ /**
662
+ * Gets available create methods
663
+ */
664
+ get create() {
665
+ const $this = this;
666
+ return {
667
+ /**
668
+ * Creates a new instance of the market_app smart contract using the on_create(string,uint64,address,uint64,address,string,address,uint64,uint64,address)uint8 ABI method.
669
+ *
670
+ * @param args The arguments for the smart contract call
671
+ * @param params Any additional parameters for the call
672
+ * @returns The create result
673
+ */
674
+ async onCreate(args, params = {}) {
675
+ return $this.mapReturnValue(await $this.appClient.create(MarketAppCallFactory.create.onCreate(args, params)));
676
+ }
677
+ };
678
+ }
679
+ /**
680
+ * Gets available update methods
681
+ */
682
+ get update() {
683
+ const $this = this;
684
+ return {
685
+ /**
686
+ * Updates an existing instance of the market_app smart contract using the on_update()uint64 ABI method.
687
+ *
688
+ * @param args The arguments for the smart contract call
689
+ * @param params Any additional parameters for the call
690
+ * @returns The update result
691
+ */
692
+ async onUpdate(args, params = {}) {
693
+ return $this.mapReturnValue(await $this.appClient.update(MarketAppCallFactory.update.onUpdate(args, params)));
694
+ }
695
+ };
696
+ }
697
+ /**
698
+ * Gets available delete methods
699
+ */
700
+ get delete() {
701
+ const $this = this;
702
+ return {
703
+ /**
704
+ * Deletes an existing instance of the market_app smart contract using the delete()uint8 ABI method.
705
+ *
706
+ * @param args The arguments for the smart contract call
707
+ * @param params Any additional parameters for the call
708
+ * @returns The delete result
709
+ */
710
+ async delete(args, params = {}) {
711
+ return $this.mapReturnValue(await $this.appClient.delete(MarketAppCallFactory.delete.delete(args, params)));
712
+ }
713
+ };
714
+ }
715
+ /**
716
+ * Makes a clear_state call to an existing instance of the market_app smart contract.
717
+ *
718
+ * @param args The arguments for the bare call
719
+ * @returns The clear_state result
720
+ */
721
+ clearState(args = {}) {
722
+ return this.appClient.clearState(args);
723
+ }
724
+ /**
725
+ * Calls the create_escrow(uint64,uint64,uint64,uint8)uint64 ABI method.
726
+ *
727
+ * @param args The arguments for the contract call
728
+ * @param params Any additional parameters for the call
729
+ * @returns The result of the call
730
+ */
731
+ createEscrow(args, params = {}) {
732
+ return this.call(MarketAppCallFactory.createEscrow(args, params));
733
+ }
734
+ /**
735
+ * Calls the activate_market()uint8 ABI method.
736
+ *
737
+ * @param args The arguments for the contract call
738
+ * @param params Any additional parameters for the call
739
+ * @returns The result of the call
740
+ */
741
+ activateMarket(args, params = {}) {
742
+ return this.call(MarketAppCallFactory.activateMarket(args, params));
743
+ }
744
+ /**
745
+ * Calls the process_potential_match(application,application)uint8 ABI method.
746
+ *
747
+ * @param args The arguments for the contract call
748
+ * @param params Any additional parameters for the call
749
+ * @returns The result of the call
750
+ */
751
+ processPotentialMatch(args, params = {}) {
752
+ return this.call(MarketAppCallFactory.processPotentialMatch(args, params));
753
+ }
754
+ /**
755
+ * Calls the resolve_market(uint8)uint8 ABI method.
756
+ *
757
+ * @param args The arguments for the contract call
758
+ * @param params Any additional parameters for the call
759
+ * @returns The result of the call
760
+ */
761
+ resolveMarket(args, params = {}) {
762
+ return this.call(MarketAppCallFactory.resolveMarket(args, params));
763
+ }
764
+ /**
765
+ * Calls the merge_shares()uint8 ABI method.
766
+ *
767
+ * @param args The arguments for the contract call
768
+ * @param params Any additional parameters for the call
769
+ * @returns The result of the call
770
+ */
771
+ mergeShares(args, params = {}) {
772
+ return this.call(MarketAppCallFactory.mergeShares(args, params));
773
+ }
774
+ /**
775
+ * Calls the split_shares()uint8 ABI method.
776
+ *
777
+ * @param args The arguments for the contract call
778
+ * @param params Any additional parameters for the call
779
+ * @returns The result of the call
780
+ */
781
+ splitShares(args, params = {}) {
782
+ return this.call(MarketAppCallFactory.splitShares(args, params));
783
+ }
784
+ /**
785
+ * Calls the claim()uint8 ABI method.
786
+ *
787
+ * @param args The arguments for the contract call
788
+ * @param params Any additional parameters for the call
789
+ * @returns The result of the call
790
+ */
791
+ claim(args, params = {}) {
792
+ return this.call(MarketAppCallFactory.claim(args, params));
793
+ }
794
+ /**
795
+ * Calls the donate_excess_to_market_friend()uint8 ABI method.
796
+ *
797
+ * @param args The arguments for the contract call
798
+ * @param params Any additional parameters for the call
799
+ * @returns The result of the call
800
+ */
801
+ donateExcessToMarketFriend(args, params = {}) {
802
+ return this.call(MarketAppCallFactory.donateExcessToMarketFriend(args, params));
803
+ }
804
+ /**
805
+ * Calls the delete_escrow(uint64,address)uint8 ABI method.
806
+ *
807
+ * @param args The arguments for the contract call
808
+ * @param params Any additional parameters for the call
809
+ * @returns The result of the call
810
+ */
811
+ deleteEscrow(args, params = {}) {
812
+ return this.call(MarketAppCallFactory.deleteEscrow(args, params));
813
+ }
814
+ /**
815
+ * Calls the do_noop(uint64)uint64 ABI method.
816
+ *
817
+ * @param args The arguments for the contract call
818
+ * @param params Any additional parameters for the call
819
+ * @returns The result of the call
820
+ */
821
+ doNoop(args, params = {}) {
822
+ return this.call(MarketAppCallFactory.doNoop(args, params));
823
+ }
824
+ /**
825
+ * Extracts a binary state value out of an AppState dictionary
826
+ *
827
+ * @param state The state dictionary containing the state value
828
+ * @param key The key of the state value
829
+ * @returns A BinaryState instance containing the state value, or undefined if the key was not found
830
+ */
831
+ static getBinaryState(state, key) {
832
+ const value = state[key];
833
+ if (!value) return void 0;
834
+ if (!("valueRaw" in value))
835
+ throw new Error(`Failed to parse state value for ${key}; received an int when expected a byte array`);
836
+ return {
837
+ asString() {
838
+ return value.value;
839
+ },
840
+ asByteArray() {
841
+ return value.valueRaw;
842
+ }
843
+ };
844
+ }
845
+ /**
846
+ * Extracts a integer state value out of an AppState dictionary
847
+ *
848
+ * @param state The state dictionary containing the state value
849
+ * @param key The key of the state value
850
+ * @returns An IntegerState instance containing the state value, or undefined if the key was not found
851
+ */
852
+ static getIntegerState(state, key) {
853
+ const value = state[key];
854
+ if (!value) return void 0;
855
+ if ("valueRaw" in value)
856
+ throw new Error(`Failed to parse state value for ${key}; received a byte array when expected a number`);
857
+ return {
858
+ asBigInt() {
859
+ return typeof value.value === "bigint" ? value.value : BigInt(value.value);
860
+ },
861
+ asNumber() {
862
+ return typeof value.value === "bigint" ? Number(value.value) : value.value;
863
+ }
864
+ };
865
+ }
866
+ /**
867
+ * Returns the smart contract's global state wrapped in a strongly typed accessor with options to format the stored value
868
+ */
869
+ async getGlobalState() {
870
+ const state = await this.appClient.getGlobalState();
871
+ return {
872
+ get collateralAssetId() {
873
+ return _MarketAppClient.getIntegerState(state, "collateral_asset_id");
874
+ },
875
+ get escrowCancelAddress() {
876
+ return _MarketAppClient.getBinaryState(state, "escrow_cancel_address");
877
+ },
878
+ get feeAddress() {
879
+ return _MarketAppClient.getBinaryState(state, "fee_address");
880
+ },
881
+ get feeBasePercent() {
882
+ return _MarketAppClient.getIntegerState(state, "fee_base_percent");
883
+ },
884
+ get feeTimerThreshold() {
885
+ return _MarketAppClient.getIntegerState(state, "fee_timer_threshold");
886
+ },
887
+ get isActivated() {
888
+ return _MarketAppClient.getIntegerState(state, "is_activated");
889
+ },
890
+ get isResolved() {
891
+ return _MarketAppClient.getIntegerState(state, "is_resolved");
892
+ },
893
+ get marketFriendAddr() {
894
+ return _MarketAppClient.getBinaryState(state, "market_friend_addr");
895
+ },
896
+ get noAssetId() {
897
+ return _MarketAppClient.getIntegerState(state, "no_asset_id");
898
+ },
899
+ get noSupply() {
900
+ return _MarketAppClient.getIntegerState(state, "no_supply");
901
+ },
902
+ get oracleAddress() {
903
+ return _MarketAppClient.getBinaryState(state, "oracle_address");
904
+ },
905
+ get outcome() {
906
+ return _MarketAppClient.getIntegerState(state, "outcome");
907
+ },
908
+ get resolutionTime() {
909
+ return _MarketAppClient.getIntegerState(state, "resolution_time");
910
+ },
911
+ get rules() {
912
+ return _MarketAppClient.getBinaryState(state, "rules");
913
+ },
914
+ get title() {
915
+ return _MarketAppClient.getBinaryState(state, "title");
916
+ },
917
+ get yesAssetId() {
918
+ return _MarketAppClient.getIntegerState(state, "yes_asset_id");
919
+ },
920
+ get yesSupply() {
921
+ return _MarketAppClient.getIntegerState(state, "yes_supply");
922
+ }
923
+ };
924
+ }
925
+ compose() {
926
+ const client = this;
927
+ const atc = new algosdk2.AtomicTransactionComposer();
928
+ let promiseChain = Promise.resolve();
929
+ const resultMappers = [];
930
+ return {
931
+ createEscrow(args, params) {
932
+ promiseChain = promiseChain.then(() => client.createEscrow(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
933
+ resultMappers.push(void 0);
934
+ return this;
935
+ },
936
+ activateMarket(args, params) {
937
+ promiseChain = promiseChain.then(() => client.activateMarket(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
938
+ resultMappers.push(void 0);
939
+ return this;
940
+ },
941
+ processPotentialMatch(args, params) {
942
+ promiseChain = promiseChain.then(() => client.processPotentialMatch(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
943
+ resultMappers.push(void 0);
944
+ return this;
945
+ },
946
+ resolveMarket(args, params) {
947
+ promiseChain = promiseChain.then(() => client.resolveMarket(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
948
+ resultMappers.push(void 0);
949
+ return this;
950
+ },
951
+ mergeShares(args, params) {
952
+ promiseChain = promiseChain.then(() => client.mergeShares(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
953
+ resultMappers.push(void 0);
954
+ return this;
955
+ },
956
+ splitShares(args, params) {
957
+ promiseChain = promiseChain.then(() => client.splitShares(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
958
+ resultMappers.push(void 0);
959
+ return this;
960
+ },
961
+ claim(args, params) {
962
+ promiseChain = promiseChain.then(() => client.claim(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
963
+ resultMappers.push(void 0);
964
+ return this;
965
+ },
966
+ donateExcessToMarketFriend(args, params) {
967
+ promiseChain = promiseChain.then(() => client.donateExcessToMarketFriend(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
968
+ resultMappers.push(void 0);
969
+ return this;
970
+ },
971
+ deleteEscrow(args, params) {
972
+ promiseChain = promiseChain.then(() => client.deleteEscrow(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
973
+ resultMappers.push(void 0);
974
+ return this;
975
+ },
976
+ doNoop(args, params) {
977
+ promiseChain = promiseChain.then(() => client.doNoop(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
978
+ resultMappers.push(void 0);
979
+ return this;
980
+ },
981
+ get update() {
982
+ const $this = this;
983
+ return {
984
+ onUpdate(args, params) {
985
+ promiseChain = promiseChain.then(() => client.update.onUpdate(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
986
+ resultMappers.push(void 0);
987
+ return $this;
988
+ }
989
+ };
990
+ },
991
+ get delete() {
992
+ const $this = this;
993
+ return {
994
+ delete(args, params) {
995
+ promiseChain = promiseChain.then(() => client.delete.delete(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
996
+ resultMappers.push(void 0);
997
+ return $this;
998
+ }
999
+ };
1000
+ },
1001
+ clearState(args) {
1002
+ promiseChain = promiseChain.then(() => client.clearState({ ...args, sendParams: { ...args?.sendParams, skipSending: true, atc } }));
1003
+ resultMappers.push(void 0);
1004
+ return this;
1005
+ },
1006
+ addTransaction(txn, defaultSender) {
1007
+ promiseChain = promiseChain.then(async () => atc.addTransaction(await algokit3__namespace.getTransactionWithSigner(txn, defaultSender ?? client.sender)));
1008
+ return this;
1009
+ },
1010
+ async atc() {
1011
+ await promiseChain;
1012
+ return atc;
1013
+ },
1014
+ async simulate(options) {
1015
+ await promiseChain;
1016
+ const result = await atc.simulate(client.algod, new algosdk2.modelsv2.SimulateRequest({ txnGroups: [], ...options }));
1017
+ return {
1018
+ ...result,
1019
+ returns: result.methodResults?.map((val, i) => resultMappers[i] !== void 0 ? resultMappers[i](val.returnValue) : val.returnValue)
1020
+ };
1021
+ },
1022
+ async execute(sendParams) {
1023
+ await promiseChain;
1024
+ const result = await algokit3__namespace.sendAtomicTransactionComposer({ atc, sendParams }, client.algod);
1025
+ return {
1026
+ ...result,
1027
+ returns: result.returns?.map((val, i) => resultMappers[i] !== void 0 ? resultMappers[i](val.returnValue) : val.returnValue)
1028
+ };
1029
+ }
1030
+ };
1031
+ }
1032
+ };
1033
+ var APP_SPEC2 = {
1034
+ "hints": {
1035
+ "on_create()uint8": {
1036
+ "call_config": {
1037
+ "no_op": "CREATE"
1038
+ }
1039
+ },
1040
+ "propose_a_match(application,application,uint64,address,address,address,uint64)uint8": {
1041
+ "call_config": {
1042
+ "no_op": "CALL"
1043
+ }
1044
+ }
1045
+ },
1046
+ "source": {
1047
+ "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50Y2Jsb2NrIDAgMSA2IDI1NgpieXRlY2Jsb2NrIDB4MDEgMHg2MzZmNmM2YzYxNzQ2NTcyNjE2YzVmNjE3MzczNjU3NDVmNjk2NCAweDc5NjU3MzVmNjE3MzczNjU3NDVmNjk2NCAweDZlNmY1ZjYxNzM3MzY1NzQ1ZjY5NjQgMHgxNTFmN2M3NSAweDAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4NDNkYjYyYTEgLy8gIm9uX2NyZWF0ZSgpdWludDgiCj09CmJueiBtYWluX2w0CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4MTZhYzZkYmIgLy8gInByb3Bvc2VfYV9tYXRjaChhcHBsaWNhdGlvbixhcHBsaWNhdGlvbix1aW50NjQsYWRkcmVzcyxhZGRyZXNzLGFkZHJlc3MsdWludDY0KXVpbnQ4Igo9PQpibnogbWFpbl9sMwplcnIKbWFpbl9sMzoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBwcm9wb3NlYW1hdGNoY2FzdGVyXzQKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDQ6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKPT0KJiYKYXNzZXJ0CmNhbGxzdWIgb25jcmVhdGVjYXN0ZXJfMwppbnRjXzEgLy8gMQpyZXR1cm4KCi8vIGdsb2JhbF9tdXN0X2dldApnbG9iYWxtdXN0Z2V0XzA6CnByb3RvIDIgMQpmcmFtZV9kaWcgLTIKZnJhbWVfZGlnIC0xCmFwcF9nbG9iYWxfZ2V0X2V4CnN0b3JlIDIKc3RvcmUgMQpsb2FkIDIKYXNzZXJ0CmxvYWQgMQpyZXRzdWIKCi8vIG9uX2NyZWF0ZQpvbmNyZWF0ZV8xOgpwcm90byAwIDEKaW50Y18wIC8vIDAKaW50Y18xIC8vIDEKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmludGNfMyAvLyAyNTYKPAphc3NlcnQKcmV0c3ViCgovLyBwcm9wb3NlX2FfbWF0Y2gKcHJvcG9zZWFtYXRjaF8yOgpwcm90byA3IDEKaW50Y18wIC8vIDAKdHhuIEdyb3VwSW5kZXgKZnJhbWVfZGlnIC0xCi0KZ3R4bnMgTGFzdExvZwpwdXNoaW50IDQgLy8gNAp0eG4gR3JvdXBJbmRleApmcmFtZV9kaWcgLTEKLQpndHhucyBMYXN0TG9nCmxlbgpwdXNoaW50IDQgLy8gNAotCmV4dHJhY3QzCmJ0b2kKc3RvcmUgMAppdHhuX2JlZ2luCmludGNfMiAvLyBhcHBsCml0eG5fZmllbGQgVHlwZUVudW0KZnJhbWVfZGlnIC02CnR4bmFzIEFwcGxpY2F0aW9ucwppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKbG9hZCAwCml0eG5fZmllbGQgQXBwbGljYXRpb25zCnB1c2hieXRlcyAweDMyY2UyODFlIC8vICJtYXRjaF9tYWtlcihhcHBsaWNhdGlvbix1aW50NjQpdWludDgiCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmJ5dGVjXzAgLy8gMHgwMQppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgLTUKaXRvYgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQpmcmFtZV9kaWcgLTQKaXR4bl9maWVsZCBBY2NvdW50cwpmcmFtZV9kaWcgLTIKaXR4bl9maWVsZCBBY2NvdW50cwpmcmFtZV9kaWcgLTcKdHhuYXMgQXBwbGljYXRpb25zCml0eG5fZmllbGQgQXBwbGljYXRpb25zCmxvYWQgMAppdHhuX2ZpZWxkIEFwcGxpY2F0aW9ucwpmcmFtZV9kaWcgLTcKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjXzEgLy8gImNvbGxhdGVyYWxfYXNzZXRfaWQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF8wCml0eG5fZmllbGQgQXNzZXRzCmZyYW1lX2RpZyAtNwp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMiAvLyAieWVzX2Fzc2V0X2lkIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMAppdHhuX2ZpZWxkIEFzc2V0cwpmcmFtZV9kaWcgLTcKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjXzMgLy8gIm5vX2Fzc2V0X2lkIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMAppdHhuX2ZpZWxkIEFzc2V0cwppdHhuX25leHQKaW50Y18yIC8vIGFwcGwKaXR4bl9maWVsZCBUeXBlRW51bQpsb2FkIDAKaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECmZyYW1lX2RpZyAtNgp0eG5hcyBBcHBsaWNhdGlvbnMKaXR4bl9maWVsZCBBcHBsaWNhdGlvbnMKcHVzaGJ5dGVzIDB4ZGI5MjJmYzIgLy8gIm1hdGNoX3Rha2VyKGFwcGxpY2F0aW9uKXVpbnQ2NCIKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKYnl0ZWNfMCAvLyAweDAxCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCmZyYW1lX2RpZyAtNwp0eG5hcyBBcHBsaWNhdGlvbnMKaXR4bl9maWVsZCBBcHBsaWNhdGlvbnMKZnJhbWVfZGlnIC02CnR4bmFzIEFwcGxpY2F0aW9ucwppdHhuX2ZpZWxkIEFwcGxpY2F0aW9ucwpmcmFtZV9kaWcgLTcKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjXzEgLy8gImNvbGxhdGVyYWxfYXNzZXRfaWQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF8wCml0eG5fZmllbGQgQXNzZXRzCmZyYW1lX2RpZyAtNwp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMiAvLyAieWVzX2Fzc2V0X2lkIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMAppdHhuX2ZpZWxkIEFzc2V0cwpmcmFtZV9kaWcgLTcKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjXzMgLy8gIm5vX2Fzc2V0X2lkIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMAppdHhuX2ZpZWxkIEFzc2V0cwpmcmFtZV9kaWcgLTMKaXR4bl9maWVsZCBBY2NvdW50cwpmcmFtZV9kaWcgLTIKaXR4bl9maWVsZCBBY2NvdW50cwppdHhuX25leHQKaW50Y18yIC8vIGFwcGwKaXR4bl9maWVsZCBUeXBlRW51bQpmcmFtZV9kaWcgLTcKdHhuYXMgQXBwbGljYXRpb25zCml0eG5fZmllbGQgQXBwbGljYXRpb25JRApmcmFtZV9kaWcgLTYKdHhuYXMgQXBwbGljYXRpb25zCml0eG5fZmllbGQgQXBwbGljYXRpb25zCmxvYWQgMAppdHhuX2ZpZWxkIEFwcGxpY2F0aW9ucwpwdXNoYnl0ZXMgMHhiYTFkZWVmNSAvLyAicHJvY2Vzc19wb3RlbnRpYWxfbWF0Y2goYXBwbGljYXRpb24sYXBwbGljYXRpb24pdWludDgiCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmJ5dGVjXzAgLy8gMHgwMQppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpwdXNoYnl0ZXMgMHgwMiAvLyAweDAyCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCmZyYW1lX2RpZyAtNwp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAiY29sbGF0ZXJhbF9hc3NldF9pZCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzAKaXR4bl9maWVsZCBBc3NldHMKZnJhbWVfZGlnIC03CnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlY18yIC8vICJ5ZXNfYXNzZXRfaWQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF8wCml0eG5fZmllbGQgQXNzZXRzCmZyYW1lX2RpZyAtNwp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAibm9fYXNzZXRfaWQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF8wCml0eG5fZmllbGQgQXNzZXRzCmZyYW1lX2RpZyAtMwppdHhuX2ZpZWxkIEFjY291bnRzCmZyYW1lX2RpZyAtNAppdHhuX2ZpZWxkIEFjY291bnRzCmZyYW1lX2RpZyAtMgppdHhuX2ZpZWxkIEFjY291bnRzCml0eG5fbmV4dAppbnRjXzIgLy8gYXBwbAppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAtNwp0eG5hcyBBcHBsaWNhdGlvbnMKaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECmludGNfMCAvLyBOb09wCml0eG5fZmllbGQgT25Db21wbGV0aW9uCnB1c2hieXRlcyAweGI0ZjExYTE4IC8vICJkb19ub29wKHVpbnQ2NCl1aW50NjQiCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmludGNfMSAvLyAxCml0b2IKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKaW50Y18wIC8vIDAKaXR4bl9maWVsZCBGZWUKaXR4bl9zdWJtaXQKaW50Y18xIC8vIDEKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmludGNfMyAvLyAyNTYKPAphc3NlcnQKcmV0c3ViCgovLyBvbl9jcmVhdGVfY2FzdGVyCm9uY3JlYXRlY2FzdGVyXzM6CnByb3RvIDAgMAppbnRjXzAgLy8gMApjYWxsc3ViIG9uY3JlYXRlXzEKZnJhbWVfYnVyeSAwCmJ5dGVjIDQgLy8gMHgxNTFmN2M3NQpieXRlYyA1IC8vIDB4MDAKaW50Y18wIC8vIDAKZnJhbWVfZGlnIDAKc2V0Ynl0ZQpjb25jYXQKbG9nCnJldHN1YgoKLy8gcHJvcG9zZV9hX21hdGNoX2Nhc3Rlcgpwcm9wb3NlYW1hdGNoY2FzdGVyXzQ6CnByb3RvIDAgMAppbnRjXzAgLy8gMApkdXBuIDMKcHVzaGJ5dGVzIDB4IC8vICIiCmR1cG4gMgppbnRjXzAgLy8gMAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmludGNfMCAvLyAwCmdldGJ5dGUKZnJhbWVfYnVyeSAxCnR4bmEgQXBwbGljYXRpb25BcmdzIDIKaW50Y18wIC8vIDAKZ2V0Ynl0ZQpmcmFtZV9idXJ5IDIKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwpidG9pCmZyYW1lX2J1cnkgMwp0eG5hIEFwcGxpY2F0aW9uQXJncyA0CmZyYW1lX2J1cnkgNAp0eG5hIEFwcGxpY2F0aW9uQXJncyA1CmZyYW1lX2J1cnkgNQp0eG5hIEFwcGxpY2F0aW9uQXJncyA2CmZyYW1lX2J1cnkgNgp0eG5hIEFwcGxpY2F0aW9uQXJncyA3CmJ0b2kKZnJhbWVfYnVyeSA3CmZyYW1lX2RpZyAxCmZyYW1lX2RpZyAyCmZyYW1lX2RpZyAzCmZyYW1lX2RpZyA0CmZyYW1lX2RpZyA1CmZyYW1lX2RpZyA2CmZyYW1lX2RpZyA3CmNhbGxzdWIgcHJvcG9zZWFtYXRjaF8yCmZyYW1lX2J1cnkgMApieXRlYyA0IC8vIDB4MTUxZjdjNzUKYnl0ZWMgNSAvLyAweDAwCmludGNfMCAvLyAwCmZyYW1lX2RpZyAwCnNldGJ5dGUKY29uY2F0CmxvZwpyZXRzdWI=",
1048
+ "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKcHVzaGludCAwIC8vIDAKcmV0dXJu"
1049
+ },
1050
+ "state": {
1051
+ "global": {
1052
+ "num_byte_slices": 0,
1053
+ "num_uints": 0
1054
+ },
1055
+ "local": {
1056
+ "num_byte_slices": 0,
1057
+ "num_uints": 0
1058
+ }
1059
+ },
1060
+ "schema": {
1061
+ "global": {
1062
+ "declared": {},
1063
+ "reserved": {}
1064
+ },
1065
+ "local": {
1066
+ "declared": {},
1067
+ "reserved": {}
1068
+ }
1069
+ },
1070
+ "contract": {
1071
+ "name": "matcher_app",
1072
+ "methods": [
1073
+ {
1074
+ "name": "on_create",
1075
+ "args": [],
1076
+ "returns": {
1077
+ "type": "uint8"
1078
+ }
1079
+ },
1080
+ {
1081
+ "name": "propose_a_match",
1082
+ "args": [
1083
+ {
1084
+ "type": "application",
1085
+ "name": "market_app"
1086
+ },
1087
+ {
1088
+ "type": "application",
1089
+ "name": "maker"
1090
+ },
1091
+ {
1092
+ "type": "uint64",
1093
+ "name": "quantity_matched"
1094
+ },
1095
+ {
1096
+ "type": "address",
1097
+ "name": "taker_address"
1098
+ },
1099
+ {
1100
+ "type": "address",
1101
+ "name": "maker_address"
1102
+ },
1103
+ {
1104
+ "type": "address",
1105
+ "name": "fee_address"
1106
+ },
1107
+ {
1108
+ "type": "uint64",
1109
+ "name": "taker_app_created_index_offset"
1110
+ }
1111
+ ],
1112
+ "returns": {
1113
+ "type": "uint8"
1114
+ }
1115
+ }
1116
+ ],
1117
+ "networks": {}
1118
+ },
1119
+ "bare_call_config": {}
1120
+ };
1121
+ var MatcherAppCallFactory = class {
1122
+ /**
1123
+ * Gets available create call factories
1124
+ */
1125
+ static get create() {
1126
+ return {
1127
+ /**
1128
+ * Constructs a create call for the matcher_app smart contract using the on_create()uint8 ABI method
1129
+ *
1130
+ * @param args Any args for the contract call
1131
+ * @param params Any additional parameters for the call
1132
+ * @returns A TypedCallParams object for the call
1133
+ */
1134
+ onCreate(args, params = {}) {
1135
+ return {
1136
+ method: "on_create()uint8",
1137
+ methodArgs: Array.isArray(args) ? args : [],
1138
+ ...params
1139
+ };
1140
+ }
1141
+ };
1142
+ }
1143
+ /**
1144
+ * Constructs a no op call for the propose_a_match(application,application,uint64,address,address,address,uint64)uint8 ABI method
1145
+ *
1146
+ * @param args Any args for the contract call
1147
+ * @param params Any additional parameters for the call
1148
+ * @returns A TypedCallParams object for the call
1149
+ */
1150
+ static proposeAMatch(args, params) {
1151
+ return {
1152
+ method: "propose_a_match(application,application,uint64,address,address,address,uint64)uint8",
1153
+ methodArgs: Array.isArray(args) ? args : [args.marketApp, args.maker, args.quantityMatched, args.takerAddress, args.makerAddress, args.feeAddress, args.takerAppCreatedIndexOffset],
1154
+ ...params
1155
+ };
1156
+ }
1157
+ };
1158
+ var MatcherAppClient = class {
1159
+ /**
1160
+ * Creates a new instance of `MatcherAppClient`
1161
+ *
1162
+ * @param appDetails appDetails The details to identify the app to deploy
1163
+ * @param algod An algod client instance
1164
+ */
1165
+ constructor(appDetails, algod) {
1166
+ this.algod = algod;
1167
+ this.sender = appDetails.sender;
1168
+ this.appClient = algokit3__namespace.getAppClient({
1169
+ ...appDetails,
1170
+ app: APP_SPEC2
1171
+ }, algod);
1172
+ }
1173
+ /**
1174
+ * The underlying `ApplicationClient` for when you want to have more flexibility
1175
+ */
1176
+ appClient;
1177
+ sender;
1178
+ /**
1179
+ * Checks for decode errors on the AppCallTransactionResult and maps the return value to the specified generic type
1180
+ *
1181
+ * @param result The AppCallTransactionResult to be mapped
1182
+ * @param returnValueFormatter An optional delegate to format the return value if required
1183
+ * @returns The smart contract response with an updated return value
1184
+ */
1185
+ mapReturnValue(result, returnValueFormatter) {
1186
+ if (result.return?.decodeError) {
1187
+ throw result.return.decodeError;
1188
+ }
1189
+ const returnValue = result.return?.returnValue !== void 0 && returnValueFormatter !== void 0 ? returnValueFormatter(result.return.returnValue) : result.return?.returnValue;
1190
+ return { ...result, return: returnValue };
1191
+ }
1192
+ /**
1193
+ * Calls the ABI method with the matching signature using an onCompletion code of NO_OP
1194
+ *
1195
+ * @param typedCallParams An object containing the method signature, args, and any other relevant parameters
1196
+ * @param returnValueFormatter An optional delegate which when provided will be used to map non-undefined return values to the target type
1197
+ * @returns The result of the smart contract call
1198
+ */
1199
+ async call(typedCallParams, returnValueFormatter) {
1200
+ return this.mapReturnValue(await this.appClient.call(typedCallParams), returnValueFormatter);
1201
+ }
1202
+ /**
1203
+ * Idempotently deploys the matcher_app smart contract.
1204
+ *
1205
+ * @param params The arguments for the contract calls and any additional parameters for the call
1206
+ * @returns The deployment result
1207
+ */
1208
+ deploy(params = {}) {
1209
+ const createArgs = params.createCall?.(MatcherAppCallFactory.create);
1210
+ return this.appClient.deploy({
1211
+ ...params,
1212
+ createArgs,
1213
+ createOnCompleteAction: createArgs?.onCompleteAction
1214
+ });
1215
+ }
1216
+ /**
1217
+ * Gets available create methods
1218
+ */
1219
+ get create() {
1220
+ const $this = this;
1221
+ return {
1222
+ /**
1223
+ * Creates a new instance of the matcher_app smart contract using the on_create()uint8 ABI method.
1224
+ *
1225
+ * @param args The arguments for the smart contract call
1226
+ * @param params Any additional parameters for the call
1227
+ * @returns The create result
1228
+ */
1229
+ async onCreate(args, params = {}) {
1230
+ return $this.mapReturnValue(await $this.appClient.create(MatcherAppCallFactory.create.onCreate(args, params)));
1231
+ }
1232
+ };
1233
+ }
1234
+ /**
1235
+ * Makes a clear_state call to an existing instance of the matcher_app smart contract.
1236
+ *
1237
+ * @param args The arguments for the bare call
1238
+ * @returns The clear_state result
1239
+ */
1240
+ clearState(args = {}) {
1241
+ return this.appClient.clearState(args);
1242
+ }
1243
+ /**
1244
+ * Calls the propose_a_match(application,application,uint64,address,address,address,uint64)uint8 ABI method.
1245
+ *
1246
+ * @param args The arguments for the contract call
1247
+ * @param params Any additional parameters for the call
1248
+ * @returns The result of the call
1249
+ */
1250
+ proposeAMatch(args, params = {}) {
1251
+ return this.call(MatcherAppCallFactory.proposeAMatch(args, params));
1252
+ }
1253
+ compose() {
1254
+ const client = this;
1255
+ const atc = new algosdk2.AtomicTransactionComposer();
1256
+ let promiseChain = Promise.resolve();
1257
+ const resultMappers = [];
1258
+ return {
1259
+ proposeAMatch(args, params) {
1260
+ promiseChain = promiseChain.then(() => client.proposeAMatch(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
1261
+ resultMappers.push(void 0);
1262
+ return this;
1263
+ },
1264
+ clearState(args) {
1265
+ promiseChain = promiseChain.then(() => client.clearState({ ...args, sendParams: { ...args?.sendParams, skipSending: true, atc } }));
1266
+ resultMappers.push(void 0);
1267
+ return this;
1268
+ },
1269
+ addTransaction(txn, defaultSender) {
1270
+ promiseChain = promiseChain.then(async () => atc.addTransaction(await algokit3__namespace.getTransactionWithSigner(txn, defaultSender ?? client.sender)));
1271
+ return this;
1272
+ },
1273
+ async atc() {
1274
+ await promiseChain;
1275
+ return atc;
1276
+ },
1277
+ async simulate(options) {
1278
+ await promiseChain;
1279
+ const result = await atc.simulate(client.algod, new algosdk2.modelsv2.SimulateRequest({ txnGroups: [], ...options }));
1280
+ return {
1281
+ ...result,
1282
+ returns: result.methodResults?.map((val, i) => resultMappers[i] !== void 0 ? resultMappers[i](val.returnValue) : val.returnValue)
1283
+ };
1284
+ },
1285
+ async execute(sendParams) {
1286
+ await promiseChain;
1287
+ const result = await algokit3__namespace.sendAtomicTransactionComposer({ atc, sendParams }, client.algod);
1288
+ return {
1289
+ ...result,
1290
+ returns: result.returns?.map((val, i) => resultMappers[i] !== void 0 ? resultMappers[i](val.returnValue) : val.returnValue)
1291
+ };
1292
+ }
1293
+ };
1294
+ }
1295
+ };
1296
+ var calculateFee = (quantity, price, feeBase) => {
1297
+ const q = new decimal_js.Decimal(quantity.toString());
1298
+ const p = new decimal_js.Decimal(price.toString()).div(1e6);
1299
+ const fb = new decimal_js.Decimal(feeBase.toString()).div(1e6);
1300
+ const fee = fb.mul(q).mul(p).mul(new decimal_js.Decimal(1).minus(p));
1301
+ return Math.ceil(fee.toNumber());
1302
+ };
1303
+ var calculateFeeFromTotal = (totalAmount, price, feeBase) => {
1304
+ const total = new decimal_js.Decimal(totalAmount.toString());
1305
+ const p = new decimal_js.Decimal(price.toString()).div(1e6);
1306
+ const fb = new decimal_js.Decimal(feeBase.toString()).div(1e6);
1307
+ const denominator = p.mul(new decimal_js.Decimal(1).plus(fb.mul(new decimal_js.Decimal(1).minus(p))));
1308
+ const quantity = total.div(denominator);
1309
+ const fee = fb.mul(quantity).mul(p).mul(new decimal_js.Decimal(1).minus(p));
1310
+ return Math.ceil(fee.toNumber());
1311
+ };
1312
+ var decodeGlobalState = (rawState) => {
1313
+ const state = {};
1314
+ for (const item of rawState) {
1315
+ const key = Buffer.from(item.key, "base64").toString();
1316
+ if (item.value.type === 1) {
1317
+ if (key === "owner" || key === "oracle_address" || key === "fee_address" || key === "market_friend_addr" || key === "escrow_cancel_address") {
1318
+ try {
1319
+ const addressBytes = Buffer.from(item.value.bytes, "base64");
1320
+ if (addressBytes.length === 32) {
1321
+ state[key] = algosdk2__default.default.encodeAddress(addressBytes);
1322
+ } else {
1323
+ state[key] = item.value.bytes;
1324
+ }
1325
+ } catch {
1326
+ state[key] = item.value.bytes;
1327
+ }
1328
+ } else {
1329
+ try {
1330
+ state[key] = Buffer.from(item.value.bytes, "base64").toString();
1331
+ } catch {
1332
+ state[key] = item.value.bytes;
1333
+ }
1334
+ }
1335
+ } else {
1336
+ state[key] = Number(item.value.uint);
1337
+ }
1338
+ }
1339
+ return state;
1340
+ };
1341
+ var getMarketGlobalState = async (algodClient, marketAppId) => {
1342
+ const appInfo = await algodClient.getApplicationByID(marketAppId).do();
1343
+ const rawState = appInfo.params?.["global-state"] ?? appInfo["params"]?.["global-state"] ?? [];
1344
+ return decodeGlobalState(rawState);
1345
+ };
1346
+ var getEscrowGlobalState = async (indexerClient, escrowAppId) => {
1347
+ const appInfo = await indexerClient.lookupApplications(escrowAppId).do();
1348
+ const rawState = appInfo.application?.params?.["global-state"] ?? [];
1349
+ return decodeGlobalState(rawState);
1350
+ };
1351
+ var checkAssetOptIn = async (algodClient, address, assetId) => {
1352
+ try {
1353
+ const accountInfo = await algodClient.accountInformation(address).do();
1354
+ const assets = accountInfo.assets || accountInfo["assets"] || [];
1355
+ return assets.some((a) => (a["asset-id"] ?? a.assetId) === assetId);
1356
+ } catch {
1357
+ return false;
1358
+ }
1359
+ };
1360
+
1361
+ // src/utils/matching.ts
1362
+ var calculateMatchingOrders = (orderbook, isBuying, isYes, quantity, price, slippageTolerance) => {
1363
+ const { yes, no } = orderbook;
1364
+ const getMatchingOrders = () => {
1365
+ if (isBuying) {
1366
+ if (isYes) {
1367
+ const directOrders = yes.asks;
1368
+ const complementaryOrders = no.bids.map((bid) => ({
1369
+ price: 1e6 - bid.price,
1370
+ quantity: bid.quantity,
1371
+ escrowAppId: bid.escrowAppId,
1372
+ owner: bid.owner
1373
+ }));
1374
+ const allOrders = [...directOrders, ...complementaryOrders].sort((a, b) => a.price - b.price);
1375
+ return allOrders.filter((order) => order.price <= price + slippageTolerance);
1376
+ } else {
1377
+ const directOrders = no.asks;
1378
+ const complementaryOrders = yes.bids.map((bid) => ({
1379
+ price: 1e6 - bid.price,
1380
+ quantity: bid.quantity,
1381
+ escrowAppId: bid.escrowAppId,
1382
+ owner: bid.owner
1383
+ }));
1384
+ const allOrders = [...directOrders, ...complementaryOrders].sort((a, b) => a.price - b.price);
1385
+ return allOrders.filter((order) => order.price <= price + slippageTolerance);
1386
+ }
1387
+ } else {
1388
+ if (isYes) {
1389
+ const directOrders = yes.bids;
1390
+ const complementaryOrders = no.asks.map((ask) => ({
1391
+ price: 1e6 - ask.price,
1392
+ quantity: ask.quantity,
1393
+ escrowAppId: ask.escrowAppId,
1394
+ owner: ask.owner
1395
+ }));
1396
+ const allOrders = [...directOrders, ...complementaryOrders].sort((a, b) => b.price - a.price);
1397
+ return allOrders.filter((order) => order.price >= price - slippageTolerance);
1398
+ } else {
1399
+ const directOrders = no.bids;
1400
+ const complementaryOrders = yes.asks.map((ask) => ({
1401
+ price: 1e6 - ask.price,
1402
+ quantity: ask.quantity,
1403
+ escrowAppId: ask.escrowAppId,
1404
+ owner: ask.owner
1405
+ }));
1406
+ const allOrders = [...directOrders, ...complementaryOrders].sort((a, b) => b.price - a.price);
1407
+ return allOrders.filter((order) => order.price >= price - slippageTolerance);
1408
+ }
1409
+ }
1410
+ };
1411
+ const matchingOrders = getMatchingOrders();
1412
+ if (matchingOrders.length === 0) return [];
1413
+ const matches = [];
1414
+ let volumeLeft = quantity;
1415
+ for (const counterParty of matchingOrders) {
1416
+ if (volumeLeft <= 0) break;
1417
+ const amountToTake = Math.min(counterParty.quantity, volumeLeft);
1418
+ if (amountToTake > 0) {
1419
+ matches.push({
1420
+ escrowAppId: counterParty.escrowAppId,
1421
+ quantity: amountToTake,
1422
+ owner: counterParty.owner
1423
+ });
1424
+ volumeLeft -= amountToTake;
1425
+ }
1426
+ }
1427
+ return matches;
1428
+ };
1429
+ var getAllCreatedApplications = async (indexerClient, address, limit = 100) => {
1430
+ let applications = [];
1431
+ let nextToken;
1432
+ let hasMore = true;
1433
+ while (hasMore) {
1434
+ let query = indexerClient.lookupAccountCreatedApplications(address).limit(limit);
1435
+ if (nextToken) {
1436
+ query = query.nextToken(nextToken);
1437
+ }
1438
+ const response = await query.do();
1439
+ if (response.applications?.length) {
1440
+ applications = [...applications, ...response.applications];
1441
+ }
1442
+ if (response["next-token"]) {
1443
+ nextToken = response["next-token"];
1444
+ } else {
1445
+ hasMore = false;
1446
+ }
1447
+ }
1448
+ return applications.filter((a) => a.deleted === false);
1449
+ };
1450
+ var fetchApplicationsGlobalState = async (indexerClient, applications) => {
1451
+ return Promise.all(
1452
+ applications.map(async (app) => {
1453
+ const appId = app.id;
1454
+ try {
1455
+ const appInfo = await indexerClient.lookupApplications(appId).do();
1456
+ const globalState = {};
1457
+ const rawGlobalState = appInfo.application?.params?.["global-state"];
1458
+ if (rawGlobalState) {
1459
+ const decoded = decodeGlobalState(rawGlobalState);
1460
+ Object.assign(globalState, decoded);
1461
+ }
1462
+ return { appId: Number(appId), globalState };
1463
+ } catch {
1464
+ return { appId: 0, globalState: {} };
1465
+ }
1466
+ })
1467
+ );
1468
+ };
1469
+ var transformOrders = (orders) => orders.filter((o) => o.appId > 0).map((o) => ({
1470
+ price: o.globalState.price ?? 0,
1471
+ quantity: (o.globalState.quantity ?? 0) - (o.globalState.quantity_filled ?? 0),
1472
+ escrowAppId: o.appId,
1473
+ owner: o.globalState.owner ?? ""
1474
+ }));
1475
+ var getOrderbook = async (config, marketAppId) => {
1476
+ const appAddress = algosdk2__default.default.getApplicationAddress(marketAppId);
1477
+ const applications = await getAllCreatedApplications(config.indexerClient, appAddress);
1478
+ const appsWithState = await fetchApplicationsGlobalState(config.indexerClient, applications);
1479
+ const isOpenLimitOrder = (o) => (o.globalState.quantity ?? 0) > (o.globalState.quantity_filled ?? 0) && o.globalState.slippage === 0;
1480
+ const yesBuyOrders = appsWithState.filter(
1481
+ (o) => o.globalState.side === 1 && o.globalState.position === 1 && isOpenLimitOrder(o)
1482
+ );
1483
+ const yesSellOrders = appsWithState.filter(
1484
+ (o) => o.globalState.side === 0 && o.globalState.position === 1 && isOpenLimitOrder(o)
1485
+ );
1486
+ const noBuyOrders = appsWithState.filter(
1487
+ (o) => o.globalState.side === 1 && o.globalState.position === 0 && isOpenLimitOrder(o)
1488
+ );
1489
+ const noSellOrders = appsWithState.filter(
1490
+ (o) => o.globalState.side === 0 && o.globalState.position === 0 && isOpenLimitOrder(o)
1491
+ );
1492
+ return {
1493
+ yes: {
1494
+ bids: transformOrders(yesBuyOrders),
1495
+ asks: transformOrders(yesSellOrders)
1496
+ },
1497
+ no: {
1498
+ bids: transformOrders(noBuyOrders),
1499
+ asks: transformOrders(noSellOrders)
1500
+ }
1501
+ };
1502
+ };
1503
+ var getOpenOrders = async (config, marketAppId, walletAddress) => {
1504
+ const owner = walletAddress ?? config.activeAddress;
1505
+ const appAddress = algosdk2__default.default.getApplicationAddress(marketAppId);
1506
+ const applications = await getAllCreatedApplications(config.indexerClient, appAddress);
1507
+ const appsWithState = await fetchApplicationsGlobalState(config.indexerClient, applications);
1508
+ return appsWithState.filter(
1509
+ (o) => o.globalState.owner === owner && (o.globalState.quantity ?? 0) > (o.globalState.quantity_filled ?? 0)
1510
+ ).map((o) => ({
1511
+ escrowAppId: o.appId,
1512
+ marketAppId,
1513
+ position: o.globalState.position ?? 0,
1514
+ side: o.globalState.side ?? 0,
1515
+ price: o.globalState.price ?? 0,
1516
+ quantity: o.globalState.quantity ?? 0,
1517
+ quantityFilled: o.globalState.quantity_filled ?? 0,
1518
+ slippage: o.globalState.slippage ?? 0,
1519
+ owner: o.globalState.owner ?? ""
1520
+ }));
1521
+ };
1522
+
1523
+ // src/modules/trading.ts
1524
+ var extractEscrowAppId = async (algodClient, indexerClient, targetTxId) => {
1525
+ try {
1526
+ const pendingInfo = await algodClient.pendingTransactionInformation(targetTxId).do();
1527
+ if (pendingInfo?.["inner-txns"]?.[0]?.["created-application-index"]) {
1528
+ return pendingInfo["inner-txns"][0]["created-application-index"];
1529
+ }
1530
+ } catch {
1531
+ }
1532
+ const backoffs = [1e3, 1500, 2e3, 3e3, 5e3, 8e3];
1533
+ for (const delayMs of backoffs) {
1534
+ try {
1535
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
1536
+ const txnLookup = await indexerClient.lookupTransactionByID(targetTxId).do();
1537
+ if (txnLookup?.transaction?.["inner-txns"]?.[0]?.["created-application-index"]) {
1538
+ return txnLookup.transaction["inner-txns"][0]["created-application-index"];
1539
+ }
1540
+ } catch {
1541
+ }
1542
+ }
1543
+ return 0;
1544
+ };
1545
+ var createLimitOrder = async (config, params) => {
1546
+ return createOrder(config, { ...params, slippage: 0, matchingOrders: [] });
1547
+ };
1548
+ var createMarketOrder = async (config, params) => {
1549
+ let matchingOrders = params.matchingOrders;
1550
+ if (!matchingOrders) {
1551
+ const orderbook = await getOrderbook(config, params.marketAppId);
1552
+ matchingOrders = calculateMatchingOrders(
1553
+ orderbook,
1554
+ params.isBuying,
1555
+ params.position === 1,
1556
+ params.quantity,
1557
+ params.price,
1558
+ params.slippage
1559
+ );
1560
+ }
1561
+ const totalMatchedQuantity = matchingOrders.reduce((sum, o) => sum + o.quantity, 0);
1562
+ const result = await createOrder(config, {
1563
+ ...params,
1564
+ matchingOrders
1565
+ });
1566
+ return { ...result, matchedQuantity: totalMatchedQuantity };
1567
+ };
1568
+ var createOrder = async (config, params) => {
1569
+ const { algodClient, indexerClient, signer, activeAddress, matcherAppId, usdcAssetId, feeAddress } = config;
1570
+ const { marketAppId, position, price, quantity, isBuying, slippage, matchingOrders } = params;
1571
+ const globalState = await getMarketGlobalState(algodClient, marketAppId);
1572
+ const yesAssetId = globalState.yes_asset_id;
1573
+ const noAssetId = globalState.no_asset_id;
1574
+ const feeBase = params.feeBase ?? globalState.fee_base_percent;
1575
+ const marketFeeAddress = globalState.fee_address || feeAddress;
1576
+ const signerAccount = { signer, addr: activeAddress };
1577
+ const marketClient = new MarketAppClient(
1578
+ { resolveBy: "id", id: marketAppId, sender: signerAccount },
1579
+ algodClient
1580
+ );
1581
+ const matcherClient = new MatcherAppClient(
1582
+ { resolveBy: "id", id: matcherAppId, sender: signerAccount },
1583
+ algodClient
1584
+ );
1585
+ let fee = 0;
1586
+ if (isBuying) {
1587
+ fee = calculateFee(quantity, price + slippage, feeBase);
1588
+ }
1589
+ const marketAddress = algosdk2.getApplicationAddress(marketAppId);
1590
+ const atc = new algosdk2.AtomicTransactionComposer();
1591
+ let createEscrowTxnIndex = 0;
1592
+ if (!isBuying) {
1593
+ const hasUsdcOptIn = await checkAssetOptIn(algodClient, activeAddress, usdcAssetId);
1594
+ if (!hasUsdcOptIn) {
1595
+ const optInTxn = await algokit3__namespace.transferAsset(
1596
+ { from: signerAccount, to: activeAddress, assetId: usdcAssetId, amount: 0, skipSending: true },
1597
+ algodClient
1598
+ );
1599
+ atc.addTransaction({ txn: optInTxn.transaction, signer });
1600
+ createEscrowTxnIndex++;
1601
+ }
1602
+ } else {
1603
+ const assetId = position === 1 ? yesAssetId : noAssetId;
1604
+ const hasAssetOptIn = await checkAssetOptIn(algodClient, activeAddress, assetId);
1605
+ if (!hasAssetOptIn) {
1606
+ const optInTxn = await algokit3__namespace.transferAsset(
1607
+ { from: signerAccount, to: activeAddress, assetId, amount: 0, skipSending: true },
1608
+ algodClient
1609
+ );
1610
+ atc.addTransaction({ txn: optInTxn.transaction, signer });
1611
+ createEscrowTxnIndex++;
1612
+ }
1613
+ }
1614
+ const paymentTxn = await algokit3__namespace.transferAlgos(
1615
+ { from: signerAccount, to: marketAddress, amount: algokit3__namespace.microAlgos(957e3), skipSending: true },
1616
+ algodClient
1617
+ );
1618
+ atc.addTransaction({ txn: paymentTxn.transaction, signer });
1619
+ createEscrowTxnIndex++;
1620
+ const fundAmount = isBuying ? Math.floor(quantity * (price + slippage) / 1e6) + fee : quantity;
1621
+ const fundAssetId = isBuying ? usdcAssetId : position === 1 ? yesAssetId : noAssetId;
1622
+ const assetTransferTxn = await algokit3__namespace.transferAsset(
1623
+ { from: signerAccount, to: marketAddress, amount: fundAmount, assetId: fundAssetId, skipSending: true },
1624
+ algodClient
1625
+ );
1626
+ atc.addTransaction({ txn: assetTransferTxn.transaction, signer });
1627
+ createEscrowTxnIndex++;
1628
+ const createEscrowTxn = await marketClient.createEscrow(
1629
+ { price, quantity, slippage, position },
1630
+ { assets: [usdcAssetId, yesAssetId, noAssetId], sendParams: { skipSending: true } }
1631
+ );
1632
+ atc.addTransaction({ txn: createEscrowTxn.transaction, signer });
1633
+ let matchIndex = 1;
1634
+ for (const matchingOrder of matchingOrders) {
1635
+ const payCounterPartyTxn = await algokit3__namespace.transferAlgos(
1636
+ {
1637
+ from: signerAccount,
1638
+ to: algosdk2.getApplicationAddress(matchingOrder.escrowAppId),
1639
+ amount: algokit3__namespace.microAlgos(1e3 * (isBuying ? 1 : 2)),
1640
+ skipSending: true
1641
+ },
1642
+ algodClient
1643
+ );
1644
+ atc.addTransaction({ txn: payCounterPartyTxn.transaction, signer });
1645
+ const proposeAMatchTxn = await matcherClient.proposeAMatch(
1646
+ {
1647
+ marketApp: marketAppId,
1648
+ maker: matchingOrder.escrowAppId,
1649
+ quantityMatched: Math.min(matchingOrder.quantity, quantity),
1650
+ takerAddress: activeAddress,
1651
+ makerAddress: matchingOrder.owner,
1652
+ feeAddress: marketFeeAddress,
1653
+ takerAppCreatedIndexOffset: matchIndex * 2
1654
+ },
1655
+ {
1656
+ assets: [usdcAssetId, yesAssetId, noAssetId],
1657
+ accounts: [activeAddress, marketFeeAddress, matchingOrder.owner],
1658
+ sendParams: { skipSending: true, fee: algokit3__namespace.microAlgos(1e4) }
1659
+ }
1660
+ );
1661
+ atc.addTransaction({ txn: proposeAMatchTxn.transaction, signer });
1662
+ matchIndex++;
1663
+ }
1664
+ const result = await atc.execute(algodClient, 4);
1665
+ const targetTxId = result.txIDs[createEscrowTxnIndex];
1666
+ const escrowAppId = await extractEscrowAppId(algodClient, indexerClient, targetTxId);
1667
+ return {
1668
+ escrowAppId,
1669
+ txIds: result.txIDs,
1670
+ confirmedRound: result.confirmedRound
1671
+ };
1672
+ };
1673
+ var cancelOrder = async (config, params) => {
1674
+ const { algodClient, signer, usdcAssetId } = config;
1675
+ const { marketAppId, escrowAppId, orderOwner } = params;
1676
+ const globalState = await getMarketGlobalState(algodClient, marketAppId);
1677
+ const yesAssetId = globalState.yes_asset_id;
1678
+ const noAssetId = globalState.no_asset_id;
1679
+ const signerAccount = { signer, addr: orderOwner };
1680
+ const marketClient = new MarketAppClient(
1681
+ { resolveBy: "id", id: marketAppId, sender: signerAccount },
1682
+ algodClient
1683
+ );
1684
+ const atc = new algosdk2.AtomicTransactionComposer();
1685
+ const deleteCallTxn = await marketClient.deleteEscrow(
1686
+ { escrowAppId, algoReceiver: orderOwner },
1687
+ {
1688
+ apps: [escrowAppId],
1689
+ assets: [usdcAssetId, yesAssetId, noAssetId],
1690
+ accounts: [orderOwner],
1691
+ sendParams: { skipSending: true, fee: algokit3__namespace.microAlgos(7e3) }
1692
+ }
1693
+ );
1694
+ atc.addTransaction({ txn: deleteCallTxn.transaction, signer });
1695
+ const result = await atc.execute(algodClient, 4);
1696
+ return {
1697
+ success: true,
1698
+ txIds: result.txIDs
1699
+ };
1700
+ };
1701
+ var proposeMatch = async (config, params) => {
1702
+ const { algodClient, signer, activeAddress, matcherAppId, usdcAssetId, feeAddress } = config;
1703
+ const { marketAppId, makerEscrowAppId, makerAddress, quantityMatched } = params;
1704
+ const globalState = await getMarketGlobalState(algodClient, marketAppId);
1705
+ const yesAssetId = globalState.yes_asset_id;
1706
+ const noAssetId = globalState.no_asset_id;
1707
+ const marketFeeAddress = globalState.fee_address || feeAddress;
1708
+ const signerAccount = { signer, addr: activeAddress };
1709
+ const matcherClient = new MatcherAppClient(
1710
+ { resolveBy: "id", id: matcherAppId, sender: signerAccount },
1711
+ algodClient
1712
+ );
1713
+ const atc = new algosdk2.AtomicTransactionComposer();
1714
+ const payMakerTxn = await algokit3__namespace.transferAlgos(
1715
+ {
1716
+ from: signerAccount,
1717
+ to: algosdk2.getApplicationAddress(makerEscrowAppId),
1718
+ amount: algokit3__namespace.microAlgos(2e3),
1719
+ skipSending: true
1720
+ },
1721
+ algodClient
1722
+ );
1723
+ atc.addTransaction({ txn: payMakerTxn.transaction, signer });
1724
+ const proposeTxn = await matcherClient.proposeAMatch(
1725
+ {
1726
+ marketApp: marketAppId,
1727
+ maker: makerEscrowAppId,
1728
+ quantityMatched,
1729
+ takerAddress: activeAddress,
1730
+ makerAddress,
1731
+ feeAddress: marketFeeAddress,
1732
+ takerAppCreatedIndexOffset: 0
1733
+ },
1734
+ {
1735
+ assets: [usdcAssetId, yesAssetId, noAssetId],
1736
+ accounts: [activeAddress, marketFeeAddress, makerAddress],
1737
+ sendParams: { skipSending: true, fee: algokit3__namespace.microAlgos(1e4) }
1738
+ }
1739
+ );
1740
+ atc.addTransaction({ txn: proposeTxn.transaction, signer });
1741
+ const result = await atc.execute(algodClient, 4);
1742
+ return {
1743
+ success: true,
1744
+ txIds: result.txIDs
1745
+ };
1746
+ };
1747
+ var splitShares = async (config, params) => {
1748
+ const { algodClient, signer, activeAddress, usdcAssetId } = config;
1749
+ const { marketAppId, amount } = params;
1750
+ const globalState = await getMarketGlobalState(algodClient, marketAppId);
1751
+ const yesAssetId = globalState.yes_asset_id;
1752
+ const noAssetId = globalState.no_asset_id;
1753
+ const signerAccount = { signer, addr: activeAddress };
1754
+ const marketClient = new MarketAppClient(
1755
+ { resolveBy: "id", id: marketAppId, sender: signerAccount },
1756
+ algodClient
1757
+ );
1758
+ const marketAddress = algosdk2.getApplicationAddress(marketAppId);
1759
+ const atc = new algosdk2.AtomicTransactionComposer();
1760
+ let optInCosts = 0;
1761
+ const hasYesOptIn = await checkAssetOptIn(algodClient, activeAddress, yesAssetId);
1762
+ if (!hasYesOptIn) {
1763
+ const optInTxn = await algokit3__namespace.transferAsset(
1764
+ { from: signerAccount, to: activeAddress, assetId: yesAssetId, amount: 0, skipSending: true },
1765
+ algodClient
1766
+ );
1767
+ atc.addTransaction({ txn: optInTxn.transaction, signer });
1768
+ optInCosts += 1e3;
1769
+ }
1770
+ const hasNoOptIn = await checkAssetOptIn(algodClient, activeAddress, noAssetId);
1771
+ if (!hasNoOptIn) {
1772
+ const optInTxn = await algokit3__namespace.transferAsset(
1773
+ { from: signerAccount, to: activeAddress, assetId: noAssetId, amount: 0, skipSending: true },
1774
+ algodClient
1775
+ );
1776
+ atc.addTransaction({ txn: optInTxn.transaction, signer });
1777
+ optInCosts += 1e3;
1778
+ }
1779
+ const algoPayment = await algokit3__namespace.transferAlgos(
1780
+ { from: signerAccount, to: marketAddress, amount: algokit3__namespace.microAlgos(5e3 + optInCosts), skipSending: true },
1781
+ algodClient
1782
+ );
1783
+ atc.addTransaction({ txn: algoPayment.transaction, signer });
1784
+ const usdcTransfer = await algokit3__namespace.transferAsset(
1785
+ { from: signerAccount, to: marketAddress, amount, assetId: usdcAssetId, skipSending: true },
1786
+ algodClient
1787
+ );
1788
+ atc.addTransaction({ txn: usdcTransfer.transaction, signer });
1789
+ const splitTxn = await marketClient.splitShares(
1790
+ {},
1791
+ { assets: [usdcAssetId, yesAssetId, noAssetId], sendParams: { skipSending: true } }
1792
+ );
1793
+ atc.addTransaction({ txn: splitTxn.transaction, signer });
1794
+ const result = await atc.execute(algodClient, 4);
1795
+ return {
1796
+ success: true,
1797
+ txIds: result.txIDs,
1798
+ confirmedRound: result.confirmedRound
1799
+ };
1800
+ };
1801
+ var mergeShares = async (config, params) => {
1802
+ const { algodClient, signer, activeAddress, usdcAssetId } = config;
1803
+ const { marketAppId, amount } = params;
1804
+ const globalState = await getMarketGlobalState(algodClient, marketAppId);
1805
+ const yesAssetId = globalState.yes_asset_id;
1806
+ const noAssetId = globalState.no_asset_id;
1807
+ const signerAccount = { signer, addr: activeAddress };
1808
+ const marketClient = new MarketAppClient(
1809
+ { resolveBy: "id", id: marketAppId, sender: signerAccount },
1810
+ algodClient
1811
+ );
1812
+ const marketAddress = algosdk2.getApplicationAddress(marketAppId);
1813
+ const atc = new algosdk2.AtomicTransactionComposer();
1814
+ let optInCosts = 0;
1815
+ const hasUsdcOptIn = await checkAssetOptIn(algodClient, activeAddress, usdcAssetId);
1816
+ if (!hasUsdcOptIn) {
1817
+ const optInTxn = await algokit3__namespace.transferAsset(
1818
+ { from: signerAccount, to: activeAddress, assetId: usdcAssetId, amount: 0, skipSending: true },
1819
+ algodClient
1820
+ );
1821
+ atc.addTransaction({ txn: optInTxn.transaction, signer });
1822
+ optInCosts += 1e3;
1823
+ }
1824
+ const algoPayment = await algokit3__namespace.transferAlgos(
1825
+ { from: signerAccount, to: marketAddress, amount: algokit3__namespace.microAlgos(5e3 + optInCosts), skipSending: true },
1826
+ algodClient
1827
+ );
1828
+ atc.addTransaction({ txn: algoPayment.transaction, signer });
1829
+ const yesTransfer = await algokit3__namespace.transferAsset(
1830
+ { from: signerAccount, to: marketAddress, amount, assetId: yesAssetId, skipSending: true },
1831
+ algodClient
1832
+ );
1833
+ atc.addTransaction({ txn: yesTransfer.transaction, signer });
1834
+ const noTransfer = await algokit3__namespace.transferAsset(
1835
+ { from: signerAccount, to: marketAddress, amount, assetId: noAssetId, skipSending: true },
1836
+ algodClient
1837
+ );
1838
+ atc.addTransaction({ txn: noTransfer.transaction, signer });
1839
+ const mergeTxn = await marketClient.mergeShares(
1840
+ {},
1841
+ { assets: [usdcAssetId], sendParams: { skipSending: true } }
1842
+ );
1843
+ atc.addTransaction({ txn: mergeTxn.transaction, signer });
1844
+ const result = await atc.execute(algodClient, 4);
1845
+ return {
1846
+ success: true,
1847
+ txIds: result.txIDs,
1848
+ confirmedRound: result.confirmedRound
1849
+ };
1850
+ };
1851
+ var claim = async (config, params) => {
1852
+ const { algodClient, signer, activeAddress, usdcAssetId } = config;
1853
+ const { marketAppId, assetId } = params;
1854
+ const signerAccount = { signer, addr: activeAddress };
1855
+ const marketClient = new MarketAppClient(
1856
+ { resolveBy: "id", id: marketAppId, sender: signerAccount },
1857
+ algodClient
1858
+ );
1859
+ const marketAddress = algosdk2.getApplicationAddress(marketAppId);
1860
+ let tokenBalance = params.amount;
1861
+ if (!tokenBalance) {
1862
+ const accountInfo = await algodClient.accountInformation(activeAddress).do();
1863
+ const assets = accountInfo.assets || accountInfo["assets"] || [];
1864
+ const asset = assets.find((a) => (a["asset-id"] ?? a.assetId) === assetId);
1865
+ tokenBalance = asset ? Number(asset.amount) : 0;
1866
+ }
1867
+ if (tokenBalance <= 0) {
1868
+ throw new Error("No tokens to claim");
1869
+ }
1870
+ const atc = new algosdk2.AtomicTransactionComposer();
1871
+ const tokenTransfer = await algokit3__namespace.transferAsset(
1872
+ { from: signerAccount, to: marketAddress, amount: tokenBalance, assetId, skipSending: true },
1873
+ algodClient
1874
+ );
1875
+ atc.addTransaction({ txn: tokenTransfer.transaction, signer });
1876
+ const claimTxn = await marketClient.claim(
1877
+ {},
1878
+ {
1879
+ assets: [usdcAssetId, assetId],
1880
+ sendParams: { skipSending: true, fee: algokit3__namespace.microAlgos(1e3) }
1881
+ }
1882
+ );
1883
+ atc.addTransaction({ txn: claimTxn.transaction, signer });
1884
+ const sp = await algodClient.getTransactionParams().do();
1885
+ const closeOutTxn = algosdk2__default.default.makeAssetTransferTxnWithSuggestedParamsFromObject({
1886
+ from: activeAddress,
1887
+ to: marketAddress,
1888
+ amount: 0,
1889
+ assetIndex: assetId,
1890
+ closeRemainderTo: marketAddress,
1891
+ suggestedParams: sp
1892
+ });
1893
+ atc.addTransaction({ txn: closeOutTxn, signer });
1894
+ const result = await atc.execute(algodClient, 4);
1895
+ return {
1896
+ success: true,
1897
+ txIds: result.txIDs,
1898
+ confirmedRound: result.confirmedRound
1899
+ };
1900
+ };
1901
+ var getPositions = async (config, walletAddress) => {
1902
+ const { algodClient, indexerClient } = config;
1903
+ const address = walletAddress ?? config.activeAddress;
1904
+ const accountInfo = await algodClient.accountInformation(address).do();
1905
+ const assets = accountInfo.assets || accountInfo["assets"] || [];
1906
+ const nonZeroAssets = assets.filter((a) => Number(a.amount) > 0);
1907
+ if (nonZeroAssets.length === 0) return [];
1908
+ const positions = /* @__PURE__ */ new Map();
1909
+ for (const asset of nonZeroAssets) {
1910
+ const assetId = asset["asset-id"] ?? asset.assetId;
1911
+ const amount = Number(asset.amount);
1912
+ try {
1913
+ const assetInfo = await indexerClient.lookupAssetByID(assetId).do();
1914
+ const creator = assetInfo.asset?.params?.creator;
1915
+ if (!creator) continue;
1916
+ const createdApps = await indexerClient.lookupAccountCreatedApplications(creator).limit(1).do();
1917
+ if (!createdApps.applications?.length) continue;
1918
+ const appId = createdApps.applications[0].id;
1919
+ try {
1920
+ const appInfo = await indexerClient.lookupApplications(appId).do();
1921
+ const rawState = appInfo.application?.params?.["global-state"];
1922
+ if (!rawState) continue;
1923
+ let yesAssetIdOnChain = 0;
1924
+ let noAssetIdOnChain = 0;
1925
+ for (const item of rawState) {
1926
+ const key = Buffer.from(item.key, "base64").toString();
1927
+ if (key === "yes_asset_id") yesAssetIdOnChain = Number(item.value.uint);
1928
+ if (key === "no_asset_id") noAssetIdOnChain = Number(item.value.uint);
1929
+ }
1930
+ if (yesAssetIdOnChain === 0 && noAssetIdOnChain === 0) continue;
1931
+ const existing = positions.get(appId) ?? {
1932
+ marketAppId: appId,
1933
+ yesAssetId: yesAssetIdOnChain,
1934
+ noAssetId: noAssetIdOnChain,
1935
+ yesBalance: 0,
1936
+ noBalance: 0
1937
+ };
1938
+ if (assetId === yesAssetIdOnChain) {
1939
+ existing.yesBalance = amount;
1940
+ } else if (assetId === noAssetIdOnChain) {
1941
+ existing.noBalance = amount;
1942
+ } else {
1943
+ continue;
1944
+ }
1945
+ positions.set(appId, existing);
1946
+ } catch {
1947
+ continue;
1948
+ }
1949
+ } catch {
1950
+ continue;
1951
+ }
1952
+ }
1953
+ return Array.from(positions.values());
1954
+ };
1955
+
1956
+ // src/modules/markets.ts
1957
+ var DEFAULT_API_BASE_URL = "https://partners.alphaarcade.com/api";
1958
+ var getMarkets = async (config) => {
1959
+ const baseUrl = config.apiBaseUrl ?? DEFAULT_API_BASE_URL;
1960
+ const allMarkets = [];
1961
+ let lastEvaluatedKey;
1962
+ let hasMore = true;
1963
+ while (hasMore) {
1964
+ const params = new URLSearchParams({ activeOnly: "true", limit: "300" });
1965
+ if (lastEvaluatedKey) {
1966
+ params.set("lastEvaluatedKey", lastEvaluatedKey);
1967
+ }
1968
+ const url = `${baseUrl}/get-live-markets?${params.toString()}`;
1969
+ const response = await fetch(url, { headers: { "x-api-key": config.apiKey } });
1970
+ if (!response.ok) {
1971
+ throw new Error(`Alpha API error: ${response.status} ${response.statusText}`);
1972
+ }
1973
+ const data = await response.json();
1974
+ if (Array.isArray(data)) {
1975
+ allMarkets.push(...data);
1976
+ hasMore = false;
1977
+ } else if (data.markets) {
1978
+ allMarkets.push(...data.markets);
1979
+ lastEvaluatedKey = data.lastEvaluatedKey;
1980
+ hasMore = !!lastEvaluatedKey;
1981
+ } else {
1982
+ hasMore = false;
1983
+ }
1984
+ }
1985
+ return allMarkets;
1986
+ };
1987
+ var getMarket = async (config, marketId) => {
1988
+ const baseUrl = config.apiBaseUrl ?? DEFAULT_API_BASE_URL;
1989
+ const url = `${baseUrl}/get-market?marketId=${encodeURIComponent(marketId)}`;
1990
+ const response = await fetch(url, { headers: { "x-api-key": config.apiKey } });
1991
+ if (!response.ok) {
1992
+ if (response.status === 404) return null;
1993
+ throw new Error(`Alpha API error: ${response.status} ${response.statusText}`);
1994
+ }
1995
+ const data = await response.json();
1996
+ return data.market ?? data ?? null;
1997
+ };
1998
+
1999
+ // src/client.ts
2000
+ var AlphaClient = class {
2001
+ config;
2002
+ constructor(config) {
2003
+ if (!config.algodClient) throw new Error("algodClient is required");
2004
+ if (!config.indexerClient) throw new Error("indexerClient is required");
2005
+ if (!config.signer) throw new Error("signer is required");
2006
+ if (!config.activeAddress) throw new Error("activeAddress is required");
2007
+ if (!config.matcherAppId) throw new Error("matcherAppId is required");
2008
+ if (!config.usdcAssetId) throw new Error("usdcAssetId is required");
2009
+ if (!config.feeAddress) throw new Error("feeAddress is required");
2010
+ if (!config.apiKey) throw new Error("apiKey is required");
2011
+ this.config = {
2012
+ ...config,
2013
+ apiBaseUrl: config.apiBaseUrl ?? "https://partners.alphaarcade.com/api"
2014
+ };
2015
+ }
2016
+ // ============================================
2017
+ // Trading
2018
+ // ============================================
2019
+ /**
2020
+ * Creates a limit order on a market.
2021
+ *
2022
+ * A limit order sits on the orderbook at your specified price until matched
2023
+ * or cancelled. Slippage is 0 — the order executes only at your exact price.
2024
+ *
2025
+ * @param params - Order parameters (marketAppId, position, price, quantity, isBuying)
2026
+ * @returns The created escrow app ID and transaction info
2027
+ */
2028
+ async createLimitOrder(params) {
2029
+ return createLimitOrder(this.config, params);
2030
+ }
2031
+ /**
2032
+ * Creates a market order with automatic matching.
2033
+ *
2034
+ * Fetches the live orderbook, finds the best counterparty orders within your
2035
+ * slippage tolerance, then creates the order and proposes matches in a single
2036
+ * atomic transaction group.
2037
+ *
2038
+ * @param params - Order parameters (marketAppId, position, price, quantity, isBuying, slippage)
2039
+ * @returns The created escrow app ID, matched quantity, and transaction info
2040
+ */
2041
+ async createMarketOrder(params) {
2042
+ return createMarketOrder(this.config, params);
2043
+ }
2044
+ /**
2045
+ * Cancels an open order by deleting its escrow app.
2046
+ *
2047
+ * Returns the escrowed funds (USDC or outcome tokens) to the order owner,
2048
+ * and reclaims the ALGO minimum balance used by the escrow app.
2049
+ *
2050
+ * @param params - Cancel parameters (marketAppId, escrowAppId, orderOwner)
2051
+ * @returns Whether the cancellation succeeded
2052
+ */
2053
+ async cancelOrder(params) {
2054
+ return cancelOrder(this.config, params);
2055
+ }
2056
+ /**
2057
+ * Proposes a match between an existing maker order and a new taker order.
2058
+ *
2059
+ * Use this for advanced matching scenarios where you want to explicitly
2060
+ * specify which orders to match against.
2061
+ *
2062
+ * @param params - Match parameters (marketAppId, makerEscrowAppId, makerAddress, quantityMatched)
2063
+ * @returns Whether the match succeeded
2064
+ */
2065
+ async proposeMatch(params) {
2066
+ return proposeMatch(this.config, params);
2067
+ }
2068
+ // ============================================
2069
+ // Positions
2070
+ // ============================================
2071
+ /**
2072
+ * Splits USDC into equal amounts of YES and NO outcome tokens.
2073
+ *
2074
+ * For example, splitting 1 USDC gives you 1 YES token + 1 NO token.
2075
+ * Together they're always worth $1.00 — you can trade them independently.
2076
+ *
2077
+ * @param params - Split parameters (marketAppId, amount in microunits)
2078
+ * @returns Transaction result
2079
+ */
2080
+ async splitShares(params) {
2081
+ return splitShares(this.config, params);
2082
+ }
2083
+ /**
2084
+ * Merges equal amounts of YES and NO tokens back into USDC.
2085
+ *
2086
+ * The inverse of split. 1 YES + 1 NO = 1 USDC, always.
2087
+ *
2088
+ * @param params - Merge parameters (marketAppId, amount in microunits)
2089
+ * @returns Transaction result
2090
+ */
2091
+ async mergeShares(params) {
2092
+ return mergeShares(this.config, params);
2093
+ }
2094
+ /**
2095
+ * Claims USDC from a resolved market by redeeming outcome tokens.
2096
+ *
2097
+ * - Winning tokens: redeemed 1:1 for USDC
2098
+ * - Voided market: redeemed at half value
2099
+ * - Losing tokens: burned (no USDC returned)
2100
+ *
2101
+ * @param params - Claim parameters (marketAppId, assetId, optional amount)
2102
+ * @returns Transaction result
2103
+ */
2104
+ async claim(params) {
2105
+ return claim(this.config, params);
2106
+ }
2107
+ /**
2108
+ * Gets all token positions for a wallet across all markets.
2109
+ *
2110
+ * Reads on-chain account info and maps ASA holdings to markets.
2111
+ * Returns raw token balances (YES/NO amounts per market).
2112
+ *
2113
+ * @param walletAddress - Optional wallet (defaults to activeAddress)
2114
+ * @returns Array of positions with market app IDs and token balances
2115
+ */
2116
+ async getPositions(walletAddress) {
2117
+ return getPositions(this.config, walletAddress);
2118
+ }
2119
+ // ============================================
2120
+ // Orderbook
2121
+ // ============================================
2122
+ /**
2123
+ * Fetches the full on-chain orderbook for a market.
2124
+ *
2125
+ * Reads all escrow apps created by the market contract, decodes their
2126
+ * global state, and organizes into yes/no bids and asks.
2127
+ * Only includes limit orders (slippage = 0) with unfilled quantity.
2128
+ *
2129
+ * @param marketAppId - The market app ID
2130
+ * @returns Orderbook with yes and no sides, each having bids and asks
2131
+ */
2132
+ async getOrderbook(marketAppId) {
2133
+ return getOrderbook(this.config, marketAppId);
2134
+ }
2135
+ /**
2136
+ * Gets open orders for a specific wallet on a market.
2137
+ *
2138
+ * @param marketAppId - The market app ID
2139
+ * @param walletAddress - Optional wallet (defaults to activeAddress)
2140
+ * @returns Array of open orders
2141
+ */
2142
+ async getOpenOrders(marketAppId, walletAddress) {
2143
+ return getOpenOrders(this.config, marketAppId, walletAddress);
2144
+ }
2145
+ // ============================================
2146
+ // Markets
2147
+ // ============================================
2148
+ /**
2149
+ * Fetches all live, tradeable markets from the Alpha API.
2150
+ *
2151
+ * Automatically paginates to retrieve all markets.
2152
+ *
2153
+ * @returns Array of live markets
2154
+ */
2155
+ async getMarkets() {
2156
+ return getMarkets(this.config);
2157
+ }
2158
+ /**
2159
+ * Fetches a single market by its ID.
2160
+ *
2161
+ * @param marketId - The market ID
2162
+ * @returns The market data, or null if not found
2163
+ */
2164
+ async getMarket(marketId) {
2165
+ return getMarket(this.config, marketId);
2166
+ }
2167
+ };
2168
+
2169
+ exports.AlphaClient = AlphaClient;
2170
+ exports.calculateFee = calculateFee;
2171
+ exports.calculateFeeFromTotal = calculateFeeFromTotal;
2172
+ exports.calculateMatchingOrders = calculateMatchingOrders;
2173
+ exports.checkAssetOptIn = checkAssetOptIn;
2174
+ exports.decodeGlobalState = decodeGlobalState;
2175
+ exports.getEscrowGlobalState = getEscrowGlobalState;
2176
+ exports.getMarketGlobalState = getMarketGlobalState;
2177
+ //# sourceMappingURL=index.cjs.map
2178
+ //# sourceMappingURL=index.cjs.map