arc200-client 1.0.1 → 1.0.3
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.d.mts +1141 -423
- package/dist/index.d.ts +1141 -423
- package/dist/index.js +1145 -481
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1147 -468
- package/dist/index.mjs.map +1 -1
- package/package.json +16 -13
package/dist/index.mjs
CHANGED
|
@@ -1,298 +1,311 @@
|
|
|
1
|
-
// contracts/
|
|
2
|
-
import
|
|
3
|
-
|
|
1
|
+
// contracts/artifacts/Arc200Client.ts
|
|
2
|
+
import {
|
|
3
|
+
getArc56ReturnValue,
|
|
4
|
+
getABIStructFromABITuple
|
|
5
|
+
} from "@algorandfoundation/algokit-utils/types/app-arc56";
|
|
6
|
+
import {
|
|
7
|
+
AppClient as _AppClient
|
|
8
|
+
} from "@algorandfoundation/algokit-utils/types/app-client";
|
|
9
|
+
import {
|
|
10
|
+
AppFactory as _AppFactory
|
|
11
|
+
} from "@algorandfoundation/algokit-utils/types/app-factory";
|
|
4
12
|
var APP_SPEC = {
|
|
5
|
-
"
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
13
|
+
name: "Arc200",
|
|
14
|
+
structs: {
|
|
15
|
+
ApprovalStruct: [
|
|
16
|
+
{ name: "approvalAmount", type: "uint256" },
|
|
17
|
+
{ name: "owner", type: "address" },
|
|
18
|
+
{ name: "spender", type: "address" }
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
methods: [
|
|
22
|
+
{
|
|
23
|
+
name: "bootstrap",
|
|
24
|
+
args: [
|
|
25
|
+
{ type: "byte[]", name: "name" },
|
|
26
|
+
{ type: "byte[]", name: "symbol" },
|
|
27
|
+
{ type: "uint8", name: "decimals" },
|
|
28
|
+
{ type: "uint256", name: "totalSupply" }
|
|
29
|
+
],
|
|
30
|
+
returns: { type: "bool" },
|
|
31
|
+
actions: { create: [], call: ["NoOp"] },
|
|
32
|
+
readonly: false,
|
|
33
|
+
events: [
|
|
34
|
+
{
|
|
35
|
+
name: "arc200_Transfer",
|
|
36
|
+
args: [
|
|
37
|
+
{ type: "address", name: "from" },
|
|
38
|
+
{ type: "address", name: "to" },
|
|
39
|
+
{ type: "uint256", name: "value" }
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
recommendations: {}
|
|
10
44
|
},
|
|
11
|
-
|
|
12
|
-
"
|
|
13
|
-
|
|
14
|
-
}
|
|
45
|
+
{
|
|
46
|
+
name: "arc200_name",
|
|
47
|
+
args: [],
|
|
48
|
+
returns: { type: "byte[32]", desc: "The name of the token" },
|
|
49
|
+
actions: { create: [], call: ["NoOp"] },
|
|
50
|
+
readonly: true,
|
|
51
|
+
desc: "Returns the name of the token",
|
|
52
|
+
events: [],
|
|
53
|
+
recommendations: {}
|
|
15
54
|
},
|
|
16
|
-
|
|
17
|
-
"
|
|
18
|
-
|
|
19
|
-
}
|
|
55
|
+
{
|
|
56
|
+
name: "arc200_symbol",
|
|
57
|
+
args: [],
|
|
58
|
+
returns: { type: "byte[8]", desc: "The symbol of the token" },
|
|
59
|
+
actions: { create: [], call: ["NoOp"] },
|
|
60
|
+
readonly: true,
|
|
61
|
+
desc: "Returns the symbol of the token",
|
|
62
|
+
events: [],
|
|
63
|
+
recommendations: {}
|
|
20
64
|
},
|
|
21
|
-
|
|
22
|
-
"
|
|
23
|
-
|
|
24
|
-
}
|
|
65
|
+
{
|
|
66
|
+
name: "arc200_decimals",
|
|
67
|
+
args: [],
|
|
68
|
+
returns: { type: "uint8", desc: "The decimals of the token" },
|
|
69
|
+
actions: { create: [], call: ["NoOp"] },
|
|
70
|
+
readonly: true,
|
|
71
|
+
desc: "Returns the decimals of the token",
|
|
72
|
+
events: [],
|
|
73
|
+
recommendations: {}
|
|
25
74
|
},
|
|
26
|
-
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
}
|
|
75
|
+
{
|
|
76
|
+
name: "arc200_totalSupply",
|
|
77
|
+
args: [],
|
|
78
|
+
returns: { type: "uint256", desc: "The total supply of the token" },
|
|
79
|
+
actions: { create: [], call: ["NoOp"] },
|
|
80
|
+
readonly: true,
|
|
81
|
+
desc: "Returns the total supply of the token",
|
|
82
|
+
events: [],
|
|
83
|
+
recommendations: {}
|
|
30
84
|
},
|
|
31
|
-
|
|
32
|
-
"
|
|
33
|
-
|
|
34
|
-
}
|
|
85
|
+
{
|
|
86
|
+
name: "arc200_balanceOf",
|
|
87
|
+
args: [{ type: "address", name: "owner", desc: "The address of the owner of the token" }],
|
|
88
|
+
returns: { type: "uint256", desc: "The current balance of the holder of the token" },
|
|
89
|
+
actions: { create: [], call: ["NoOp"] },
|
|
90
|
+
readonly: true,
|
|
91
|
+
desc: "Returns the current balance of the owner of the token",
|
|
92
|
+
events: [],
|
|
93
|
+
recommendations: {}
|
|
35
94
|
},
|
|
36
|
-
|
|
37
|
-
"
|
|
38
|
-
|
|
39
|
-
|
|
95
|
+
{
|
|
96
|
+
name: "arc200_transfer",
|
|
97
|
+
args: [
|
|
98
|
+
{ type: "address", name: "to", desc: "The destination of the transfer" },
|
|
99
|
+
{ type: "uint256", name: "value", desc: "Amount of tokens to transfer" }
|
|
100
|
+
],
|
|
101
|
+
returns: { type: "bool", desc: "Success" },
|
|
102
|
+
actions: { create: [], call: ["NoOp"] },
|
|
103
|
+
readonly: false,
|
|
104
|
+
desc: "Transfers tokens",
|
|
105
|
+
events: [
|
|
106
|
+
{
|
|
107
|
+
name: "arc200_Transfer",
|
|
108
|
+
args: [
|
|
109
|
+
{ type: "address", name: "from" },
|
|
110
|
+
{ type: "address", name: "to" },
|
|
111
|
+
{ type: "uint256", name: "value" }
|
|
112
|
+
]
|
|
113
|
+
}
|
|
114
|
+
],
|
|
115
|
+
recommendations: {}
|
|
40
116
|
},
|
|
41
|
-
|
|
42
|
-
"
|
|
43
|
-
|
|
44
|
-
|
|
117
|
+
{
|
|
118
|
+
name: "arc200_transferFrom",
|
|
119
|
+
args: [
|
|
120
|
+
{ type: "address", name: "from", desc: "The source of the transfer" },
|
|
121
|
+
{ type: "address", name: "to", desc: "The destination of the transfer" },
|
|
122
|
+
{ type: "uint256", name: "value", desc: "Amount of tokens to transfer" }
|
|
123
|
+
],
|
|
124
|
+
returns: { type: "bool", desc: "Success" },
|
|
125
|
+
actions: { create: [], call: ["NoOp"] },
|
|
126
|
+
readonly: false,
|
|
127
|
+
desc: "Transfers tokens from source to destination as approved spender",
|
|
128
|
+
events: [
|
|
129
|
+
{
|
|
130
|
+
name: "arc200_Approval",
|
|
131
|
+
args: [
|
|
132
|
+
{ type: "address", name: "owner" },
|
|
133
|
+
{ type: "address", name: "spender" },
|
|
134
|
+
{ type: "uint256", name: "value" }
|
|
135
|
+
]
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
name: "arc200_Transfer",
|
|
139
|
+
args: [
|
|
140
|
+
{ type: "address", name: "from" },
|
|
141
|
+
{ type: "address", name: "to" },
|
|
142
|
+
{ type: "uint256", name: "value" }
|
|
143
|
+
]
|
|
144
|
+
}
|
|
145
|
+
],
|
|
146
|
+
recommendations: {}
|
|
45
147
|
},
|
|
46
|
-
|
|
47
|
-
"
|
|
48
|
-
|
|
49
|
-
|
|
148
|
+
{
|
|
149
|
+
name: "arc200_approve",
|
|
150
|
+
args: [
|
|
151
|
+
{ type: "address", name: "spender", desc: "Who is allowed to take tokens on owner's behalf" },
|
|
152
|
+
{ type: "uint256", name: "value", desc: "Amount of tokens to be taken by spender" }
|
|
153
|
+
],
|
|
154
|
+
returns: { type: "bool", desc: "Success" },
|
|
155
|
+
actions: { create: [], call: ["NoOp"] },
|
|
156
|
+
readonly: false,
|
|
157
|
+
desc: "Approve spender for a token",
|
|
158
|
+
events: [
|
|
159
|
+
{
|
|
160
|
+
name: "arc200_Approval",
|
|
161
|
+
args: [
|
|
162
|
+
{ type: "address", name: "owner" },
|
|
163
|
+
{ type: "address", name: "spender" },
|
|
164
|
+
{ type: "uint256", name: "value" }
|
|
165
|
+
]
|
|
166
|
+
}
|
|
167
|
+
],
|
|
168
|
+
recommendations: {}
|
|
50
169
|
},
|
|
51
|
-
|
|
52
|
-
"
|
|
53
|
-
|
|
54
|
-
|
|
170
|
+
{
|
|
171
|
+
name: "arc200_allowance",
|
|
172
|
+
args: [
|
|
173
|
+
{ type: "address", name: "owner", desc: "Owner's account" },
|
|
174
|
+
{ type: "address", name: "spender", desc: "Who is allowed to take tokens on owner's behalf" }
|
|
175
|
+
],
|
|
176
|
+
returns: { type: "uint256", desc: "The remaining allowance" },
|
|
177
|
+
actions: { create: [], call: ["NoOp"] },
|
|
178
|
+
readonly: true,
|
|
179
|
+
desc: "Returns the current allowance of the spender of the tokens of the owner",
|
|
180
|
+
events: [],
|
|
181
|
+
recommendations: {}
|
|
55
182
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
183
|
+
],
|
|
184
|
+
arcs: [22, 28],
|
|
185
|
+
desc: "Smart Contract Token Base Interface",
|
|
186
|
+
networks: {},
|
|
187
|
+
state: {
|
|
188
|
+
schema: { global: { ints: 0, bytes: 4 }, local: { ints: 0, bytes: 0 } },
|
|
189
|
+
keys: {
|
|
190
|
+
global: {
|
|
191
|
+
name: { keyType: "AVMString", valueType: "byte[]", key: "bg==", desc: "Name of the asset. Max 32 bytes" },
|
|
192
|
+
symbol: { keyType: "AVMString", valueType: "byte[]", key: "cw==", desc: "Symbol of the asset. Max 8 bytes" },
|
|
193
|
+
decimals: {
|
|
194
|
+
keyType: "AVMString",
|
|
195
|
+
valueType: "uint8",
|
|
196
|
+
key: "ZA==",
|
|
197
|
+
desc: "Decimals of the asset. Recommended is 6 decimal places."
|
|
198
|
+
},
|
|
199
|
+
totalSupply: { keyType: "AVMString", valueType: "uint256", key: "dA==", desc: "Minted supply" }
|
|
200
|
+
},
|
|
201
|
+
local: {},
|
|
202
|
+
box: {}
|
|
68
203
|
},
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
204
|
+
maps: {
|
|
205
|
+
global: {},
|
|
206
|
+
local: {},
|
|
207
|
+
box: {
|
|
208
|
+
balances: { keyType: "address", valueType: "uint256", prefix: "Yg==" },
|
|
209
|
+
approvals: { keyType: "byte[32]", valueType: "ApprovalStruct", prefix: "YQ==" }
|
|
210
|
+
}
|
|
72
211
|
}
|
|
73
212
|
},
|
|
74
|
-
"
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
213
|
+
bareActions: { create: ["NoOp"], call: [] },
|
|
214
|
+
sourceInfo: {
|
|
215
|
+
approval: {
|
|
216
|
+
sourceInfo: [
|
|
217
|
+
{ pc: [593, 710], errorMessage: "Box must have value" },
|
|
218
|
+
{ pc: [711], errorMessage: "Index access is out of bounds" },
|
|
219
|
+
{ pc: [614], errorMessage: "Insufficient balance at the sender account" },
|
|
220
|
+
{ pc: [371], errorMessage: "Name of the asset must be longer or equal to 1 character" },
|
|
221
|
+
{ pc: [374], errorMessage: "Name of the asset must be shorter or equal to 32 characters" },
|
|
222
|
+
{ pc: [145, 167, 189, 214, 236, 255, 271, 287, 303, 319], errorMessage: "OnCompletion is not NoOp" },
|
|
223
|
+
{ pc: [363], errorMessage: "Only deployer of this smart contract can call bootstrap method" },
|
|
224
|
+
{ pc: [382], errorMessage: "Symbol of the asset must be longer or equal to 1 character" },
|
|
225
|
+
{ pc: [385], errorMessage: "Symbol of the asset must be shorter or equal to 8 characters" },
|
|
226
|
+
{ pc: [392], errorMessage: "This method can be called only once" },
|
|
227
|
+
{ pc: [352], errorMessage: "can only call when creating" },
|
|
228
|
+
{ pc: [148, 170, 192, 217, 239, 258, 274, 290, 306, 322], errorMessage: "can only call when not creating" },
|
|
229
|
+
{ pc: [443, 458, 473, 478], errorMessage: "check GlobalState exists" },
|
|
230
|
+
{ pc: [518], errorMessage: "insufficient approval" },
|
|
231
|
+
{ pc: [451, 466, 679], errorMessage: "invalid size" },
|
|
232
|
+
{ pc: [526, 632], errorMessage: "overflow" }
|
|
233
|
+
],
|
|
234
|
+
pcOffsetMethod: "none"
|
|
78
235
|
},
|
|
79
|
-
"
|
|
80
|
-
"num_byte_slices": 0,
|
|
81
|
-
"num_uints": 0
|
|
82
|
-
}
|
|
236
|
+
clear: { sourceInfo: [], pcOffsetMethod: "none" }
|
|
83
237
|
},
|
|
84
|
-
|
|
85
|
-
"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjg0LjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBhcmMyMDBfbmFtZSgpc3RyaW5nCiphYmlfcm91dGVfYXJjMjAwX25hbWU6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgYXJjMjAwX25hbWUoKXN0cmluZwoJY2FsbHN1YiBhcmMyMDBfbmFtZQoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmMyMDBfbmFtZSgpOiBzdHJpbmdbMzJdCi8vCi8vIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHRva2VuCi8vCi8vIEByZXR1cm5zIFRoZSBuYW1lIG9mIHRoZSB0b2tlbgphcmMyMDBfbmFtZToKCXByb3RvIDAgMQoKCS8vIGNvbnRyYWN0c1xhcmMyMDAuYWxnby50czoxNQoJLy8gcmV0dXJuICdBcmMyMDAnOwoJYnl0ZSAweDQxNzI2MzMyMzAzMCAvLyAiQXJjMjAwIgoJcmV0c3ViCgovLyBhcmMyMDBfc3ltYm9sKClzdHJpbmcKKmFiaV9yb3V0ZV9hcmMyMDBfc3ltYm9sOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIGFyYzIwMF9zeW1ib2woKXN0cmluZwoJY2FsbHN1YiBhcmMyMDBfc3ltYm9sCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzIwMF9zeW1ib2woKTogc3RyaW5nWzhdCi8vCi8vIFJldHVybnMgdGhlIHN5bWJvbCBvZiB0aGUgdG9rZW4KLy8KLy8gQHJldHVybnMgVGhlIHN5bWJvbCBvZiB0aGUgdG9rZW4KYXJjMjAwX3N5bWJvbDoKCXByb3RvIDAgMQoKCS8vIGNvbnRyYWN0c1xhcmMyMDAuYWxnby50czoyNQoJLy8gcmV0dXJuICdBcmMyMDAnOwoJYnl0ZSAweDQxNzI2MzMyMzAzMCAvLyAiQXJjMjAwIgoJcmV0c3ViCgovLyBhcmMyMDBfZGVjaW1hbHMoKXVpbnQ4CiphYmlfcm91dGVfYXJjMjAwX2RlY2ltYWxzOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIGFyYzIwMF9kZWNpbWFscygpdWludDgKCWNhbGxzdWIgYXJjMjAwX2RlY2ltYWxzCglpdG9iCglkdXAKCWJpdGxlbgoJaW50IDgKCTw9Cglhc3NlcnQKCWV4dHJhY3QgNyAxCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjMjAwX2RlY2ltYWxzKCk6IHVpbnQ4Ci8vCi8vIFJldHVybnMgdGhlIGRlY2ltYWxzIG9mIHRoZSB0b2tlbgovLwovLyBAcmV0dXJucyBUaGUgZGVjaW1hbHMgb2YgdGhlIHRva2VuCmFyYzIwMF9kZWNpbWFsczoKCXByb3RvIDAgMQoKCS8vIGNvbnRyYWN0c1xhcmMyMDAuYWxnby50czozNQoJLy8gcmV0dXJuIDYgYXMgdWludDg7CglpbnQgNgoJcmV0c3ViCgovLyBhcmMyMDBfdG90YWxTdXBwbHkoKXVpbnQyNTYKKmFiaV9yb3V0ZV9hcmMyMDBfdG90YWxTdXBwbHk6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgYXJjMjAwX3RvdGFsU3VwcGx5KCl1aW50MjU2CgljYWxsc3ViIGFyYzIwMF90b3RhbFN1cHBseQoJZHVwCgliaXRsZW4KCWludCAyNTYKCTw9Cglhc3NlcnQKCWJ5dGUgMHhGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCgliJgoJZHVwCglsZW4KCWR1cAoJaW50IDMyCgktCglzd2FwCglzdWJzdHJpbmczCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjMjAwX3RvdGFsU3VwcGx5KCk6IHVpbnQyNTYKLy8KLy8gUmV0dXJucyB0aGUgdG90YWwgc3VwcGx5IG9mIHRoZSB0b2tlbgovLwovLyBAcmV0dXJucyBUaGUgdG90YWwgc3VwcGx5IG9mIHRoZSB0b2tlbgphcmMyMDBfdG90YWxTdXBwbHk6Cglwcm90byAwIDEKCgkvLyBjb250cmFjdHNcYXJjMjAwLmFsZ28udHM6NDUKCS8vIHJldHVybiAxXzAwMF8wMDBfMDAwXzAwMF8wMDAgYXMgdWludDI1NjsKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOGQ3ZWE0YzY4MDAwCglyZXRzdWIKCi8vIGFyYzIwMF9iYWxhbmNlT2YoYWRkcmVzcyl1aW50MjU2CiphYmlfcm91dGVfYXJjMjAwX2JhbGFuY2VPZjoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gb3duZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzIwMF9iYWxhbmNlT2YoYWRkcmVzcyl1aW50MjU2CgljYWxsc3ViIGFyYzIwMF9iYWxhbmNlT2YKCWR1cAoJYml0bGVuCglpbnQgMjU2Cgk8PQoJYXNzZXJ0CglieXRlIDB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRgoJYiYKCWR1cAoJbGVuCglkdXAKCWludCAzMgoJLQoJc3dhcAoJc3Vic3RyaW5nMwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzIwMF9iYWxhbmNlT2Yob3duZXI6IEFkZHJlc3MpOiB1aW50MjU2Ci8vCi8vIFJldHVybnMgdGhlIGN1cnJlbnQgYmFsYW5jZSBvZiB0aGUgb3duZXIgb2YgdGhlIHRva2VuCi8vCi8vIEBwYXJhbSBvd25lciBUaGUgYWRkcmVzcyBvZiB0aGUgb3duZXIgb2YgdGhlIHRva2VuCi8vIEByZXR1cm5zIFRoZSBjdXJyZW50IGJhbGFuY2Ugb2YgdGhlIGhvbGRlciBvZiB0aGUgdG9rZW4KYXJjMjAwX2JhbGFuY2VPZjoKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0c1xhcmMyMDAuYWxnby50czo1NgoJLy8gcmV0dXJuIDAgYXMgdWludDI1NjsKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCglyZXRzdWIKCi8vIGFyYzIwMF90cmFuc2ZlcihhZGRyZXNzLHVpbnQyNTYpYm9vbAoqYWJpX3JvdXRlX2FyYzIwMF90cmFuc2ZlcjoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gdmFsdWU6IHVpbnQyNTYKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyB0bzogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjMjAwX3RyYW5zZmVyKGFkZHJlc3MsdWludDI1Nilib29sCgljYWxsc3ViIGFyYzIwMF90cmFuc2ZlcgoJYnl0ZSAweDAwCglpbnQgMAoJdW5jb3ZlciAyCglzZXRiaXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmMyMDBfdHJhbnNmZXIodG86IEFkZHJlc3MsIHZhbHVlOiB1aW50MjU2KTogYm9vbGVhbgovLwovLyBUcmFuc2ZlcnMgdG9rZW5zCi8vCi8vIEBwYXJhbSB0byBUaGUgZGVzdGluYXRpb24gb2YgdGhlIHRyYW5zZmVyCi8vIEBwYXJhbSB2YWx1ZSBBbW91bnQgb2YgdG9rZW5zIHRvIHRyYW5zZmVyCi8vIEByZXR1cm5zIFN1Y2Nlc3MKYXJjMjAwX3RyYW5zZmVyOgoJcHJvdG8gMiAxCgoJLy8gY29udHJhY3RzXGFyYzIwMC5hbGdvLnRzOjY3CgkvLyByZXR1cm4gZmFsc2U7CglpbnQgMAoJcmV0c3ViCgovLyBhcmMyMDBfdHJhbnNmZXJGcm9tKGFkZHJlc3MsYWRkcmVzcyx1aW50MjU2KWJvb2wKKmFiaV9yb3V0ZV9hcmMyMDBfdHJhbnNmZXJGcm9tOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyB2YWx1ZTogdWludDI1NgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIHRvOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gZnJvbTogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjMjAwX3RyYW5zZmVyRnJvbShhZGRyZXNzLGFkZHJlc3MsdWludDI1Nilib29sCgljYWxsc3ViIGFyYzIwMF90cmFuc2ZlckZyb20KCWJ5dGUgMHgwMAoJaW50IDAKCXVuY292ZXIgMgoJc2V0Yml0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjMjAwX3RyYW5zZmVyRnJvbShmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzcywgdmFsdWU6IHVpbnQyNTYpOiBib29sZWFuCi8vCi8vIFRyYW5zZmVycyB0b2tlbnMgZnJvbSBzb3VyY2UgdG8gZGVzdGluYXRpb24gYXMgYXBwcm92ZWQgc3BlbmRlcgovLwovLyBAcGFyYW0gZnJvbSBUaGUgc291cmNlIG9mIHRoZSB0cmFuc2ZlcgovLyBAcGFyYW0gdG8gVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSB0cmFuc2ZlcgovLyBAcGFyYW0gdmFsdWUgQW1vdW50IG9mIHRva2VucyB0byB0cmFuc2ZlcgovLyBAcmV0dXJucyBTdWNjZXNzCmFyYzIwMF90cmFuc2ZlckZyb206Cglwcm90byAzIDEKCgkvLyBjb250cmFjdHNcYXJjMjAwLmFsZ28udHM6NzkKCS8vIHJldHVybiBmYWxzZTsKCWludCAwCglyZXRzdWIKCi8vIGFyYzIwMF9hcHByb3ZlKGFkZHJlc3MsdWludDI1Nilib29sCiphYmlfcm91dGVfYXJjMjAwX2FwcHJvdmU6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHZhbHVlOiB1aW50MjU2Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gc3BlbmRlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjMjAwX2FwcHJvdmUoYWRkcmVzcyx1aW50MjU2KWJvb2wKCWNhbGxzdWIgYXJjMjAwX2FwcHJvdmUKCWJ5dGUgMHgwMAoJaW50IDAKCXVuY292ZXIgMgoJc2V0Yml0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjMjAwX2FwcHJvdmUoc3BlbmRlcjogQWRkcmVzcywgdmFsdWU6IHVpbnQyNTYpOiBib29sZWFuCi8vCi8vIEFwcHJvdmUgc3BlbmRlciBmb3IgYSB0b2tlbgovLwovLyBAcGFyYW0gc3BlbmRlciBXaG8gaXMgYWxsb3dlZCB0byB0YWtlIHRva2VucyBvbiBvd25lcidzIGJlaGFsZgovLyBAcGFyYW0gdmFsdWUgQW1vdW50IG9mIHRva2VucyB0byBiZSB0YWtlbiBieSBzcGVuZGVyCi8vIEByZXR1cm5zIFN1Y2Nlc3MKYXJjMjAwX2FwcHJvdmU6Cglwcm90byAyIDEKCgkvLyBjb250cmFjdHNcYXJjMjAwLmFsZ28udHM6OTAKCS8vIHJldHVybiBmYWxzZTsKCWludCAwCglyZXRzdWIKCi8vIGFyYzIwMF9hbGxvd2FuY2UoYWRkcmVzcyxhZGRyZXNzKXVpbnQyNTYKKmFiaV9yb3V0ZV9hcmMyMDBfYWxsb3dhbmNlOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBzcGVuZGVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gb3duZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzIwMF9hbGxvd2FuY2UoYWRkcmVzcyxhZGRyZXNzKXVpbnQyNTYKCWNhbGxzdWIgYXJjMjAwX2FsbG93YW5jZQoJZHVwCgliaXRsZW4KCWludCAyNTYKCTw9Cglhc3NlcnQKCWJ5dGUgMHhGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCgliJgoJZHVwCglsZW4KCWR1cAoJaW50IDMyCgktCglzd2FwCglzdWJzdHJpbmczCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjMjAwX2FsbG93YW5jZShvd25lcjogQWRkcmVzcywgc3BlbmRlcjogQWRkcmVzcyk6IHVpbnQyNTYKLy8KLy8gUmV0dXJucyB0aGUgY3VycmVudCBhbGxvd2FuY2Ugb2YgdGhlIHNwZW5kZXIgb2YgdGhlIHRva2VucyBvZiB0aGUgb3duZXIKLy8KLy8gQHBhcmFtIG93bmVyIE93bmVyJ3MgYWNjb3VudAovLyBAcGFyYW0gc3BlbmRlciBXaG8gaXMgYWxsb3dlZCB0byB0YWtlIHRva2VucyBvbiBvd25lcidzIGJlaGFsZgovLyBAcmV0dXJucyBUaGUgcmVtYWluaW5nIGFsbG93YW5jZQphcmMyMDBfYWxsb3dhbmNlOgoJcHJvdG8gMiAxCgoJLy8gY29udHJhY3RzXGFyYzIwMC5hbGdvLnRzOjEwMgoJLy8gcmV0dXJuIDAgYXMgdWludDI1NjsKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCglyZXRzdWIKCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CglpbnQgMQoJcmV0dXJuCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJhcmMyMDBfbmFtZSgpc3RyaW5nIgoJbWV0aG9kICJhcmMyMDBfc3ltYm9sKClzdHJpbmciCgltZXRob2QgImFyYzIwMF9kZWNpbWFscygpdWludDgiCgltZXRob2QgImFyYzIwMF90b3RhbFN1cHBseSgpdWludDI1NiIKCW1ldGhvZCAiYXJjMjAwX2JhbGFuY2VPZihhZGRyZXNzKXVpbnQyNTYiCgltZXRob2QgImFyYzIwMF90cmFuc2ZlcihhZGRyZXNzLHVpbnQyNTYpYm9vbCIKCW1ldGhvZCAiYXJjMjAwX3RyYW5zZmVyRnJvbShhZGRyZXNzLGFkZHJlc3MsdWludDI1Nilib29sIgoJbWV0aG9kICJhcmMyMDBfYXBwcm92ZShhZGRyZXNzLHVpbnQyNTYpYm9vbCIKCW1ldGhvZCAiYXJjMjAwX2FsbG93YW5jZShhZGRyZXNzLGFkZHJlc3MpdWludDI1NiIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYXJjMjAwX25hbWUgKmFiaV9yb3V0ZV9hcmMyMDBfc3ltYm9sICphYmlfcm91dGVfYXJjMjAwX2RlY2ltYWxzICphYmlfcm91dGVfYXJjMjAwX3RvdGFsU3VwcGx5ICphYmlfcm91dGVfYXJjMjAwX2JhbGFuY2VPZiAqYWJpX3JvdXRlX2FyYzIwMF90cmFuc2ZlciAqYWJpX3JvdXRlX2FyYzIwMF90cmFuc2ZlckZyb20gKmFiaV9yb3V0ZV9hcmMyMDBfYXBwcm92ZSAqYWJpX3JvdXRlX2FyYzIwMF9hbGxvd2FuY2UKCWVycg==",
|
|
86
|
-
|
|
238
|
+
source: {
|
|
239
|
+
approval: "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAzMiAwIDgKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAiYiIgInQiIDB4ODAgMHg3OTgzYzM1YyAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo0NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzIwMCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AxNQogICAgcHVzaGJ5dGVzcyAweDk3NTM4MmUyIDB4NjU3ZDEzZWMgMHhiNmFlMWEyNSAweDg0ZWMxM2Q1IDB4ZWM5OTYwNDEgMHg4MmU1NzNjNCAweGRhNzAyNWI5IDB4NGE5NjhmOGYgMHhiNTQyMjEyNSAweGJiYjMxOWYzIC8vIG1ldGhvZCAiYm9vdHN0cmFwKGJ5dGVbXSxieXRlW10sdWludDgsdWludDI1Nilib29sIiwgbWV0aG9kICJhcmMyMDBfbmFtZSgpYnl0ZVszMl0iLCBtZXRob2QgImFyYzIwMF9zeW1ib2woKWJ5dGVbOF0iLCBtZXRob2QgImFyYzIwMF9kZWNpbWFscygpdWludDgiLCBtZXRob2QgImFyYzIwMF90b3RhbFN1cHBseSgpdWludDI1NiIsIG1ldGhvZCAiYXJjMjAwX2JhbGFuY2VPZihhZGRyZXNzKXVpbnQyNTYiLCBtZXRob2QgImFyYzIwMF90cmFuc2ZlcihhZGRyZXNzLHVpbnQyNTYpYm9vbCIsIG1ldGhvZCAiYXJjMjAwX3RyYW5zZmVyRnJvbShhZGRyZXNzLGFkZHJlc3MsdWludDI1Nilib29sIiwgbWV0aG9kICJhcmMyMDBfYXBwcm92ZShhZGRyZXNzLHVpbnQyNTYpYm9vbCIsIG1ldGhvZCAiYXJjMjAwX2FsbG93YW5jZShhZGRyZXNzLGFkZHJlc3MpdWludDI1NiIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fYm9vdHN0cmFwX3JvdXRlQDMgbWFpbl9hcmMyMDBfbmFtZV9yb3V0ZUA0IG1haW5fYXJjMjAwX3N5bWJvbF9yb3V0ZUA1IG1haW5fYXJjMjAwX2RlY2ltYWxzX3JvdXRlQDYgbWFpbl9hcmMyMDBfdG90YWxTdXBwbHlfcm91dGVANyBtYWluX2FyYzIwMF9iYWxhbmNlT2Zfcm91dGVAOCBtYWluX2FyYzIwMF90cmFuc2Zlcl9yb3V0ZUA5IG1haW5fYXJjMjAwX3RyYW5zZmVyRnJvbV9yb3V0ZUAxMCBtYWluX2FyYzIwMF9hcHByb3ZlX3JvdXRlQDExIG1haW5fYXJjMjAwX2FsbG93YW5jZV9yb3V0ZUAxMgoKbWFpbl9hZnRlcl9pZl9lbHNlQDE5OgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjQ0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjMjAwIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18yIC8vIDAKICAgIHJldHVybgoKbWFpbl9hcmMyMDBfYWxsb3dhbmNlX3JvdXRlQDEyOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE4NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjQ0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjMjAwIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE4NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgYXJjMjAwX2FsbG93YW5jZQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9hcmMyMDBfYXBwcm92ZV9yb3V0ZUAxMToKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxNzQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo0NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzIwMCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxNzQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFyYzIwMF9hcHByb3ZlCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FyYzIwMF90cmFuc2ZlckZyb21fcm91dGVAMTA6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTU3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NDQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmMyMDAgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTU3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBhcmMyMDBfdHJhbnNmZXJGcm9tCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FyYzIwMF90cmFuc2Zlcl9yb3V0ZUA5OgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE0NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjQ0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjMjAwIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE0NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYXJjMjAwX3RyYW5zZmVyCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FyYzIwMF9iYWxhbmNlT2Zfcm91dGVAODoKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxMzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo0NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzIwMCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxMzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGFyYzIwMF9iYWxhbmNlT2YKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYXJjMjAwX3RvdGFsU3VwcGx5X3JvdXRlQDc6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTIxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGFyYzIwMF90b3RhbFN1cHBseQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9hcmMyMDBfZGVjaW1hbHNfcm91dGVANjoKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxMTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYXJjMjAwX2RlY2ltYWxzCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FyYzIwMF9zeW1ib2xfcm91dGVANToKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxMDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYXJjMjAwX3N5bWJvbAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9hcmMyMDBfbmFtZV9yb3V0ZUA0OgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjkxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGFyYzIwMF9uYW1lCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2Jvb3RzdHJhcF9yb3V0ZUAzOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjY1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NDQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmMyMDAgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGJvb3RzdHJhcAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAMTU6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NDQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmMyMDAgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDE5CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo6QXJjMjAwLmJvb3RzdHJhcChuYW1lOiBieXRlcywgc3ltYm9sOiBieXRlcywgZGVjaW1hbHM6IGJ5dGVzLCB0b3RhbFN1cHBseTogYnl0ZXMpIC0+IGJ5dGVzOgpib290c3RyYXA6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NjUtNjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgYm9vdHN0cmFwKG5hbWU6IER5bmFtaWNCeXRlcywgc3ltYm9sOiBEeW5hbWljQnl0ZXMsIGRlY2ltYWxzOiBVaW50TjgsIHRvdGFsU3VwcGx5OiBVaW50TjI1Nik6IEJvb2wgewogICAgcHJvdG8gNCAxCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NjcKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSBHbG9iYWwuY3JlYXRvckFkZHJlc3MsICdPbmx5IGRlcGxveWVyIG9mIHRoaXMgc21hcnQgY29udHJhY3QgY2FuIGNhbGwgYm9vdHN0cmFwIG1ldGhvZCcpOwogICAgdHhuIFNlbmRlcgogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgZGVwbG95ZXIgb2YgdGhpcyBzbWFydCBjb250cmFjdCBjYW4gY2FsbCBib290c3RyYXAgbWV0aG9kCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NjgKICAgIC8vIGFzc2VydChuYW1lLm5hdGl2ZS5sZW5ndGggPiAwLCAnTmFtZSBvZiB0aGUgYXNzZXQgbXVzdCBiZSBsb25nZXIgb3IgZXF1YWwgdG8gMSBjaGFyYWN0ZXInKTsKICAgIGZyYW1lX2RpZyAtNAogICAgZXh0cmFjdCAyIDAKICAgIGxlbgogICAgZHVwCiAgICBhc3NlcnQgLy8gTmFtZSBvZiB0aGUgYXNzZXQgbXVzdCBiZSBsb25nZXIgb3IgZXF1YWwgdG8gMSBjaGFyYWN0ZXIKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo2OQogICAgLy8gYXNzZXJ0KG5hbWUubmF0aXZlLmxlbmd0aCA8PSAzMiwgJ05hbWUgb2YgdGhlIGFzc2V0IG11c3QgYmUgc2hvcnRlciBvciBlcXVhbCB0byAzMiBjaGFyYWN0ZXJzJyk7CiAgICBpbnRjXzEgLy8gMzIKICAgIDw9CiAgICBhc3NlcnQgLy8gTmFtZSBvZiB0aGUgYXNzZXQgbXVzdCBiZSBzaG9ydGVyIG9yIGVxdWFsIHRvIDMyIGNoYXJhY3RlcnMKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo3MAogICAgLy8gYXNzZXJ0KHN5bWJvbC5uYXRpdmUubGVuZ3RoID4gMCwgJ1N5bWJvbCBvZiB0aGUgYXNzZXQgbXVzdCBiZSBsb25nZXIgb3IgZXF1YWwgdG8gMSBjaGFyYWN0ZXInKTsKICAgIGZyYW1lX2RpZyAtMwogICAgZXh0cmFjdCAyIDAKICAgIGxlbgogICAgZHVwCiAgICBhc3NlcnQgLy8gU3ltYm9sIG9mIHRoZSBhc3NldCBtdXN0IGJlIGxvbmdlciBvciBlcXVhbCB0byAxIGNoYXJhY3RlcgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjcxCiAgICAvLyBhc3NlcnQoc3ltYm9sLm5hdGl2ZS5sZW5ndGggPD0gOCwgJ1N5bWJvbCBvZiB0aGUgYXNzZXQgbXVzdCBiZSBzaG9ydGVyIG9yIGVxdWFsIHRvIDggY2hhcmFjdGVycycpOwogICAgaW50Y18zIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gU3ltYm9sIG9mIHRoZSBhc3NldCBtdXN0IGJlIHNob3J0ZXIgb3IgZXF1YWwgdG8gOCBjaGFyYWN0ZXJzCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NjAKICAgIC8vIHB1YmxpYyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPFVpbnROMjU2Pih7IGtleTogJ3QnIH0pOwogICAgaW50Y18yIC8vIDAKICAgIGJ5dGVjXzIgLy8gInQiCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NzIKICAgIC8vIGFzc2VydCghdGhpcy50b3RhbFN1cHBseS5oYXNWYWx1ZSwgJ1RoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgb25seSBvbmNlJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gVGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCBvbmx5IG9uY2UKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo0OAogICAgLy8gcHVibGljIG5hbWUgPSBHbG9iYWxTdGF0ZTxEeW5hbWljQnl0ZXM+KHsga2V5OiAnbicgfSk7CiAgICBwdXNoYnl0ZXMgIm4iCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NzQKICAgIC8vIHRoaXMubmFtZS52YWx1ZSA9IG5hbWU7CiAgICBmcmFtZV9kaWcgLTQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NTIKICAgIC8vIHB1YmxpYyBzeW1ib2wgPSBHbG9iYWxTdGF0ZTxEeW5hbWljQnl0ZXM+KHsga2V5OiAncycgfSk7CiAgICBwdXNoYnl0ZXMgInMiCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NzUKICAgIC8vIHRoaXMuc3ltYm9sLnZhbHVlID0gc3ltYm9sOwogICAgZnJhbWVfZGlnIC0zCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjYwCiAgICAvLyBwdWJsaWMgdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTxVaW50TjI1Nj4oeyBrZXk6ICd0JyB9KTsKICAgIGJ5dGVjXzIgLy8gInQiCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NzYKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgPSB0b3RhbFN1cHBseTsKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo1NgogICAgLy8gcHVibGljIGRlY2ltYWxzID0gR2xvYmFsU3RhdGU8VWludE44Pih7IGtleTogJ2QnIH0pOwogICAgcHVzaGJ5dGVzICJkIgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjc3CiAgICAvLyB0aGlzLmRlY2ltYWxzLnZhbHVlID0gZGVjaW1hbHM7CiAgICBmcmFtZV9kaWcgLTIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NzgKICAgIC8vIGNvbnN0IHNlbmRlciA9IG5ldyBBZGRyZXNzKFR4bi5zZW5kZXIpOwogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjYyCiAgICAvLyBwdWJsaWMgYmFsYW5jZXMgPSBCb3hNYXA8QWRkcmVzcywgVWludE4yNTY+KHsga2V5UHJlZml4OiAnYicgfSk7CiAgICBieXRlY18xIC8vICJiIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjgwCiAgICAvLyB0aGlzLmJhbGFuY2VzKHNlbmRlcikudmFsdWUgPSB0b3RhbFN1cHBseTsKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjgyCiAgICAvLyBlbWl0KG5ldyBhcmMyMDBfVHJhbnNmZXIoeyBmcm9tOiBuZXcgQWRkcmVzcyhHbG9iYWwuemVyb0FkZHJlc3MpLCB0bzogc2VuZGVyLCB2YWx1ZTogdG90YWxTdXBwbHkgfSkpOwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBieXRlYyA0IC8vIG1ldGhvZCAiYXJjMjAwX1RyYW5zZmVyKGFkZHJlc3MsYWRkcmVzcyx1aW50MjU2KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6ODMKICAgIC8vIHJldHVybiBuZXcgQm9vbCh0cnVlKTsKICAgIGJ5dGVjXzMgLy8gMHg4MAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjpBcmMyMDAuYXJjMjAwX25hbWUoKSAtPiBieXRlczoKYXJjMjAwX25hbWU6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NDgKICAgIC8vIHB1YmxpYyBuYW1lID0gR2xvYmFsU3RhdGU8RHluYW1pY0J5dGVzPih7IGtleTogJ24nIH0pOwogICAgaW50Y18yIC8vIDAKICAgIHB1c2hieXRlcyAibiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6OTMKICAgIC8vIHJldHVybiBuZXcgU3RhdGljQnl0ZXM8MzI+KHRoaXMubmFtZS52YWx1ZS5uYXRpdmUpOwogICAgZXh0cmFjdCAyIDAKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBzaXplCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6OkFyYzIwMC5hcmMyMDBfc3ltYm9sKCkgLT4gYnl0ZXM6CmFyYzIwMF9zeW1ib2w6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NTIKICAgIC8vIHB1YmxpYyBzeW1ib2wgPSBHbG9iYWxTdGF0ZTxEeW5hbWljQnl0ZXM+KHsga2V5OiAncycgfSk7CiAgICBpbnRjXzIgLy8gMAogICAgcHVzaGJ5dGVzICJzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxMDMKICAgIC8vIHJldHVybiBuZXcgU3RhdGljQnl0ZXM8OD4odGhpcy5zeW1ib2wudmFsdWUubmF0aXZlKTsKICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBzaXplCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6OkFyYzIwMC5hcmMyMDBfZGVjaW1hbHMoKSAtPiBieXRlczoKYXJjMjAwX2RlY2ltYWxzOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjU2CiAgICAvLyBwdWJsaWMgZGVjaW1hbHMgPSBHbG9iYWxTdGF0ZTxVaW50Tjg+KHsga2V5OiAnZCcgfSk7CiAgICBpbnRjXzIgLy8gMAogICAgcHVzaGJ5dGVzICJkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxMTMKICAgIC8vIHJldHVybiB0aGlzLmRlY2ltYWxzLnZhbHVlOwogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjpBcmMyMDAuYXJjMjAwX3RvdGFsU3VwcGx5KCkgLT4gYnl0ZXM6CmFyYzIwMF90b3RhbFN1cHBseToKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo2MAogICAgLy8gcHVibGljIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8VWludE4yNTY+KHsga2V5OiAndCcgfSk7CiAgICBpbnRjXzIgLy8gMAogICAgYnl0ZWNfMiAvLyAidCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTIzCiAgICAvLyByZXR1cm4gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo6QXJjMjAwLmFyYzIwMF9iYWxhbmNlT2Yob3duZXI6IGJ5dGVzKSAtPiBieXRlczoKYXJjMjAwX2JhbGFuY2VPZjoKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxMzItMTMzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGFyYzIwMF9iYWxhbmNlT2Yob3duZXI6IEFkZHJlc3MpOiBhcmM0LlVpbnROMjU2IHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjEzNAogICAgLy8gcmV0dXJuIHRoaXMuX2JhbGFuY2VPZihvd25lcik7CiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgX2JhbGFuY2VPZgogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjpBcmMyMDAuYXJjMjAwX3RyYW5zZmVyKHRvOiBieXRlcywgdmFsdWU6IGJ5dGVzKSAtPiBieXRlczoKYXJjMjAwX3RyYW5zZmVyOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE0NC0xNDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgYXJjMjAwX3RyYW5zZmVyKHRvOiBBZGRyZXNzLCB2YWx1ZTogYXJjNC5VaW50TjI1Nik6IGFyYzQuQm9vbCB7CiAgICBwcm90byAyIDEKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxNDYKICAgIC8vIHJldHVybiB0aGlzLl90cmFuc2ZlcihuZXcgQWRkcmVzcyhUeG4uc2VuZGVyKSwgdG8sIHZhbHVlKTsKICAgIHR4biBTZW5kZXIKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIF90cmFuc2ZlcgogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjpBcmMyMDAuYXJjMjAwX3RyYW5zZmVyRnJvbShmcm9tOiBieXRlcywgdG86IGJ5dGVzLCB2YWx1ZTogYnl0ZXMpIC0+IGJ5dGVzOgphcmMyMDBfdHJhbnNmZXJGcm9tOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE1Ny0xNTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgYXJjMjAwX3RyYW5zZmVyRnJvbShmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzcywgdmFsdWU6IGFyYzQuVWludE4yNTYpOiBhcmM0LkJvb2wgewogICAgcHJvdG8gMyAxCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTU5CiAgICAvLyBjb25zdCBzcGVuZGVyID0gbmV3IEFkZHJlc3MoVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTYwCiAgICAvLyBjb25zdCBzcGVuZGVyX2FsbG93YW5jZSA9IHRoaXMuX2FsbG93YW5jZShmcm9tLCBzcGVuZGVyKTsKICAgIGZyYW1lX2RpZyAtMwogICAgZGlnIDEKICAgIGNhbGxzdWIgX2FsbG93YW5jZQogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE2MQogICAgLy8gYXNzZXJ0KHNwZW5kZXJfYWxsb3dhbmNlLm5hdGl2ZSA+PSB2YWx1ZS5uYXRpdmUsICdpbnN1ZmZpY2llbnQgYXBwcm92YWwnKTsKICAgIGR1cAogICAgZnJhbWVfZGlnIC0xCiAgICBiPj0KICAgIGFzc2VydCAvLyBpbnN1ZmZpY2llbnQgYXBwcm92YWwKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxNjIKICAgIC8vIGNvbnN0IG5ld19zcGVuZGVyX2FsbG93YW5jZSA9IG5ldyBVaW50TjI1NihzcGVuZGVyX2FsbG93YW5jZS5uYXRpdmUgLSB2YWx1ZS5uYXRpdmUpOwogICAgZnJhbWVfZGlnIC0xCiAgICBiLQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAzMgogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDMyCiAgICBiemVybwogICAgYnwKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxNjMKICAgIC8vIHRoaXMuX2FwcHJvdmUoZnJvbSwgc3BlbmRlciwgbmV3X3NwZW5kZXJfYWxsb3dhbmNlKTsKICAgIGZyYW1lX2RpZyAtMwogICAgY292ZXIgMgogICAgY2FsbHN1YiBfYXBwcm92ZQogICAgcG9wCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTY0CiAgICAvLyByZXR1cm4gdGhpcy5fdHJhbnNmZXIoZnJvbSwgdG8sIHZhbHVlKTsKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgX3RyYW5zZmVyCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6OkFyYzIwMC5hcmMyMDBfYXBwcm92ZShzcGVuZGVyOiBieXRlcywgdmFsdWU6IGJ5dGVzKSAtPiBieXRlczoKYXJjMjAwX2FwcHJvdmU6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTc0LTE3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhcmMyMDBfYXBwcm92ZShzcGVuZGVyOiBBZGRyZXNzLCB2YWx1ZTogYXJjNC5VaW50TjI1Nik6IEJvb2wgewogICAgcHJvdG8gMiAxCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTc2CiAgICAvLyBjb25zdCBvd25lciA9IG5ldyBBZGRyZXNzKFR4bi5zZW5kZXIpOwogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE3NwogICAgLy8gcmV0dXJuIHRoaXMuX2FwcHJvdmUob3duZXIsIHNwZW5kZXIsIHZhbHVlKTsKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIF9hcHByb3ZlCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6OkFyYzIwMC5hcmMyMDBfYWxsb3dhbmNlKG93bmVyOiBieXRlcywgc3BlbmRlcjogYnl0ZXMpIC0+IGJ5dGVzOgphcmMyMDBfYWxsb3dhbmNlOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE4Ni0xODcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgYXJjMjAwX2FsbG93YW5jZShvd25lcjogQWRkcmVzcywgc3BlbmRlcjogQWRkcmVzcyk6IGFyYzQuVWludE4yNTYgewogICAgcHJvdG8gMiAxCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTg4CiAgICAvLyByZXR1cm4gdGhpcy5fYWxsb3dhbmNlKG93bmVyLCBzcGVuZGVyKTsKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIF9hbGxvd2FuY2UKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo6QXJjMjAwLl9iYWxhbmNlT2Yob3duZXI6IGJ5dGVzKSAtPiBieXRlczoKX2JhbGFuY2VPZjoKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxOTEKICAgIC8vIHByaXZhdGUgX2JhbGFuY2VPZihvd25lcjogQWRkcmVzcyk6IFVpbnROMjU2IHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjYyCiAgICAvLyBwdWJsaWMgYmFsYW5jZXMgPSBCb3hNYXA8QWRkcmVzcywgVWludE4yNTY+KHsga2V5UHJlZml4OiAnYicgfSk7CiAgICBieXRlY18xIC8vICJiIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGR1cAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE5MgogICAgLy8gaWYgKCF0aGlzLmJhbGFuY2VzKG93bmVyKS5leGlzdHMpIHJldHVybiBuZXcgVWludE4yNTYoMCk7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJueiBfYmFsYW5jZU9mX2FmdGVyX2lmX2Vsc2VAMgogICAgYnl0ZWMgNSAvLyAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKICAgIHN3YXAKICAgIHJldHN1YgoKX2JhbGFuY2VPZl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTkzCiAgICAvLyByZXR1cm4gdGhpcy5iYWxhbmNlcyhvd25lcikudmFsdWU7CiAgICBmcmFtZV9kaWcgMAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo6QXJjMjAwLl90cmFuc2ZlcihzZW5kZXI6IGJ5dGVzLCByZWNpcGllbnQ6IGJ5dGVzLCBhbW91bnQ6IGJ5dGVzKSAtPiBieXRlczoKX3RyYW5zZmVyOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE5NgogICAgLy8gcHJpdmF0ZSBfdHJhbnNmZXIoc2VuZGVyOiBBZGRyZXNzLCByZWNpcGllbnQ6IEFkZHJlc3MsIGFtb3VudDogVWludE4yNTYpOiBCb29sIHsKICAgIHByb3RvIDMgMQogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE5NwogICAgLy8gY29uc3Qgc2VuZGVyX2JhbGFuY2UgPSB0aGlzLl9iYWxhbmNlT2Yoc2VuZGVyKTsKICAgIGZyYW1lX2RpZyAtMwogICAgY2FsbHN1YiBfYmFsYW5jZU9mCiAgICBkdXAKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxOTgKICAgIC8vIGNvbnN0IHJlY2lwaWVudF9iYWxhbmNlID0gdGhpcy5fYmFsYW5jZU9mKHJlY2lwaWVudCk7CiAgICBmcmFtZV9kaWcgLTIKICAgIGNhbGxzdWIgX2JhbGFuY2VPZgogICAgc3dhcAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE5OQogICAgLy8gYXNzZXJ0KHNlbmRlcl9iYWxhbmNlLm5hdGl2ZSA+PSBhbW91bnQubmF0aXZlLCAnSW5zdWZmaWNpZW50IGJhbGFuY2UgYXQgdGhlIHNlbmRlciBhY2NvdW50Jyk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGI+PQogICAgYXNzZXJ0IC8vIEluc3VmZmljaWVudCBiYWxhbmNlIGF0IHRoZSBzZW5kZXIgYWNjb3VudAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjIwMQogICAgLy8gaWYgKHNlbmRlciAhPT0gcmVjaXBpZW50KSB7CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgIT0KICAgIGJ6IF90cmFuc2Zlcl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMDMKICAgIC8vIHRoaXMuYmFsYW5jZXMoc2VuZGVyKS52YWx1ZSA9IG5ldyBVaW50TjI1NihzZW5kZXJfYmFsYW5jZS5uYXRpdmUgLSBhbW91bnQubmF0aXZlKTsKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGItCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDMyCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gMzIKICAgIGJ6ZXJvCiAgICBifAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjYyCiAgICAvLyBwdWJsaWMgYmFsYW5jZXMgPSBCb3hNYXA8QWRkcmVzcywgVWludE4yNTY+KHsga2V5UHJlZml4OiAnYicgfSk7CiAgICBieXRlY18xIC8vICJiIgogICAgZnJhbWVfZGlnIC0zCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMDMKICAgIC8vIHRoaXMuYmFsYW5jZXMoc2VuZGVyKS52YWx1ZSA9IG5ldyBVaW50TjI1NihzZW5kZXJfYmFsYW5jZS5uYXRpdmUgLSBhbW91bnQubmF0aXZlKTsKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo2MgogICAgLy8gcHVibGljIGJhbGFuY2VzID0gQm94TWFwPEFkZHJlc3MsIFVpbnROMjU2Pih7IGtleVByZWZpeDogJ2InIH0pOwogICAgYnl0ZWNfMSAvLyAiYiIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MjA0CiAgICAvLyB0aGlzLmJhbGFuY2VzKHJlY2lwaWVudCkudmFsdWUgPSByZWNpcGllbnRfYmFsYW5jZTsKICAgIGZyYW1lX2RpZyAxCiAgICBib3hfcHV0CgpfdHJhbnNmZXJfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjIxMgogICAgLy8gZW1pdChuZXcgYXJjMjAwX1RyYW5zZmVyKHsgZnJvbTogc2VuZGVyLCB0bzogcmVjaXBpZW50LCB2YWx1ZTogYW1vdW50IH0pKTsKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBieXRlYyA0IC8vIG1ldGhvZCAiYXJjMjAwX1RyYW5zZmVyKGFkZHJlc3MsYWRkcmVzcyx1aW50MjU2KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MjEzCiAgICAvLyByZXR1cm4gbmV3IEJvb2wodHJ1ZSk7CiAgICBieXRlY18zIC8vIDB4ODAKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjpBcmMyMDAuX2FwcHJvdmFsS2V5KG93bmVyOiBieXRlcywgc3BlbmRlcjogYnl0ZXMpIC0+IGJ5dGVzOgpfYXBwcm92YWxLZXk6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MjE1CiAgICAvLyBwcml2YXRlIF9hcHByb3ZhbEtleShvd25lcjogQWRkcmVzcywgc3BlbmRlcjogQWRkcmVzcyk6IFN0YXRpY0J5dGVzPDMyPiB7CiAgICBwcm90byAyIDEKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMTYKICAgIC8vIHJldHVybiBuZXcgU3RhdGljQnl0ZXM8MzI+KG9wLnNoYTI1NihvcC5jb25jYXQob3duZXIuYnl0ZXMsIHNwZW5kZXIuYnl0ZXMpKSk7CiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBzaGEyNTYKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBzaXplCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6OkFyYzIwMC5fYWxsb3dhbmNlKG93bmVyOiBieXRlcywgc3BlbmRlcjogYnl0ZXMpIC0+IGJ5dGVzOgpfYWxsb3dhbmNlOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjIxOQogICAgLy8gcHJpdmF0ZSBfYWxsb3dhbmNlKG93bmVyOiBBZGRyZXNzLCBzcGVuZGVyOiBBZGRyZXNzKTogVWludE4yNTYgewogICAgcHJvdG8gMiAxCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MjIwCiAgICAvLyBjb25zdCBrZXkgPSB0aGlzLl9hcHByb3ZhbEtleShvd25lciwgc3BlbmRlcik7CiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBfYXBwcm92YWxLZXkKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo2NAogICAgLy8gcHVibGljIGFwcHJvdmFscyA9IEJveE1hcDxTdGF0aWNCeXRlczwzMj4sIEFwcHJvdmFsU3RydWN0Pih7IGtleVByZWZpeDogJ2EnIH0pOwogICAgcHVzaGJ5dGVzICJhIgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMjEKICAgIC8vIGlmICghdGhpcy5hcHByb3ZhbHMoa2V5KS5leGlzdHMpIHJldHVybiBuZXcgVWludE4yNTYoMCk7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJueiBfYWxsb3dhbmNlX2FmdGVyX2lmX2Vsc2VAMgogICAgYnl0ZWMgNSAvLyAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKICAgIHN3YXAKICAgIHJldHN1YgoKX2FsbG93YW5jZV9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MjIyCiAgICAvLyByZXR1cm4gdGhpcy5hcHByb3ZhbHMoa2V5KS52YWx1ZS5hcHByb3ZhbEFtb3VudDsKICAgIGZyYW1lX2RpZyAwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgZXh0cmFjdCAwIDMyIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgc3dhcAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjpBcmMyMDAuX2FwcHJvdmUob3duZXI6IGJ5dGVzLCBzcGVuZGVyOiBieXRlcywgYW1vdW50OiBieXRlcykgLT4gYnl0ZXM6Cl9hcHByb3ZlOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjIyNQogICAgLy8gcHJpdmF0ZSBfYXBwcm92ZShvd25lcjogQWRkcmVzcywgc3BlbmRlcjogQWRkcmVzcywgYW1vdW50OiBVaW50TjI1Nik6IEJvb2wgewogICAgcHJvdG8gMyAxCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MjI2CiAgICAvLyBjb25zdCBrZXkgPSB0aGlzLl9hcHByb3ZhbEtleShvd25lciwgc3BlbmRlcik7CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgY2FsbHN1YiBfYXBwcm92YWxLZXkKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMjctMjMxCiAgICAvLyBjb25zdCBhcHByb3ZhbEJveDogQXBwcm92YWxTdHJ1Y3QgPSBuZXcgQXBwcm92YWxTdHJ1Y3QoewogICAgLy8gICBhcHByb3ZhbEFtb3VudDogYW1vdW50LAogICAgLy8gICBvd25lcjogb3duZXIsCiAgICAvLyAgIHNwZW5kZXI6IHNwZW5kZXIsCiAgICAvLyB9KTsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIC0zCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NjQKICAgIC8vIHB1YmxpYyBhcHByb3ZhbHMgPSBCb3hNYXA8U3RhdGljQnl0ZXM8MzI+LCBBcHByb3ZhbFN0cnVjdD4oeyBrZXlQcmVmaXg6ICdhJyB9KTsKICAgIHB1c2hieXRlcyAiYSIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MjMyCiAgICAvLyB0aGlzLmFwcHJvdmFscyhrZXkpLnZhbHVlID0gYXBwcm92YWxCb3guY29weSgpOwogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjIzMwogICAgLy8gZW1pdChuZXcgYXJjMjAwX0FwcHJvdmFsKHsgb3duZXI6IG93bmVyLCBzcGVuZGVyOiBzcGVuZGVyLCB2YWx1ZTogYW1vdW50IH0pKTsKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxOTY5Zjg2NSAvLyBtZXRob2QgImFyYzIwMF9BcHByb3ZhbChhZGRyZXNzLGFkZHJlc3MsdWludDI1NikiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjIzNAogICAgLy8gcmV0dXJuIG5ldyBCb29sKHRydWUpOwogICAgYnl0ZWNfMyAvLyAweDgwCiAgICByZXRzdWIK",
|
|
240
|
+
clear: "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="
|
|
87
241
|
},
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
"
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
"
|
|
106
|
-
"
|
|
107
|
-
"
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
{
|
|
113
|
-
"name": "arc200_decimals",
|
|
114
|
-
"desc": "Returns the decimals of the token",
|
|
115
|
-
"readonly": true,
|
|
116
|
-
"args": [],
|
|
117
|
-
"returns": {
|
|
118
|
-
"type": "uint8",
|
|
119
|
-
"desc": "The decimals of the token"
|
|
120
|
-
}
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
"name": "arc200_totalSupply",
|
|
124
|
-
"desc": "Returns the total supply of the token",
|
|
125
|
-
"readonly": true,
|
|
126
|
-
"args": [],
|
|
127
|
-
"returns": {
|
|
128
|
-
"type": "uint256",
|
|
129
|
-
"desc": "The total supply of the token"
|
|
130
|
-
}
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
"name": "arc200_balanceOf",
|
|
134
|
-
"desc": "Returns the current balance of the owner of the token",
|
|
135
|
-
"readonly": true,
|
|
136
|
-
"args": [
|
|
137
|
-
{
|
|
138
|
-
"name": "owner",
|
|
139
|
-
"type": "address",
|
|
140
|
-
"desc": "The address of the owner of the token"
|
|
141
|
-
}
|
|
142
|
-
],
|
|
143
|
-
"returns": {
|
|
144
|
-
"type": "uint256",
|
|
145
|
-
"desc": "The current balance of the holder of the token"
|
|
146
|
-
}
|
|
147
|
-
},
|
|
148
|
-
{
|
|
149
|
-
"name": "arc200_transfer",
|
|
150
|
-
"desc": "Transfers tokens",
|
|
151
|
-
"args": [
|
|
152
|
-
{
|
|
153
|
-
"name": "to",
|
|
154
|
-
"type": "address",
|
|
155
|
-
"desc": "The destination of the transfer"
|
|
156
|
-
},
|
|
157
|
-
{
|
|
158
|
-
"name": "value",
|
|
159
|
-
"type": "uint256",
|
|
160
|
-
"desc": "Amount of tokens to transfer"
|
|
161
|
-
}
|
|
162
|
-
],
|
|
163
|
-
"returns": {
|
|
164
|
-
"type": "bool",
|
|
165
|
-
"desc": "Success"
|
|
166
|
-
}
|
|
167
|
-
},
|
|
168
|
-
{
|
|
169
|
-
"name": "arc200_transferFrom",
|
|
170
|
-
"desc": "Transfers tokens from source to destination as approved spender",
|
|
171
|
-
"args": [
|
|
172
|
-
{
|
|
173
|
-
"name": "from",
|
|
174
|
-
"type": "address",
|
|
175
|
-
"desc": "The source of the transfer"
|
|
176
|
-
},
|
|
177
|
-
{
|
|
178
|
-
"name": "to",
|
|
179
|
-
"type": "address",
|
|
180
|
-
"desc": "The destination of the transfer"
|
|
181
|
-
},
|
|
182
|
-
{
|
|
183
|
-
"name": "value",
|
|
184
|
-
"type": "uint256",
|
|
185
|
-
"desc": "Amount of tokens to transfer"
|
|
186
|
-
}
|
|
187
|
-
],
|
|
188
|
-
"returns": {
|
|
189
|
-
"type": "bool",
|
|
190
|
-
"desc": "Success"
|
|
191
|
-
}
|
|
192
|
-
},
|
|
193
|
-
{
|
|
194
|
-
"name": "arc200_approve",
|
|
195
|
-
"desc": "Approve spender for a token",
|
|
196
|
-
"args": [
|
|
197
|
-
{
|
|
198
|
-
"name": "spender",
|
|
199
|
-
"type": "address",
|
|
200
|
-
"desc": "Who is allowed to take tokens on owner's behalf"
|
|
201
|
-
},
|
|
202
|
-
{
|
|
203
|
-
"name": "value",
|
|
204
|
-
"type": "uint256",
|
|
205
|
-
"desc": "Amount of tokens to be taken by spender"
|
|
206
|
-
}
|
|
207
|
-
],
|
|
208
|
-
"returns": {
|
|
209
|
-
"type": "bool",
|
|
210
|
-
"desc": "Success"
|
|
211
|
-
}
|
|
212
|
-
},
|
|
213
|
-
{
|
|
214
|
-
"name": "arc200_allowance",
|
|
215
|
-
"desc": "Returns the current allowance of the spender of the tokens of the owner",
|
|
216
|
-
"readonly": true,
|
|
217
|
-
"args": [
|
|
218
|
-
{
|
|
219
|
-
"name": "owner",
|
|
220
|
-
"type": "address",
|
|
221
|
-
"desc": "Owner's account"
|
|
222
|
-
},
|
|
223
|
-
{
|
|
224
|
-
"name": "spender",
|
|
225
|
-
"type": "address",
|
|
226
|
-
"desc": "Who is allowed to take tokens on owner's behalf"
|
|
227
|
-
}
|
|
228
|
-
],
|
|
229
|
-
"returns": {
|
|
230
|
-
"type": "uint256",
|
|
231
|
-
"desc": "The remaining allowance"
|
|
232
|
-
}
|
|
233
|
-
},
|
|
234
|
-
{
|
|
235
|
-
"name": "createApplication",
|
|
236
|
-
"args": [],
|
|
237
|
-
"returns": {
|
|
238
|
-
"type": "void"
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
]
|
|
242
|
-
}
|
|
242
|
+
byteCode: {
|
|
243
|
+
approval: "CiAEASAACCYGBBUffHUBYgF0AYAEeYPDXCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEbQQEZggoEl1OC4gRlfRPsBLauGiUEhOwT1QTsmWBBBILlc8QE2nAluQRKlo+PBLVCISUEu7MZ8zYaAI4KALAAoACQAIAAcABdAEcALgAYAAIkQzEZFEQxGEQ2GgE2GgKIAZMoTFCwIkMxGRREMRhENhoBNhoCiAFwKExQsCJDMRkURDEYRDYaATYaAjYaA4gBKShMULAiQzEZFEQxGEQ2GgE2GgKIAQYoTFCwIkMxGRREMRhENhoBiADqKExQsCJDMRkURDEYRIgA1ShMULAiQzEZFEQxGESIAL4oTFCwIkMxGRREMRhEiACfKExQsCJDMRkURDEYRIgAgChMULAiQzEZFEQxGEQ2GgE2GgI2GgM2GgSIABEoTFCwIkMxGUD/LzEYFEQiQ4oEATEAMgkSRIv8VwIAFUlEIw5Ei/1XAgAVSUQlDkQkKmVFARREgAFui/xngAFzi/1nKov/Z4ABZIv+ZzEAKUsBUIv/vzIDTFCL/1AnBExQsCuJJIABbmVEVwIASRUjEkSJJIABc2VEVwIASRUlEkSJJIABZGVEiSQqZUSJigEBi/+IAFSJigIBMQCL/ov/iABfiYoDATEAi/1LAYgAp0mL/6dEi/+hSRUjDkQjr6uL/U4CiACzSIv9i/6L/4gAMYmKAgExAIv+i/+IAJyJigIBi/6L/4gAbomKAQEpi/9QSb1FAUAABCcFTImLAL5ETImKAwGL/Yj/4EmL/oj/2kyL/6dEi/2L/hNBABqLAIv/oUkVIw5EI6+rKYv9UEy/KYv+UIsBv4v9i/5Qi/9QJwRMULArjACJigIBi/6L/1ABSRUjEkSJigIBi/6L/4j/54ABYUxQSb1FAUAABCcFTImLAL5EVwAgTImKAwGL/Yv+iP/Ei/+L/VCL/lCAAWFPAlBMv4v9i/5Qi/9QgAQZafhlTFCwK4k=",
|
|
244
|
+
clear: "CoEBQw=="
|
|
245
|
+
},
|
|
246
|
+
compilerInfo: { compiler: "puya", compilerVersion: { major: 4, minor: 7, patch: 0 } },
|
|
247
|
+
events: [
|
|
248
|
+
{
|
|
249
|
+
name: "arc200_Transfer",
|
|
250
|
+
args: [
|
|
251
|
+
{ type: "address", name: "from" },
|
|
252
|
+
{ type: "address", name: "to" },
|
|
253
|
+
{ type: "uint256", name: "value" }
|
|
254
|
+
]
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
name: "arc200_Approval",
|
|
258
|
+
args: [
|
|
259
|
+
{ type: "address", name: "owner" },
|
|
260
|
+
{ type: "address", name: "spender" },
|
|
261
|
+
{ type: "uint256", name: "value" }
|
|
262
|
+
]
|
|
263
|
+
}
|
|
264
|
+
],
|
|
265
|
+
templateVariables: {}
|
|
243
266
|
};
|
|
244
|
-
var
|
|
267
|
+
var Arc200ParamsFactory = class {
|
|
245
268
|
/**
|
|
246
|
-
*
|
|
269
|
+
* Constructs a no op call for the bootstrap(byte[],byte[],uint8,uint256)bool ABI method
|
|
270
|
+
*
|
|
271
|
+
* @param params Parameters for the call
|
|
272
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
247
273
|
*/
|
|
248
|
-
static
|
|
274
|
+
static bootstrap(params) {
|
|
249
275
|
return {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
* @param args Any args for the contract call
|
|
254
|
-
* @param params Any additional parameters for the call
|
|
255
|
-
* @returns A TypedCallParams object for the call
|
|
256
|
-
*/
|
|
257
|
-
createApplication(args, params = {}) {
|
|
258
|
-
return {
|
|
259
|
-
method: "createApplication()void",
|
|
260
|
-
methodArgs: Array.isArray(args) ? args : [],
|
|
261
|
-
...params
|
|
262
|
-
};
|
|
263
|
-
}
|
|
276
|
+
...params,
|
|
277
|
+
method: "bootstrap(byte[],byte[],uint8,uint256)bool",
|
|
278
|
+
args: Array.isArray(params.args) ? params.args : [params.args.name, params.args.symbol, params.args.decimals, params.args.totalSupply]
|
|
264
279
|
};
|
|
265
280
|
}
|
|
266
281
|
/**
|
|
267
|
-
* Constructs a no op call for the arc200_name()
|
|
282
|
+
* Constructs a no op call for the arc200_name()byte[32] ABI method
|
|
268
283
|
*
|
|
269
284
|
* Returns the name of the token
|
|
270
285
|
*
|
|
271
|
-
* @param
|
|
272
|
-
* @
|
|
273
|
-
* @returns A TypedCallParams object for the call
|
|
286
|
+
* @param params Parameters for the call
|
|
287
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
274
288
|
*/
|
|
275
|
-
static arc200Name(
|
|
289
|
+
static arc200Name(params) {
|
|
276
290
|
return {
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
291
|
+
...params,
|
|
292
|
+
method: "arc200_name()byte[32]",
|
|
293
|
+
args: Array.isArray(params.args) ? params.args : []
|
|
280
294
|
};
|
|
281
295
|
}
|
|
282
296
|
/**
|
|
283
|
-
* Constructs a no op call for the arc200_symbol()
|
|
297
|
+
* Constructs a no op call for the arc200_symbol()byte[8] ABI method
|
|
284
298
|
*
|
|
285
299
|
* Returns the symbol of the token
|
|
286
300
|
*
|
|
287
|
-
* @param
|
|
288
|
-
* @
|
|
289
|
-
* @returns A TypedCallParams object for the call
|
|
301
|
+
* @param params Parameters for the call
|
|
302
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
290
303
|
*/
|
|
291
|
-
static arc200Symbol(
|
|
304
|
+
static arc200Symbol(params) {
|
|
292
305
|
return {
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
306
|
+
...params,
|
|
307
|
+
method: "arc200_symbol()byte[8]",
|
|
308
|
+
args: Array.isArray(params.args) ? params.args : []
|
|
296
309
|
};
|
|
297
310
|
}
|
|
298
311
|
/**
|
|
@@ -300,15 +313,14 @@ var Arc200CallFactory = class {
|
|
|
300
313
|
*
|
|
301
314
|
* Returns the decimals of the token
|
|
302
315
|
*
|
|
303
|
-
* @param
|
|
304
|
-
* @
|
|
305
|
-
* @returns A TypedCallParams object for the call
|
|
316
|
+
* @param params Parameters for the call
|
|
317
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
306
318
|
*/
|
|
307
|
-
static arc200Decimals(
|
|
319
|
+
static arc200Decimals(params) {
|
|
308
320
|
return {
|
|
321
|
+
...params,
|
|
309
322
|
method: "arc200_decimals()uint8",
|
|
310
|
-
|
|
311
|
-
...params
|
|
323
|
+
args: Array.isArray(params.args) ? params.args : []
|
|
312
324
|
};
|
|
313
325
|
}
|
|
314
326
|
/**
|
|
@@ -316,15 +328,14 @@ var Arc200CallFactory = class {
|
|
|
316
328
|
*
|
|
317
329
|
* Returns the total supply of the token
|
|
318
330
|
*
|
|
319
|
-
* @param
|
|
320
|
-
* @
|
|
321
|
-
* @returns A TypedCallParams object for the call
|
|
331
|
+
* @param params Parameters for the call
|
|
332
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
322
333
|
*/
|
|
323
|
-
static arc200TotalSupply(
|
|
334
|
+
static arc200TotalSupply(params) {
|
|
324
335
|
return {
|
|
336
|
+
...params,
|
|
325
337
|
method: "arc200_totalSupply()uint256",
|
|
326
|
-
|
|
327
|
-
...params
|
|
338
|
+
args: Array.isArray(params.args) ? params.args : []
|
|
328
339
|
};
|
|
329
340
|
}
|
|
330
341
|
/**
|
|
@@ -332,15 +343,14 @@ var Arc200CallFactory = class {
|
|
|
332
343
|
*
|
|
333
344
|
* Returns the current balance of the owner of the token
|
|
334
345
|
*
|
|
335
|
-
* @param
|
|
336
|
-
* @
|
|
337
|
-
* @returns A TypedCallParams object for the call
|
|
346
|
+
* @param params Parameters for the call
|
|
347
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
338
348
|
*/
|
|
339
|
-
static arc200BalanceOf(
|
|
349
|
+
static arc200BalanceOf(params) {
|
|
340
350
|
return {
|
|
351
|
+
...params,
|
|
341
352
|
method: "arc200_balanceOf(address)uint256",
|
|
342
|
-
|
|
343
|
-
...params
|
|
353
|
+
args: Array.isArray(params.args) ? params.args : [params.args.owner]
|
|
344
354
|
};
|
|
345
355
|
}
|
|
346
356
|
/**
|
|
@@ -348,15 +358,14 @@ var Arc200CallFactory = class {
|
|
|
348
358
|
*
|
|
349
359
|
* Transfers tokens
|
|
350
360
|
*
|
|
351
|
-
* @param
|
|
352
|
-
* @
|
|
353
|
-
* @returns A TypedCallParams object for the call
|
|
361
|
+
* @param params Parameters for the call
|
|
362
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
354
363
|
*/
|
|
355
|
-
static arc200Transfer(
|
|
364
|
+
static arc200Transfer(params) {
|
|
356
365
|
return {
|
|
366
|
+
...params,
|
|
357
367
|
method: "arc200_transfer(address,uint256)bool",
|
|
358
|
-
|
|
359
|
-
...params
|
|
368
|
+
args: Array.isArray(params.args) ? params.args : [params.args.to, params.args.value]
|
|
360
369
|
};
|
|
361
370
|
}
|
|
362
371
|
/**
|
|
@@ -364,15 +373,14 @@ var Arc200CallFactory = class {
|
|
|
364
373
|
*
|
|
365
374
|
* Transfers tokens from source to destination as approved spender
|
|
366
375
|
*
|
|
367
|
-
* @param
|
|
368
|
-
* @
|
|
369
|
-
* @returns A TypedCallParams object for the call
|
|
376
|
+
* @param params Parameters for the call
|
|
377
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
370
378
|
*/
|
|
371
|
-
static arc200TransferFrom(
|
|
379
|
+
static arc200TransferFrom(params) {
|
|
372
380
|
return {
|
|
381
|
+
...params,
|
|
373
382
|
method: "arc200_transferFrom(address,address,uint256)bool",
|
|
374
|
-
|
|
375
|
-
...params
|
|
383
|
+
args: Array.isArray(params.args) ? params.args : [params.args.from, params.args.to, params.args.value]
|
|
376
384
|
};
|
|
377
385
|
}
|
|
378
386
|
/**
|
|
@@ -380,15 +388,14 @@ var Arc200CallFactory = class {
|
|
|
380
388
|
*
|
|
381
389
|
* Approve spender for a token
|
|
382
390
|
*
|
|
383
|
-
* @param
|
|
384
|
-
* @
|
|
385
|
-
* @returns A TypedCallParams object for the call
|
|
391
|
+
* @param params Parameters for the call
|
|
392
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
386
393
|
*/
|
|
387
|
-
static arc200Approve(
|
|
394
|
+
static arc200Approve(params) {
|
|
388
395
|
return {
|
|
396
|
+
...params,
|
|
389
397
|
method: "arc200_approve(address,uint256)bool",
|
|
390
|
-
|
|
391
|
-
...params
|
|
398
|
+
args: Array.isArray(params.args) ? params.args : [params.args.spender, params.args.value]
|
|
392
399
|
};
|
|
393
400
|
}
|
|
394
401
|
/**
|
|
@@ -396,56 +403,121 @@ var Arc200CallFactory = class {
|
|
|
396
403
|
*
|
|
397
404
|
* Returns the current allowance of the spender of the tokens of the owner
|
|
398
405
|
*
|
|
399
|
-
* @param
|
|
400
|
-
* @
|
|
401
|
-
* @returns A TypedCallParams object for the call
|
|
406
|
+
* @param params Parameters for the call
|
|
407
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
402
408
|
*/
|
|
403
|
-
static arc200Allowance(
|
|
409
|
+
static arc200Allowance(params) {
|
|
404
410
|
return {
|
|
411
|
+
...params,
|
|
405
412
|
method: "arc200_allowance(address,address)uint256",
|
|
406
|
-
|
|
407
|
-
...params
|
|
413
|
+
args: Array.isArray(params.args) ? params.args : [params.args.owner, params.args.spender]
|
|
408
414
|
};
|
|
409
415
|
}
|
|
410
416
|
};
|
|
411
|
-
var
|
|
417
|
+
var Arc200Factory = class {
|
|
412
418
|
/**
|
|
413
|
-
* Creates a new instance of `
|
|
419
|
+
* Creates a new instance of `Arc200Factory`
|
|
414
420
|
*
|
|
415
|
-
* @param
|
|
416
|
-
* @param algod An algod client instance
|
|
421
|
+
* @param params The parameters to initialise the app factory with
|
|
417
422
|
*/
|
|
418
|
-
constructor(
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
423
|
+
constructor(params) {
|
|
424
|
+
/**
|
|
425
|
+
* Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.
|
|
426
|
+
*/
|
|
427
|
+
this.params = {
|
|
428
|
+
/**
|
|
429
|
+
* Gets available create methods
|
|
430
|
+
*/
|
|
431
|
+
create: {
|
|
432
|
+
/**
|
|
433
|
+
* Creates a new instance of the Arc200 smart contract using a bare call.
|
|
434
|
+
*
|
|
435
|
+
* @param params The params for the bare (raw) call
|
|
436
|
+
* @returns The params for a create call
|
|
437
|
+
*/
|
|
438
|
+
bare: (params) => {
|
|
439
|
+
return this.appFactory.params.bare.create(params);
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
};
|
|
443
|
+
/**
|
|
444
|
+
* Create transactions for the current app
|
|
445
|
+
*/
|
|
446
|
+
this.createTransaction = {
|
|
447
|
+
/**
|
|
448
|
+
* Gets available create methods
|
|
449
|
+
*/
|
|
450
|
+
create: {
|
|
451
|
+
/**
|
|
452
|
+
* Creates a new instance of the Arc200 smart contract using a bare call.
|
|
453
|
+
*
|
|
454
|
+
* @param params The params for the bare (raw) call
|
|
455
|
+
* @returns The transaction for a create call
|
|
456
|
+
*/
|
|
457
|
+
bare: (params) => {
|
|
458
|
+
return this.appFactory.createTransaction.bare.create(params);
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
};
|
|
462
|
+
/**
|
|
463
|
+
* Send calls to the current app
|
|
464
|
+
*/
|
|
465
|
+
this.send = {
|
|
466
|
+
/**
|
|
467
|
+
* Gets available create methods
|
|
468
|
+
*/
|
|
469
|
+
create: {
|
|
470
|
+
/**
|
|
471
|
+
* Creates a new instance of the Arc200 smart contract using a bare call.
|
|
472
|
+
*
|
|
473
|
+
* @param params The params for the bare (raw) call
|
|
474
|
+
* @returns The create result
|
|
475
|
+
*/
|
|
476
|
+
bare: async (params) => {
|
|
477
|
+
const result = await this.appFactory.send.bare.create(params);
|
|
478
|
+
return { result: result.result, appClient: new Arc200Client(result.appClient) };
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
};
|
|
482
|
+
this.appFactory = new _AppFactory({
|
|
483
|
+
...params,
|
|
484
|
+
appSpec: APP_SPEC
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
/** The name of the app (from the ARC-32 / ARC-56 app spec or override). */
|
|
488
|
+
get appName() {
|
|
489
|
+
return this.appFactory.appName;
|
|
490
|
+
}
|
|
491
|
+
/** The ARC-56 app spec being used */
|
|
492
|
+
get appSpec() {
|
|
493
|
+
return APP_SPEC;
|
|
494
|
+
}
|
|
495
|
+
/** A reference to the underlying `AlgorandClient` this app factory is using. */
|
|
496
|
+
get algorand() {
|
|
497
|
+
return this.appFactory.algorand;
|
|
425
498
|
}
|
|
426
499
|
/**
|
|
427
|
-
*
|
|
500
|
+
* Returns a new `AppClient` client for an app instance of the given ID.
|
|
428
501
|
*
|
|
429
|
-
*
|
|
430
|
-
*
|
|
431
|
-
* @
|
|
502
|
+
* Automatically populates appName, defaultSender and source maps from the factory
|
|
503
|
+
* if not specified in the params.
|
|
504
|
+
* @param params The parameters to create the app client
|
|
505
|
+
* @returns The `AppClient`
|
|
432
506
|
*/
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
throw result.return.decodeError;
|
|
436
|
-
}
|
|
437
|
-
const returnValue = result.return?.returnValue !== void 0 && returnValueFormatter !== void 0 ? returnValueFormatter(result.return.returnValue) : result.return?.returnValue;
|
|
438
|
-
return { ...result, return: returnValue };
|
|
507
|
+
getAppClientById(params) {
|
|
508
|
+
return new Arc200Client(this.appFactory.getAppClientById(params));
|
|
439
509
|
}
|
|
440
510
|
/**
|
|
441
|
-
*
|
|
511
|
+
* Returns a new `AppClient` client, resolving the app by creator address and name
|
|
512
|
+
* using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).
|
|
442
513
|
*
|
|
443
|
-
*
|
|
444
|
-
*
|
|
445
|
-
* @
|
|
514
|
+
* Automatically populates appName, defaultSender and source maps from the factory
|
|
515
|
+
* if not specified in the params.
|
|
516
|
+
* @param params The parameters to create the app client
|
|
517
|
+
* @returns The `AppClient`
|
|
446
518
|
*/
|
|
447
|
-
async
|
|
448
|
-
return
|
|
519
|
+
async getAppClientByCreatorAndName(params) {
|
|
520
|
+
return new Arc200Client(await this.appFactory.getAppClientByCreatorAndName(params));
|
|
449
521
|
}
|
|
450
522
|
/**
|
|
451
523
|
* Idempotently deploys the Arc200 smart contract.
|
|
@@ -453,227 +525,832 @@ var Arc200Client = class {
|
|
|
453
525
|
* @param params The arguments for the contract calls and any additional parameters for the call
|
|
454
526
|
* @returns The deployment result
|
|
455
527
|
*/
|
|
456
|
-
deploy(params = {}) {
|
|
457
|
-
const
|
|
458
|
-
|
|
459
|
-
...params,
|
|
460
|
-
createArgs,
|
|
461
|
-
createOnCompleteAction: createArgs?.onCompleteAction
|
|
528
|
+
async deploy(params = {}) {
|
|
529
|
+
const result = await this.appFactory.deploy({
|
|
530
|
+
...params
|
|
462
531
|
});
|
|
532
|
+
return { result: result.result, appClient: new Arc200Client(result.appClient) };
|
|
463
533
|
}
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
534
|
+
};
|
|
535
|
+
var Arc200Client = class _Arc200Client {
|
|
536
|
+
constructor(appClientOrParams) {
|
|
537
|
+
/**
|
|
538
|
+
* Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.
|
|
539
|
+
*/
|
|
540
|
+
this.params = {
|
|
541
|
+
/**
|
|
542
|
+
* Makes a clear_state call to an existing instance of the Arc200 smart contract.
|
|
543
|
+
*
|
|
544
|
+
* @param params The params for the bare (raw) call
|
|
545
|
+
* @returns The clearState result
|
|
546
|
+
*/
|
|
547
|
+
clearState: (params) => {
|
|
548
|
+
return this.appClient.params.bare.clearState(params);
|
|
549
|
+
},
|
|
550
|
+
/**
|
|
551
|
+
* Makes a call to the Arc200 smart contract using the `bootstrap(byte[],byte[],uint8,uint256)bool` ABI method.
|
|
552
|
+
*
|
|
553
|
+
* @param params The params for the smart contract call
|
|
554
|
+
* @returns The call params
|
|
555
|
+
*/
|
|
556
|
+
bootstrap: (params) => {
|
|
557
|
+
return this.appClient.params.call(Arc200ParamsFactory.bootstrap(params));
|
|
558
|
+
},
|
|
559
|
+
/**
|
|
560
|
+
* Makes a call to the Arc200 smart contract using the `arc200_name()byte[32]` ABI method.
|
|
561
|
+
*
|
|
562
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
563
|
+
*
|
|
564
|
+
* Returns the name of the token
|
|
565
|
+
*
|
|
566
|
+
* @param params The params for the smart contract call
|
|
567
|
+
* @returns The call params: The name of the token
|
|
568
|
+
*/
|
|
569
|
+
arc200Name: (params = { args: [] }) => {
|
|
570
|
+
return this.appClient.params.call(Arc200ParamsFactory.arc200Name(params));
|
|
571
|
+
},
|
|
572
|
+
/**
|
|
573
|
+
* Makes a call to the Arc200 smart contract using the `arc200_symbol()byte[8]` ABI method.
|
|
574
|
+
*
|
|
575
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
576
|
+
*
|
|
577
|
+
* Returns the symbol of the token
|
|
578
|
+
*
|
|
579
|
+
* @param params The params for the smart contract call
|
|
580
|
+
* @returns The call params: The symbol of the token
|
|
581
|
+
*/
|
|
582
|
+
arc200Symbol: (params = { args: [] }) => {
|
|
583
|
+
return this.appClient.params.call(Arc200ParamsFactory.arc200Symbol(params));
|
|
584
|
+
},
|
|
585
|
+
/**
|
|
586
|
+
* Makes a call to the Arc200 smart contract using the `arc200_decimals()uint8` ABI method.
|
|
587
|
+
*
|
|
588
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
589
|
+
*
|
|
590
|
+
* Returns the decimals of the token
|
|
591
|
+
*
|
|
592
|
+
* @param params The params for the smart contract call
|
|
593
|
+
* @returns The call params: The decimals of the token
|
|
594
|
+
*/
|
|
595
|
+
arc200Decimals: (params = { args: [] }) => {
|
|
596
|
+
return this.appClient.params.call(Arc200ParamsFactory.arc200Decimals(params));
|
|
597
|
+
},
|
|
598
|
+
/**
|
|
599
|
+
* Makes a call to the Arc200 smart contract using the `arc200_totalSupply()uint256` ABI method.
|
|
600
|
+
*
|
|
601
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
602
|
+
*
|
|
603
|
+
* Returns the total supply of the token
|
|
604
|
+
*
|
|
605
|
+
* @param params The params for the smart contract call
|
|
606
|
+
* @returns The call params: The total supply of the token
|
|
607
|
+
*/
|
|
608
|
+
arc200TotalSupply: (params = { args: [] }) => {
|
|
609
|
+
return this.appClient.params.call(Arc200ParamsFactory.arc200TotalSupply(params));
|
|
610
|
+
},
|
|
611
|
+
/**
|
|
612
|
+
* Makes a call to the Arc200 smart contract using the `arc200_balanceOf(address)uint256` ABI method.
|
|
613
|
+
*
|
|
614
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
615
|
+
*
|
|
616
|
+
* Returns the current balance of the owner of the token
|
|
617
|
+
*
|
|
618
|
+
* @param params The params for the smart contract call
|
|
619
|
+
* @returns The call params: The current balance of the holder of the token
|
|
620
|
+
*/
|
|
621
|
+
arc200BalanceOf: (params) => {
|
|
622
|
+
return this.appClient.params.call(Arc200ParamsFactory.arc200BalanceOf(params));
|
|
623
|
+
},
|
|
624
|
+
/**
|
|
625
|
+
* Makes a call to the Arc200 smart contract using the `arc200_transfer(address,uint256)bool` ABI method.
|
|
626
|
+
*
|
|
627
|
+
* Transfers tokens
|
|
628
|
+
*
|
|
629
|
+
* @param params The params for the smart contract call
|
|
630
|
+
* @returns The call params: Success
|
|
631
|
+
*/
|
|
632
|
+
arc200Transfer: (params) => {
|
|
633
|
+
return this.appClient.params.call(Arc200ParamsFactory.arc200Transfer(params));
|
|
634
|
+
},
|
|
635
|
+
/**
|
|
636
|
+
* Makes a call to the Arc200 smart contract using the `arc200_transferFrom(address,address,uint256)bool` ABI method.
|
|
637
|
+
*
|
|
638
|
+
* Transfers tokens from source to destination as approved spender
|
|
639
|
+
*
|
|
640
|
+
* @param params The params for the smart contract call
|
|
641
|
+
* @returns The call params: Success
|
|
642
|
+
*/
|
|
643
|
+
arc200TransferFrom: (params) => {
|
|
644
|
+
return this.appClient.params.call(Arc200ParamsFactory.arc200TransferFrom(params));
|
|
645
|
+
},
|
|
646
|
+
/**
|
|
647
|
+
* Makes a call to the Arc200 smart contract using the `arc200_approve(address,uint256)bool` ABI method.
|
|
648
|
+
*
|
|
649
|
+
* Approve spender for a token
|
|
650
|
+
*
|
|
651
|
+
* @param params The params for the smart contract call
|
|
652
|
+
* @returns The call params: Success
|
|
653
|
+
*/
|
|
654
|
+
arc200Approve: (params) => {
|
|
655
|
+
return this.appClient.params.call(Arc200ParamsFactory.arc200Approve(params));
|
|
656
|
+
},
|
|
657
|
+
/**
|
|
658
|
+
* Makes a call to the Arc200 smart contract using the `arc200_allowance(address,address)uint256` ABI method.
|
|
659
|
+
*
|
|
660
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
661
|
+
*
|
|
662
|
+
* Returns the current allowance of the spender of the tokens of the owner
|
|
663
|
+
*
|
|
664
|
+
* @param params The params for the smart contract call
|
|
665
|
+
* @returns The call params: The remaining allowance
|
|
666
|
+
*/
|
|
667
|
+
arc200Allowance: (params) => {
|
|
668
|
+
return this.appClient.params.call(Arc200ParamsFactory.arc200Allowance(params));
|
|
669
|
+
}
|
|
670
|
+
};
|
|
671
|
+
/**
|
|
672
|
+
* Create transactions for the current app
|
|
673
|
+
*/
|
|
674
|
+
this.createTransaction = {
|
|
675
|
+
/**
|
|
676
|
+
* Makes a clear_state call to an existing instance of the Arc200 smart contract.
|
|
677
|
+
*
|
|
678
|
+
* @param params The params for the bare (raw) call
|
|
679
|
+
* @returns The clearState result
|
|
680
|
+
*/
|
|
681
|
+
clearState: (params) => {
|
|
682
|
+
return this.appClient.createTransaction.bare.clearState(params);
|
|
683
|
+
},
|
|
684
|
+
/**
|
|
685
|
+
* Makes a call to the Arc200 smart contract using the `bootstrap(byte[],byte[],uint8,uint256)bool` ABI method.
|
|
686
|
+
*
|
|
687
|
+
* @param params The params for the smart contract call
|
|
688
|
+
* @returns The call transaction
|
|
689
|
+
*/
|
|
690
|
+
bootstrap: (params) => {
|
|
691
|
+
return this.appClient.createTransaction.call(Arc200ParamsFactory.bootstrap(params));
|
|
692
|
+
},
|
|
693
|
+
/**
|
|
694
|
+
* Makes a call to the Arc200 smart contract using the `arc200_name()byte[32]` ABI method.
|
|
695
|
+
*
|
|
696
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
697
|
+
*
|
|
698
|
+
* Returns the name of the token
|
|
699
|
+
*
|
|
700
|
+
* @param params The params for the smart contract call
|
|
701
|
+
* @returns The call transaction: The name of the token
|
|
702
|
+
*/
|
|
703
|
+
arc200Name: (params = { args: [] }) => {
|
|
704
|
+
return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200Name(params));
|
|
705
|
+
},
|
|
470
706
|
/**
|
|
471
|
-
*
|
|
707
|
+
* Makes a call to the Arc200 smart contract using the `arc200_symbol()byte[8]` ABI method.
|
|
708
|
+
*
|
|
709
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
710
|
+
*
|
|
711
|
+
* Returns the symbol of the token
|
|
472
712
|
*
|
|
473
|
-
* @param
|
|
474
|
-
* @
|
|
475
|
-
* @returns The create result
|
|
713
|
+
* @param params The params for the smart contract call
|
|
714
|
+
* @returns The call transaction: The symbol of the token
|
|
476
715
|
*/
|
|
477
|
-
|
|
478
|
-
return
|
|
716
|
+
arc200Symbol: (params = { args: [] }) => {
|
|
717
|
+
return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200Symbol(params));
|
|
718
|
+
},
|
|
719
|
+
/**
|
|
720
|
+
* Makes a call to the Arc200 smart contract using the `arc200_decimals()uint8` ABI method.
|
|
721
|
+
*
|
|
722
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
723
|
+
*
|
|
724
|
+
* Returns the decimals of the token
|
|
725
|
+
*
|
|
726
|
+
* @param params The params for the smart contract call
|
|
727
|
+
* @returns The call transaction: The decimals of the token
|
|
728
|
+
*/
|
|
729
|
+
arc200Decimals: (params = { args: [] }) => {
|
|
730
|
+
return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200Decimals(params));
|
|
731
|
+
},
|
|
732
|
+
/**
|
|
733
|
+
* Makes a call to the Arc200 smart contract using the `arc200_totalSupply()uint256` ABI method.
|
|
734
|
+
*
|
|
735
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
736
|
+
*
|
|
737
|
+
* Returns the total supply of the token
|
|
738
|
+
*
|
|
739
|
+
* @param params The params for the smart contract call
|
|
740
|
+
* @returns The call transaction: The total supply of the token
|
|
741
|
+
*/
|
|
742
|
+
arc200TotalSupply: (params = { args: [] }) => {
|
|
743
|
+
return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200TotalSupply(params));
|
|
744
|
+
},
|
|
745
|
+
/**
|
|
746
|
+
* Makes a call to the Arc200 smart contract using the `arc200_balanceOf(address)uint256` ABI method.
|
|
747
|
+
*
|
|
748
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
749
|
+
*
|
|
750
|
+
* Returns the current balance of the owner of the token
|
|
751
|
+
*
|
|
752
|
+
* @param params The params for the smart contract call
|
|
753
|
+
* @returns The call transaction: The current balance of the holder of the token
|
|
754
|
+
*/
|
|
755
|
+
arc200BalanceOf: (params) => {
|
|
756
|
+
return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200BalanceOf(params));
|
|
757
|
+
},
|
|
758
|
+
/**
|
|
759
|
+
* Makes a call to the Arc200 smart contract using the `arc200_transfer(address,uint256)bool` ABI method.
|
|
760
|
+
*
|
|
761
|
+
* Transfers tokens
|
|
762
|
+
*
|
|
763
|
+
* @param params The params for the smart contract call
|
|
764
|
+
* @returns The call transaction: Success
|
|
765
|
+
*/
|
|
766
|
+
arc200Transfer: (params) => {
|
|
767
|
+
return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200Transfer(params));
|
|
768
|
+
},
|
|
769
|
+
/**
|
|
770
|
+
* Makes a call to the Arc200 smart contract using the `arc200_transferFrom(address,address,uint256)bool` ABI method.
|
|
771
|
+
*
|
|
772
|
+
* Transfers tokens from source to destination as approved spender
|
|
773
|
+
*
|
|
774
|
+
* @param params The params for the smart contract call
|
|
775
|
+
* @returns The call transaction: Success
|
|
776
|
+
*/
|
|
777
|
+
arc200TransferFrom: (params) => {
|
|
778
|
+
return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200TransferFrom(params));
|
|
779
|
+
},
|
|
780
|
+
/**
|
|
781
|
+
* Makes a call to the Arc200 smart contract using the `arc200_approve(address,uint256)bool` ABI method.
|
|
782
|
+
*
|
|
783
|
+
* Approve spender for a token
|
|
784
|
+
*
|
|
785
|
+
* @param params The params for the smart contract call
|
|
786
|
+
* @returns The call transaction: Success
|
|
787
|
+
*/
|
|
788
|
+
arc200Approve: (params) => {
|
|
789
|
+
return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200Approve(params));
|
|
790
|
+
},
|
|
791
|
+
/**
|
|
792
|
+
* Makes a call to the Arc200 smart contract using the `arc200_allowance(address,address)uint256` ABI method.
|
|
793
|
+
*
|
|
794
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
795
|
+
*
|
|
796
|
+
* Returns the current allowance of the spender of the tokens of the owner
|
|
797
|
+
*
|
|
798
|
+
* @param params The params for the smart contract call
|
|
799
|
+
* @returns The call transaction: The remaining allowance
|
|
800
|
+
*/
|
|
801
|
+
arc200Allowance: (params) => {
|
|
802
|
+
return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200Allowance(params));
|
|
479
803
|
}
|
|
480
804
|
};
|
|
805
|
+
/**
|
|
806
|
+
* Send calls to the current app
|
|
807
|
+
*/
|
|
808
|
+
this.send = {
|
|
809
|
+
/**
|
|
810
|
+
* Makes a clear_state call to an existing instance of the Arc200 smart contract.
|
|
811
|
+
*
|
|
812
|
+
* @param params The params for the bare (raw) call
|
|
813
|
+
* @returns The clearState result
|
|
814
|
+
*/
|
|
815
|
+
clearState: (params) => {
|
|
816
|
+
return this.appClient.send.bare.clearState(params);
|
|
817
|
+
},
|
|
818
|
+
/**
|
|
819
|
+
* Makes a call to the Arc200 smart contract using the `bootstrap(byte[],byte[],uint8,uint256)bool` ABI method.
|
|
820
|
+
*
|
|
821
|
+
* @param params The params for the smart contract call
|
|
822
|
+
* @returns The call result
|
|
823
|
+
*/
|
|
824
|
+
bootstrap: async (params) => {
|
|
825
|
+
const result = await this.appClient.send.call(Arc200ParamsFactory.bootstrap(params));
|
|
826
|
+
return {
|
|
827
|
+
...result,
|
|
828
|
+
return: result.return
|
|
829
|
+
};
|
|
830
|
+
},
|
|
831
|
+
/**
|
|
832
|
+
* Makes a call to the Arc200 smart contract using the `arc200_name()byte[32]` ABI method.
|
|
833
|
+
*
|
|
834
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
835
|
+
*
|
|
836
|
+
* Returns the name of the token
|
|
837
|
+
*
|
|
838
|
+
* @param params The params for the smart contract call
|
|
839
|
+
* @returns The call result: The name of the token
|
|
840
|
+
*/
|
|
841
|
+
arc200Name: async (params = { args: [] }) => {
|
|
842
|
+
const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Name(params));
|
|
843
|
+
return { ...result, return: result.return };
|
|
844
|
+
},
|
|
845
|
+
/**
|
|
846
|
+
* Makes a call to the Arc200 smart contract using the `arc200_symbol()byte[8]` ABI method.
|
|
847
|
+
*
|
|
848
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
849
|
+
*
|
|
850
|
+
* Returns the symbol of the token
|
|
851
|
+
*
|
|
852
|
+
* @param params The params for the smart contract call
|
|
853
|
+
* @returns The call result: The symbol of the token
|
|
854
|
+
*/
|
|
855
|
+
arc200Symbol: async (params = { args: [] }) => {
|
|
856
|
+
const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Symbol(params));
|
|
857
|
+
return { ...result, return: result.return };
|
|
858
|
+
},
|
|
859
|
+
/**
|
|
860
|
+
* Makes a call to the Arc200 smart contract using the `arc200_decimals()uint8` ABI method.
|
|
861
|
+
*
|
|
862
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
863
|
+
*
|
|
864
|
+
* Returns the decimals of the token
|
|
865
|
+
*
|
|
866
|
+
* @param params The params for the smart contract call
|
|
867
|
+
* @returns The call result: The decimals of the token
|
|
868
|
+
*/
|
|
869
|
+
arc200Decimals: async (params = { args: [] }) => {
|
|
870
|
+
const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Decimals(params));
|
|
871
|
+
return { ...result, return: result.return };
|
|
872
|
+
},
|
|
873
|
+
/**
|
|
874
|
+
* Makes a call to the Arc200 smart contract using the `arc200_totalSupply()uint256` ABI method.
|
|
875
|
+
*
|
|
876
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
877
|
+
*
|
|
878
|
+
* Returns the total supply of the token
|
|
879
|
+
*
|
|
880
|
+
* @param params The params for the smart contract call
|
|
881
|
+
* @returns The call result: The total supply of the token
|
|
882
|
+
*/
|
|
883
|
+
arc200TotalSupply: async (params = { args: [] }) => {
|
|
884
|
+
const result = await this.appClient.send.call(Arc200ParamsFactory.arc200TotalSupply(params));
|
|
885
|
+
return {
|
|
886
|
+
...result,
|
|
887
|
+
return: result.return
|
|
888
|
+
};
|
|
889
|
+
},
|
|
890
|
+
/**
|
|
891
|
+
* Makes a call to the Arc200 smart contract using the `arc200_balanceOf(address)uint256` ABI method.
|
|
892
|
+
*
|
|
893
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
894
|
+
*
|
|
895
|
+
* Returns the current balance of the owner of the token
|
|
896
|
+
*
|
|
897
|
+
* @param params The params for the smart contract call
|
|
898
|
+
* @returns The call result: The current balance of the holder of the token
|
|
899
|
+
*/
|
|
900
|
+
arc200BalanceOf: async (params) => {
|
|
901
|
+
const result = await this.appClient.send.call(Arc200ParamsFactory.arc200BalanceOf(params));
|
|
902
|
+
return {
|
|
903
|
+
...result,
|
|
904
|
+
return: result.return
|
|
905
|
+
};
|
|
906
|
+
},
|
|
907
|
+
/**
|
|
908
|
+
* Makes a call to the Arc200 smart contract using the `arc200_transfer(address,uint256)bool` ABI method.
|
|
909
|
+
*
|
|
910
|
+
* Transfers tokens
|
|
911
|
+
*
|
|
912
|
+
* @param params The params for the smart contract call
|
|
913
|
+
* @returns The call result: Success
|
|
914
|
+
*/
|
|
915
|
+
arc200Transfer: async (params) => {
|
|
916
|
+
const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Transfer(params));
|
|
917
|
+
return {
|
|
918
|
+
...result,
|
|
919
|
+
return: result.return
|
|
920
|
+
};
|
|
921
|
+
},
|
|
922
|
+
/**
|
|
923
|
+
* Makes a call to the Arc200 smart contract using the `arc200_transferFrom(address,address,uint256)bool` ABI method.
|
|
924
|
+
*
|
|
925
|
+
* Transfers tokens from source to destination as approved spender
|
|
926
|
+
*
|
|
927
|
+
* @param params The params for the smart contract call
|
|
928
|
+
* @returns The call result: Success
|
|
929
|
+
*/
|
|
930
|
+
arc200TransferFrom: async (params) => {
|
|
931
|
+
const result = await this.appClient.send.call(Arc200ParamsFactory.arc200TransferFrom(params));
|
|
932
|
+
return {
|
|
933
|
+
...result,
|
|
934
|
+
return: result.return
|
|
935
|
+
};
|
|
936
|
+
},
|
|
937
|
+
/**
|
|
938
|
+
* Makes a call to the Arc200 smart contract using the `arc200_approve(address,uint256)bool` ABI method.
|
|
939
|
+
*
|
|
940
|
+
* Approve spender for a token
|
|
941
|
+
*
|
|
942
|
+
* @param params The params for the smart contract call
|
|
943
|
+
* @returns The call result: Success
|
|
944
|
+
*/
|
|
945
|
+
arc200Approve: async (params) => {
|
|
946
|
+
const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Approve(params));
|
|
947
|
+
return {
|
|
948
|
+
...result,
|
|
949
|
+
return: result.return
|
|
950
|
+
};
|
|
951
|
+
},
|
|
952
|
+
/**
|
|
953
|
+
* Makes a call to the Arc200 smart contract using the `arc200_allowance(address,address)uint256` ABI method.
|
|
954
|
+
*
|
|
955
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
956
|
+
*
|
|
957
|
+
* Returns the current allowance of the spender of the tokens of the owner
|
|
958
|
+
*
|
|
959
|
+
* @param params The params for the smart contract call
|
|
960
|
+
* @returns The call result: The remaining allowance
|
|
961
|
+
*/
|
|
962
|
+
arc200Allowance: async (params) => {
|
|
963
|
+
const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Allowance(params));
|
|
964
|
+
return {
|
|
965
|
+
...result,
|
|
966
|
+
return: result.return
|
|
967
|
+
};
|
|
968
|
+
}
|
|
969
|
+
};
|
|
970
|
+
/**
|
|
971
|
+
* Methods to access state for the current Arc200 app
|
|
972
|
+
*/
|
|
973
|
+
this.state = {
|
|
974
|
+
/**
|
|
975
|
+
* Methods to access global state for the current Arc200 app
|
|
976
|
+
*/
|
|
977
|
+
global: {
|
|
978
|
+
/**
|
|
979
|
+
* Get all current keyed values from global state
|
|
980
|
+
*/
|
|
981
|
+
getAll: async () => {
|
|
982
|
+
const result = await this.appClient.state.global.getAll();
|
|
983
|
+
return {
|
|
984
|
+
name: result.name,
|
|
985
|
+
symbol: result.symbol,
|
|
986
|
+
decimals: result.decimals,
|
|
987
|
+
totalSupply: result.totalSupply
|
|
988
|
+
};
|
|
989
|
+
},
|
|
990
|
+
/**
|
|
991
|
+
* Get the current value of the name key in global state
|
|
992
|
+
*/
|
|
993
|
+
name: async () => {
|
|
994
|
+
return await this.appClient.state.global.getValue("name");
|
|
995
|
+
},
|
|
996
|
+
/**
|
|
997
|
+
* Get the current value of the symbol key in global state
|
|
998
|
+
*/
|
|
999
|
+
symbol: async () => {
|
|
1000
|
+
return await this.appClient.state.global.getValue("symbol");
|
|
1001
|
+
},
|
|
1002
|
+
/**
|
|
1003
|
+
* Get the current value of the decimals key in global state
|
|
1004
|
+
*/
|
|
1005
|
+
decimals: async () => {
|
|
1006
|
+
return await this.appClient.state.global.getValue("decimals");
|
|
1007
|
+
},
|
|
1008
|
+
/**
|
|
1009
|
+
* Get the current value of the totalSupply key in global state
|
|
1010
|
+
*/
|
|
1011
|
+
totalSupply: async () => {
|
|
1012
|
+
return await this.appClient.state.global.getValue("totalSupply");
|
|
1013
|
+
}
|
|
1014
|
+
},
|
|
1015
|
+
/**
|
|
1016
|
+
* Methods to access box state for the current Arc200 app
|
|
1017
|
+
*/
|
|
1018
|
+
box: {
|
|
1019
|
+
/**
|
|
1020
|
+
* Get all current keyed values from box state
|
|
1021
|
+
*/
|
|
1022
|
+
getAll: async () => {
|
|
1023
|
+
const result = await this.appClient.state.box.getAll();
|
|
1024
|
+
return {};
|
|
1025
|
+
},
|
|
1026
|
+
/**
|
|
1027
|
+
* Get values from the balances map in box state
|
|
1028
|
+
*/
|
|
1029
|
+
balances: {
|
|
1030
|
+
/**
|
|
1031
|
+
* Get all current values of the balances map in box state
|
|
1032
|
+
*/
|
|
1033
|
+
getMap: async () => {
|
|
1034
|
+
return await this.appClient.state.box.getMap("balances");
|
|
1035
|
+
},
|
|
1036
|
+
/**
|
|
1037
|
+
* Get a current value of the balances map by key from box state
|
|
1038
|
+
*/
|
|
1039
|
+
value: async (key) => {
|
|
1040
|
+
return await this.appClient.state.box.getMapValue("balances", key);
|
|
1041
|
+
}
|
|
1042
|
+
},
|
|
1043
|
+
/**
|
|
1044
|
+
* Get values from the approvals map in box state
|
|
1045
|
+
*/
|
|
1046
|
+
approvals: {
|
|
1047
|
+
/**
|
|
1048
|
+
* Get all current values of the approvals map in box state
|
|
1049
|
+
*/
|
|
1050
|
+
getMap: async () => {
|
|
1051
|
+
return await this.appClient.state.box.getMap("approvals");
|
|
1052
|
+
},
|
|
1053
|
+
/**
|
|
1054
|
+
* Get a current value of the approvals map by key from box state
|
|
1055
|
+
*/
|
|
1056
|
+
value: async (key) => {
|
|
1057
|
+
return await this.appClient.state.box.getMapValue("approvals", key);
|
|
1058
|
+
}
|
|
1059
|
+
}
|
|
1060
|
+
}
|
|
1061
|
+
};
|
|
1062
|
+
this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({
|
|
1063
|
+
...appClientOrParams,
|
|
1064
|
+
appSpec: APP_SPEC
|
|
1065
|
+
});
|
|
481
1066
|
}
|
|
482
1067
|
/**
|
|
483
|
-
*
|
|
484
|
-
*
|
|
485
|
-
* @param args The arguments for the bare call
|
|
486
|
-
* @returns The clear_state result
|
|
1068
|
+
* Checks for decode errors on the given return value and maps the return value to the return type for the given method
|
|
1069
|
+
* @returns The typed return value or undefined if there was no value
|
|
487
1070
|
*/
|
|
488
|
-
|
|
489
|
-
return
|
|
1071
|
+
decodeReturnValue(method, returnValue) {
|
|
1072
|
+
return returnValue !== void 0 ? getArc56ReturnValue(
|
|
1073
|
+
returnValue,
|
|
1074
|
+
this.appClient.getABIMethod(method),
|
|
1075
|
+
APP_SPEC.structs
|
|
1076
|
+
) : void 0;
|
|
490
1077
|
}
|
|
491
1078
|
/**
|
|
492
|
-
*
|
|
493
|
-
*
|
|
494
|
-
*
|
|
495
|
-
*
|
|
496
|
-
* @param args The arguments for the contract call
|
|
497
|
-
* @param params Any additional parameters for the call
|
|
498
|
-
* @returns The result of the call: The name of the token
|
|
1079
|
+
* Returns a new `Arc200Client` client, resolving the app by creator address and name
|
|
1080
|
+
* using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).
|
|
1081
|
+
* @param params The parameters to create the app client
|
|
499
1082
|
*/
|
|
500
|
-
|
|
501
|
-
return
|
|
1083
|
+
static async fromCreatorAndName(params) {
|
|
1084
|
+
return new _Arc200Client(await _AppClient.fromCreatorAndName({ ...params, appSpec: APP_SPEC }));
|
|
502
1085
|
}
|
|
503
1086
|
/**
|
|
504
|
-
*
|
|
1087
|
+
* Returns an `Arc200Client` instance for the current network based on
|
|
1088
|
+
* pre-determined network-specific app IDs specified in the ARC-56 app spec.
|
|
505
1089
|
*
|
|
506
|
-
*
|
|
507
|
-
*
|
|
508
|
-
* @param args The arguments for the contract call
|
|
509
|
-
* @param params Any additional parameters for the call
|
|
510
|
-
* @returns The result of the call: The symbol of the token
|
|
1090
|
+
* If no IDs are in the app spec or the network isn't recognised, an error is thrown.
|
|
1091
|
+
* @param params The parameters to create the app client
|
|
511
1092
|
*/
|
|
512
|
-
|
|
513
|
-
return
|
|
1093
|
+
static async fromNetwork(params) {
|
|
1094
|
+
return new _Arc200Client(await _AppClient.fromNetwork({ ...params, appSpec: APP_SPEC }));
|
|
1095
|
+
}
|
|
1096
|
+
/** The ID of the app instance this client is linked to. */
|
|
1097
|
+
get appId() {
|
|
1098
|
+
return this.appClient.appId;
|
|
1099
|
+
}
|
|
1100
|
+
/** The app address of the app instance this client is linked to. */
|
|
1101
|
+
get appAddress() {
|
|
1102
|
+
return this.appClient.appAddress;
|
|
1103
|
+
}
|
|
1104
|
+
/** The name of the app. */
|
|
1105
|
+
get appName() {
|
|
1106
|
+
return this.appClient.appName;
|
|
1107
|
+
}
|
|
1108
|
+
/** The ARC-56 app spec being used */
|
|
1109
|
+
get appSpec() {
|
|
1110
|
+
return this.appClient.appSpec;
|
|
1111
|
+
}
|
|
1112
|
+
/** A reference to the underlying `AlgorandClient` this app client is using. */
|
|
1113
|
+
get algorand() {
|
|
1114
|
+
return this.appClient.algorand;
|
|
514
1115
|
}
|
|
515
1116
|
/**
|
|
516
|
-
*
|
|
517
|
-
*
|
|
518
|
-
* Returns the decimals of the token
|
|
1117
|
+
* Clone this app client with different params
|
|
519
1118
|
*
|
|
520
|
-
* @param
|
|
521
|
-
* @
|
|
522
|
-
* @returns The result of the call: The decimals of the token
|
|
1119
|
+
* @param params The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value.
|
|
1120
|
+
* @returns A new app client with the altered params
|
|
523
1121
|
*/
|
|
524
|
-
|
|
525
|
-
return this.
|
|
1122
|
+
clone(params) {
|
|
1123
|
+
return new _Arc200Client(this.appClient.clone(params));
|
|
526
1124
|
}
|
|
527
1125
|
/**
|
|
528
|
-
*
|
|
1126
|
+
* Makes a readonly (simulated) call to the Arc200 smart contract using the `arc200_name()byte[32]` ABI method.
|
|
529
1127
|
*
|
|
530
|
-
*
|
|
1128
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1129
|
+
*
|
|
1130
|
+
* Returns the name of the token
|
|
531
1131
|
*
|
|
532
|
-
* @param
|
|
533
|
-
* @
|
|
534
|
-
* @returns The result of the call: The total supply of the token
|
|
1132
|
+
* @param params The params for the smart contract call
|
|
1133
|
+
* @returns The call result: The name of the token
|
|
535
1134
|
*/
|
|
536
|
-
|
|
537
|
-
|
|
1135
|
+
async arc200Name(params = {
|
|
1136
|
+
args: []
|
|
1137
|
+
}) {
|
|
1138
|
+
const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Name(params));
|
|
1139
|
+
return result.return;
|
|
538
1140
|
}
|
|
539
1141
|
/**
|
|
540
|
-
*
|
|
1142
|
+
* Makes a readonly (simulated) call to the Arc200 smart contract using the `arc200_symbol()byte[8]` ABI method.
|
|
541
1143
|
*
|
|
542
|
-
*
|
|
1144
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1145
|
+
*
|
|
1146
|
+
* Returns the symbol of the token
|
|
543
1147
|
*
|
|
544
|
-
* @param
|
|
545
|
-
* @
|
|
546
|
-
* @returns The result of the call: The current balance of the holder of the token
|
|
1148
|
+
* @param params The params for the smart contract call
|
|
1149
|
+
* @returns The call result: The symbol of the token
|
|
547
1150
|
*/
|
|
548
|
-
|
|
549
|
-
|
|
1151
|
+
async arc200Symbol(params = {
|
|
1152
|
+
args: []
|
|
1153
|
+
}) {
|
|
1154
|
+
const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Symbol(params));
|
|
1155
|
+
return result.return;
|
|
550
1156
|
}
|
|
551
1157
|
/**
|
|
552
|
-
*
|
|
1158
|
+
* Makes a readonly (simulated) call to the Arc200 smart contract using the `arc200_decimals()uint8` ABI method.
|
|
553
1159
|
*
|
|
554
|
-
*
|
|
1160
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1161
|
+
*
|
|
1162
|
+
* Returns the decimals of the token
|
|
555
1163
|
*
|
|
556
|
-
* @param
|
|
557
|
-
* @
|
|
558
|
-
* @returns The result of the call: Success
|
|
1164
|
+
* @param params The params for the smart contract call
|
|
1165
|
+
* @returns The call result: The decimals of the token
|
|
559
1166
|
*/
|
|
560
|
-
|
|
561
|
-
|
|
1167
|
+
async arc200Decimals(params = {
|
|
1168
|
+
args: []
|
|
1169
|
+
}) {
|
|
1170
|
+
const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Decimals(params));
|
|
1171
|
+
return result.return;
|
|
562
1172
|
}
|
|
563
1173
|
/**
|
|
564
|
-
*
|
|
1174
|
+
* Makes a readonly (simulated) call to the Arc200 smart contract using the `arc200_totalSupply()uint256` ABI method.
|
|
565
1175
|
*
|
|
566
|
-
*
|
|
1176
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1177
|
+
*
|
|
1178
|
+
* Returns the total supply of the token
|
|
567
1179
|
*
|
|
568
|
-
* @param
|
|
569
|
-
* @
|
|
570
|
-
* @returns The result of the call: Success
|
|
1180
|
+
* @param params The params for the smart contract call
|
|
1181
|
+
* @returns The call result: The total supply of the token
|
|
571
1182
|
*/
|
|
572
|
-
|
|
573
|
-
|
|
1183
|
+
async arc200TotalSupply(params = { args: [] }) {
|
|
1184
|
+
const result = await this.appClient.send.call(Arc200ParamsFactory.arc200TotalSupply(params));
|
|
1185
|
+
return result.return;
|
|
574
1186
|
}
|
|
575
1187
|
/**
|
|
576
|
-
*
|
|
1188
|
+
* Makes a readonly (simulated) call to the Arc200 smart contract using the `arc200_balanceOf(address)uint256` ABI method.
|
|
577
1189
|
*
|
|
578
|
-
*
|
|
1190
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1191
|
+
*
|
|
1192
|
+
* Returns the current balance of the owner of the token
|
|
579
1193
|
*
|
|
580
|
-
* @param
|
|
581
|
-
* @
|
|
582
|
-
* @returns The result of the call: Success
|
|
1194
|
+
* @param params The params for the smart contract call
|
|
1195
|
+
* @returns The call result: The current balance of the holder of the token
|
|
583
1196
|
*/
|
|
584
|
-
|
|
585
|
-
|
|
1197
|
+
async arc200BalanceOf(params) {
|
|
1198
|
+
const result = await this.appClient.send.call(Arc200ParamsFactory.arc200BalanceOf(params));
|
|
1199
|
+
return result.return;
|
|
586
1200
|
}
|
|
587
1201
|
/**
|
|
588
|
-
*
|
|
1202
|
+
* Makes a readonly (simulated) call to the Arc200 smart contract using the `arc200_allowance(address,address)uint256` ABI method.
|
|
1203
|
+
*
|
|
1204
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
589
1205
|
*
|
|
590
1206
|
* Returns the current allowance of the spender of the tokens of the owner
|
|
591
1207
|
*
|
|
592
|
-
* @param
|
|
593
|
-
* @
|
|
594
|
-
* @returns The result of the call: The remaining allowance
|
|
1208
|
+
* @param params The params for the smart contract call
|
|
1209
|
+
* @returns The call result: The remaining allowance
|
|
595
1210
|
*/
|
|
596
|
-
arc200Allowance(
|
|
597
|
-
|
|
1211
|
+
async arc200Allowance(params) {
|
|
1212
|
+
const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Allowance(params));
|
|
1213
|
+
return result.return;
|
|
598
1214
|
}
|
|
599
|
-
|
|
1215
|
+
newGroup() {
|
|
600
1216
|
const client = this;
|
|
601
|
-
const
|
|
1217
|
+
const composer = this.algorand.newGroup();
|
|
602
1218
|
let promiseChain = Promise.resolve();
|
|
603
1219
|
const resultMappers = [];
|
|
604
1220
|
return {
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
1221
|
+
/**
|
|
1222
|
+
* Add a bootstrap(byte[],byte[],uint8,uint256)bool method call against the Arc200 contract
|
|
1223
|
+
*/
|
|
1224
|
+
bootstrap(params) {
|
|
1225
|
+
promiseChain = promiseChain.then(
|
|
1226
|
+
async () => composer.addAppCallMethodCall(await client.params.bootstrap(params))
|
|
1227
|
+
);
|
|
1228
|
+
resultMappers.push((v) => client.decodeReturnValue("bootstrap(byte[],byte[],uint8,uint256)bool", v));
|
|
608
1229
|
return this;
|
|
609
1230
|
},
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
1231
|
+
/**
|
|
1232
|
+
* Add a arc200_name()byte[32] method call against the Arc200 contract
|
|
1233
|
+
*/
|
|
1234
|
+
arc200Name(params) {
|
|
1235
|
+
promiseChain = promiseChain.then(
|
|
1236
|
+
async () => composer.addAppCallMethodCall(await client.params.arc200Name(params))
|
|
1237
|
+
);
|
|
1238
|
+
resultMappers.push((v) => client.decodeReturnValue("arc200_name()byte[32]", v));
|
|
1239
|
+
return this;
|
|
1240
|
+
},
|
|
1241
|
+
/**
|
|
1242
|
+
* Add a arc200_symbol()byte[8] method call against the Arc200 contract
|
|
1243
|
+
*/
|
|
1244
|
+
arc200Symbol(params) {
|
|
1245
|
+
promiseChain = promiseChain.then(
|
|
1246
|
+
async () => composer.addAppCallMethodCall(await client.params.arc200Symbol(params))
|
|
1247
|
+
);
|
|
1248
|
+
resultMappers.push((v) => client.decodeReturnValue("arc200_symbol()byte[8]", v));
|
|
613
1249
|
return this;
|
|
614
1250
|
},
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
1251
|
+
/**
|
|
1252
|
+
* Add a arc200_decimals()uint8 method call against the Arc200 contract
|
|
1253
|
+
*/
|
|
1254
|
+
arc200Decimals(params) {
|
|
1255
|
+
promiseChain = promiseChain.then(
|
|
1256
|
+
async () => composer.addAppCallMethodCall(await client.params.arc200Decimals(params))
|
|
1257
|
+
);
|
|
1258
|
+
resultMappers.push((v) => client.decodeReturnValue("arc200_decimals()uint8", v));
|
|
618
1259
|
return this;
|
|
619
1260
|
},
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
1261
|
+
/**
|
|
1262
|
+
* Add a arc200_totalSupply()uint256 method call against the Arc200 contract
|
|
1263
|
+
*/
|
|
1264
|
+
arc200TotalSupply(params) {
|
|
1265
|
+
promiseChain = promiseChain.then(
|
|
1266
|
+
async () => composer.addAppCallMethodCall(await client.params.arc200TotalSupply(params))
|
|
1267
|
+
);
|
|
1268
|
+
resultMappers.push((v) => client.decodeReturnValue("arc200_totalSupply()uint256", v));
|
|
623
1269
|
return this;
|
|
624
1270
|
},
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
1271
|
+
/**
|
|
1272
|
+
* Add a arc200_balanceOf(address)uint256 method call against the Arc200 contract
|
|
1273
|
+
*/
|
|
1274
|
+
arc200BalanceOf(params) {
|
|
1275
|
+
promiseChain = promiseChain.then(
|
|
1276
|
+
async () => composer.addAppCallMethodCall(await client.params.arc200BalanceOf(params))
|
|
1277
|
+
);
|
|
1278
|
+
resultMappers.push((v) => client.decodeReturnValue("arc200_balanceOf(address)uint256", v));
|
|
628
1279
|
return this;
|
|
629
1280
|
},
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
1281
|
+
/**
|
|
1282
|
+
* Add a arc200_transfer(address,uint256)bool method call against the Arc200 contract
|
|
1283
|
+
*/
|
|
1284
|
+
arc200Transfer(params) {
|
|
1285
|
+
promiseChain = promiseChain.then(
|
|
1286
|
+
async () => composer.addAppCallMethodCall(await client.params.arc200Transfer(params))
|
|
1287
|
+
);
|
|
1288
|
+
resultMappers.push((v) => client.decodeReturnValue("arc200_transfer(address,uint256)bool", v));
|
|
633
1289
|
return this;
|
|
634
1290
|
},
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
1291
|
+
/**
|
|
1292
|
+
* Add a arc200_transferFrom(address,address,uint256)bool method call against the Arc200 contract
|
|
1293
|
+
*/
|
|
1294
|
+
arc200TransferFrom(params) {
|
|
1295
|
+
promiseChain = promiseChain.then(
|
|
1296
|
+
async () => composer.addAppCallMethodCall(await client.params.arc200TransferFrom(params))
|
|
1297
|
+
);
|
|
1298
|
+
resultMappers.push((v) => client.decodeReturnValue("arc200_transferFrom(address,address,uint256)bool", v));
|
|
638
1299
|
return this;
|
|
639
1300
|
},
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
1301
|
+
/**
|
|
1302
|
+
* Add a arc200_approve(address,uint256)bool method call against the Arc200 contract
|
|
1303
|
+
*/
|
|
1304
|
+
arc200Approve(params) {
|
|
1305
|
+
promiseChain = promiseChain.then(
|
|
1306
|
+
async () => composer.addAppCallMethodCall(await client.params.arc200Approve(params))
|
|
1307
|
+
);
|
|
1308
|
+
resultMappers.push((v) => client.decodeReturnValue("arc200_approve(address,uint256)bool", v));
|
|
643
1309
|
return this;
|
|
644
1310
|
},
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
1311
|
+
/**
|
|
1312
|
+
* Add a arc200_allowance(address,address)uint256 method call against the Arc200 contract
|
|
1313
|
+
*/
|
|
1314
|
+
arc200Allowance(params) {
|
|
1315
|
+
promiseChain = promiseChain.then(
|
|
1316
|
+
async () => composer.addAppCallMethodCall(await client.params.arc200Allowance(params))
|
|
1317
|
+
);
|
|
1318
|
+
resultMappers.push((v) => client.decodeReturnValue("arc200_allowance(address,address)uint256", v));
|
|
648
1319
|
return this;
|
|
649
1320
|
},
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
1321
|
+
/**
|
|
1322
|
+
* Add a clear state call to the Arc200 contract
|
|
1323
|
+
*/
|
|
1324
|
+
clearState(params) {
|
|
1325
|
+
promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params)));
|
|
653
1326
|
return this;
|
|
654
1327
|
},
|
|
655
|
-
addTransaction(txn,
|
|
656
|
-
promiseChain = promiseChain.then(
|
|
1328
|
+
addTransaction(txn, signer) {
|
|
1329
|
+
promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer));
|
|
657
1330
|
return this;
|
|
658
1331
|
},
|
|
659
|
-
async
|
|
1332
|
+
async composer() {
|
|
660
1333
|
await promiseChain;
|
|
661
|
-
return
|
|
1334
|
+
return composer;
|
|
662
1335
|
},
|
|
663
1336
|
async simulate(options) {
|
|
664
1337
|
await promiseChain;
|
|
665
|
-
const result = await
|
|
1338
|
+
const result = await (!options ? composer.simulate() : composer.simulate(options));
|
|
666
1339
|
return {
|
|
667
1340
|
...result,
|
|
668
|
-
returns: result.
|
|
1341
|
+
returns: result.returns?.map(
|
|
1342
|
+
(val, i) => resultMappers[i] !== void 0 ? resultMappers[i](val) : val.returnValue
|
|
1343
|
+
)
|
|
669
1344
|
};
|
|
670
1345
|
},
|
|
671
|
-
async
|
|
1346
|
+
async send(params) {
|
|
672
1347
|
await promiseChain;
|
|
673
|
-
const result = await
|
|
1348
|
+
const result = await composer.send(params);
|
|
674
1349
|
return {
|
|
675
1350
|
...result,
|
|
676
|
-
returns: result.returns?.map(
|
|
1351
|
+
returns: result.returns?.map(
|
|
1352
|
+
(val, i) => resultMappers[i] !== void 0 ? resultMappers[i](val) : val.returnValue
|
|
1353
|
+
)
|
|
677
1354
|
};
|
|
678
1355
|
}
|
|
679
1356
|
};
|
|
@@ -682,17 +1359,19 @@ var Arc200Client = class {
|
|
|
682
1359
|
|
|
683
1360
|
// src/getArc200Client.ts
|
|
684
1361
|
var getArc200Client = (input) => {
|
|
685
|
-
return new Arc200Client(
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
input.
|
|
692
|
-
|
|
1362
|
+
return new Arc200Client({
|
|
1363
|
+
algorand: input.algorand,
|
|
1364
|
+
appId: input.appId,
|
|
1365
|
+
appName: input.appName,
|
|
1366
|
+
approvalSourceMap: input.approvalSourceMap,
|
|
1367
|
+
clearSourceMap: input.clearSourceMap,
|
|
1368
|
+
defaultSender: input.defaultSender,
|
|
1369
|
+
defaultSigner: input.defaultSigner
|
|
1370
|
+
});
|
|
693
1371
|
};
|
|
694
|
-
var getArc200Client_default = getArc200Client;
|
|
695
1372
|
export {
|
|
696
|
-
|
|
1373
|
+
Arc200Client,
|
|
1374
|
+
Arc200Factory,
|
|
1375
|
+
getArc200Client
|
|
697
1376
|
};
|
|
698
1377
|
//# sourceMappingURL=index.mjs.map
|