-
Notifications
You must be signed in to change notification settings - Fork 38
/
MerkleOrchard.json
458 lines (458 loc) · 35.1 KB
/
MerkleOrchard.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
{
"_format": "hh-sol-artifact-1",
"contractName": "MerkleOrchard",
"sourceName": "contracts/MerkleOrchard.sol",
"abi": [
{
"inputs": [
{
"internalType": "contract IVault",
"name": "vault",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "distributor",
"type": "address"
},
{
"indexed": true,
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "distributionId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "merkleRoot",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "DistributionAdded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "distributor",
"type": "address"
},
{
"indexed": true,
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "distributionId",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "claimer",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "DistributionClaimed",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "claimer",
"type": "address"
},
{
"components": [
{
"internalType": "uint256",
"name": "distributionId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
},
{
"internalType": "address",
"name": "distributor",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenIndex",
"type": "uint256"
},
{
"internalType": "bytes32[]",
"name": "merkleProof",
"type": "bytes32[]"
}
],
"internalType": "struct MerkleOrchard.Claim[]",
"name": "claims",
"type": "tuple[]"
},
{
"internalType": "contract IERC20[]",
"name": "tokens",
"type": "address[]"
}
],
"name": "claimDistributions",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "claimer",
"type": "address"
},
{
"components": [
{
"internalType": "uint256",
"name": "distributionId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
},
{
"internalType": "address",
"name": "distributor",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenIndex",
"type": "uint256"
},
{
"internalType": "bytes32[]",
"name": "merkleProof",
"type": "bytes32[]"
}
],
"internalType": "struct MerkleOrchard.Claim[]",
"name": "claims",
"type": "tuple[]"
},
{
"internalType": "contract IERC20[]",
"name": "tokens",
"type": "address[]"
}
],
"name": "claimDistributionsToInternalBalance",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "claimer",
"type": "address"
},
{
"components": [
{
"internalType": "uint256",
"name": "distributionId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
},
{
"internalType": "address",
"name": "distributor",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenIndex",
"type": "uint256"
},
{
"internalType": "bytes32[]",
"name": "merkleProof",
"type": "bytes32[]"
}
],
"internalType": "struct MerkleOrchard.Claim[]",
"name": "claims",
"type": "tuple[]"
},
{
"internalType": "contract IERC20[]",
"name": "tokens",
"type": "address[]"
},
{
"internalType": "contract IDistributorCallback",
"name": "callbackContract",
"type": "address"
},
{
"internalType": "bytes",
"name": "callbackData",
"type": "bytes"
}
],
"name": "claimDistributionsWithCallback",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"internalType": "bytes32",
"name": "merkleRoot",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "distributionId",
"type": "uint256"
}
],
"name": "createDistribution",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"internalType": "address",
"name": "distributor",
"type": "address"
},
{
"internalType": "uint256",
"name": "distributionId",
"type": "uint256"
}
],
"name": "getDistributionRoot",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"internalType": "address",
"name": "distributor",
"type": "address"
}
],
"name": "getNextDistributionId",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"internalType": "address",
"name": "distributor",
"type": "address"
}
],
"name": "getRemainingBalance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getVault",
"outputs": [
{
"internalType": "contract IVault",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"internalType": "address",
"name": "distributor",
"type": "address"
},
{
"internalType": "uint256",
"name": "distributionId",
"type": "uint256"
},
{
"internalType": "address",
"name": "claimer",
"type": "address"
}
],
"name": "isClaimed",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"internalType": "address",
"name": "distributor",
"type": "address"
},
{
"internalType": "uint256",
"name": "distributionId",
"type": "uint256"
},
{
"internalType": "address",
"name": "claimer",
"type": "address"
},
{
"internalType": "uint256",
"name": "claimedBalance",
"type": "uint256"
},
{
"internalType": "bytes32[]",
"name": "merkleProof",
"type": "bytes32[]"
}
],
"name": "verifyClaim",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x60a060405234801561001057600080fd5b506040516118fe3803806118fe83398101604081905261002f91610044565b60601b6001600160601b031916608052610072565b600060208284031215610055578081fd5b81516001600160a01b038116811461006b578182fd5b9392505050565b60805160601c61186f61008f600039806102dc525061186f6000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80638d928af811610076578063ece123541161005b578063ece123541461016f578063fb97812814610182578063fea7364914610195576100be565b80638d928af814610147578063a68d1e9d1461015c576100be565b806362c8b7c9116100a757806362c8b7c91461010157806381ae8541146101145780638bf3e45714610134576100be565b80632b630140146100c3578063515ac052146100d8575b600080fd5b6100d66100d1366004611114565b6101a8565b005b6100eb6100e6366004611301565b6101bb565b6040516100f891906115d0565b60405180910390f35b6100eb61010f366004611353565b610226565b610127610122366004611289565b61024e565b6040516100f891906115db565b6100d6610142366004611114565b610274565b61014f6102da565b6040516100f89190611631565b6100d661016a366004611187565b6102fe565b6100d661017d3660046113d8565b6103e9565b610127610190366004611289565b6106a2565b6101276101a33660046112c1565b6106c6565b6101b68384848460006106f7565b505050565b60008060006101c985610a9a565b9150915060006101d98888610aa8565b600090815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8916845282528083209583529490529290922054600190911b161515915050949350505050565b6000806102338888610aa8565b90506102428187878787610adb565b98975050505050505050565b60008061025b8484610aa8565b6000908152600360205260409020549150505b92915050565b3373ffffffffffffffffffffffffffffffffffffffff8416146102cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c390611754565b60405180910390fd5b6101b68384848460016106f7565b7f000000000000000000000000000000000000000000000000000000000000000090565b3373ffffffffffffffffffffffffffffffffffffffff87161461034d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c390611754565b61035b8684878760016106f7565b6040517f55c524c100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906355c524c1906103af90859085906004016115e4565b600060405180830381600087803b1580156103c957600080fd5b505af11580156103dd573d6000803e3d6000fd5b50505050505050505050565b3360006103f68683610aa8565b6000818152602081905260409020549091508314806104215750600081815260208190526040902054155b610457576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c390611652565b61047973ffffffffffffffffffffffffffffffffffffffff8716833087610b56565b8573ffffffffffffffffffffffffffffffffffffffff1663095ea7b361049d6102da565b866040518363ffffffff1660e01b81526004016104bb929190611513565b602060405180830381600087803b1580156104d557600080fd5b505af11580156104e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050d9190611262565b50604080516001808252818301909252606091816020015b61052d610ed8565b8152602001906001900390816105255750506040805160a081018252600080825273ffffffffffffffffffffffffffffffffffffffff8b1660208301529181018890523060608201819052608082015282519293509183919061058c57fe5b602002602001018190525061059f6102da565b73ffffffffffffffffffffffffffffffffffffffff16630e8e3e84826040518263ffffffff1660e01b81526004016105d79190611539565b600060405180830381600087803b1580156105f157600080fd5b505af1158015610605573d6000803e3d6000fd5b505050600083815260036020908152604080832080548a019055600180835281842089855283528184208b9055868452918390529182902090870190555173ffffffffffffffffffffffffffffffffffffffff808a1692508516907f24a80c4e3ef74c732b163bfb2decfbe077a51aef3b708c93f8ef3dd06fc3ea7c906106919088908b908b906117b7565b60405180910390a350505050505050565b6000806106af8484610aa8565b600090815260208190526040902054949350505050565b6000806106d38585610aa8565b60009081526001602090815260408083208684529091529020549150509392505050565b6060825167ffffffffffffffff8111801561071157600080fd5b5060405190808252806020026020018201604052801561073b578160200160208202803683370190505b509050610746610f08565b60005b85518110156108ec5785818151811061075e57fe5b602002602001015191506000806107788460000151610a9a565b9150915060006107a38886606001518151811061079157fe5b60200260200101518660400151610aa8565b90506001821b6107b5828d8684610bff565b6107c3828760200151610cb3565b6107dc8287600001518e89602001518a60800151610adb565b610812576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c39061171d565b85602001518787606001518151811061082757fe5b6020026020010181815101915081815250508b73ffffffffffffffffffffffffffffffffffffffff168987606001518151811061086057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16876040015173ffffffffffffffffffffffffffffffffffffffff167ff3f33f2319d28d6a1402aa9e6ca0ae16d3ada035d576b3b8074b422aaa03b69889600001518f8b602001516040516108d49392919061178b565b60405180910390a45050600190920191506107499050565b506000836108fb5760016108fe565b60025b90506060855167ffffffffffffffff8111801561091a57600080fd5b5060405190808252806020026020018201604052801561095457816020015b610941610ed8565b8152602001906001900390816109395790505b50905060005b8651811015610a1c576040518060a0016040528084600381111561097a57fe5b815260200188838151811061098b57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1681526020018683815181106109ba57fe5b602002602001015181526020013073ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff16815250828281518110610a0957fe5b602090810291909101015260010161095a565b50610a256102da565b73ffffffffffffffffffffffffffffffffffffffff16630e8e3e84826040518263ffffffff1660e01b8152600401610a5d9190611539565b600060405180830381600087803b158015610a7757600080fd5b505af1158015610a8b573d6000803e3d6000fd5b50505050505050505050505050565b61010081049160ff90911690565b60008282604051602001610abd9291906114a8565b60405160208183030381529060405280519060200120905092915050565b6000808484604051602001610af192919061142c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012060008a8152600184528281208a8252909352912054909150610b4b90849083610d14565b979650505050505050565b610bf9846323b872dd60e01b858585604051602401610b77939291906114e2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610db1565b50505050565b600084815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452825280832085845290915290205481811615610c71576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c390611689565b600094855260026020908152604080872073ffffffffffffffffffffffffffffffffffffffff9096168752948152848620938652929092529190922091179055565b600082815260036020526040902054811115610cfb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c3906116c0565b6000918252600360205260409091208054919091039055565b600081815b8551811015610da6576000868281518110610d3057fe5b60200260200101519050808311610d71578281604051602001610d54929190611461565b604051602081830303815290604052805190602001209250610d9d565b8083604051602001610d84929190611461565b6040516020818303038152906040528051906020012092505b50600101610d19565b509092149392505050565b600060608373ffffffffffffffffffffffffffffffffffffffff1683604051610dda919061146f565b6000604051808303816000865af19150503d8060008114610e17576040519150601f19603f3d011682016040523d82523d6000602084013e610e1c565b606091505b50915091506000821415610e34573d6000803e3d6000fd5b610bf9815160001480610e56575081806020019051810190610e569190611262565b6101a281610e6757610e6781610e6b565b5050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b6040805160a081019091528060008152600060208201819052604082018190526060820181905260809091015290565b6040518060a001604052806000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b803561026e81611814565b600082601f830112610f68578081fd5b8135610f7b610f76826117f4565b6117cd565b818152915060208083019084810181840286018201871015610f9c57600080fd5b60005b84811015610fbb57813584529282019290820190600101610f9f565b505050505092915050565b600082601f830112610fd6578081fd5b8135610fe4610f76826117f4565b81815291506020808301908481018184028601820187101561100557600080fd5b60005b84811015610fbb57813561101b81611814565b84529282019290820190600101611008565b600082601f83011261103d578081fd5b813561104b610f76826117f4565b818152915060208083019084810160005b84811015610fbb578135870160a0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838c0301121561109b57600080fd5b6110a4816117cd565b8583013581526040808401358783015260606110c28d828701610f4d565b828401526080915081850135818401525082840135925067ffffffffffffffff8311156110ee57600080fd5b6110fc8c8885870101610f58565b9082015286525050928201929082019060010161105c565b600080600060608486031215611128578283fd5b833561113381611814565b9250602084013567ffffffffffffffff8082111561114f578384fd5b61115b8783880161102d565b93506040860135915080821115611170578283fd5b5061117d86828701610fc6565b9150509250925092565b60008060008060008060a0878903121561119f578182fd5b86356111aa81611814565b9550602087013567ffffffffffffffff808211156111c6578384fd5b6111d28a838b0161102d565b965060408901359150808211156111e7578384fd5b6111f38a838b01610fc6565b95506060890135915061120582611814565b9093506080880135908082111561121a578384fd5b818901915089601f83011261122d578384fd5b81358181111561123b578485fd5b8a602082850101111561124c578485fd5b6020830194508093505050509295509295509295565b600060208284031215611273578081fd5b81518015158114611282578182fd5b9392505050565b6000806040838503121561129b578182fd5b82356112a681611814565b915060208301356112b681611814565b809150509250929050565b6000806000606084860312156112d5578283fd5b83356112e081611814565b925060208401356112f081611814565b929592945050506040919091013590565b60008060008060808587031215611316578384fd5b843561132181611814565b9350602085013561133181611814565b925060408501359150606085013561134881611814565b939692955090935050565b60008060008060008060c0878903121561136b578182fd5b863561137681611814565b9550602087013561138681611814565b945060408701359350606087013561139d81611814565b92506080870135915060a087013567ffffffffffffffff8111156113bf578182fd5b6113cb89828a01610f58565b9150509295509295509295565b600080600080608085870312156113ed578182fd5b84356113f881611814565b966020860135965060408601359560600135945092505050565b73ffffffffffffffffffffffffffffffffffffffff169052565b60609290921b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000168252601482015260340190565b918252602082015260400190565b60008251815b8181101561148f5760208186018101518583015201611475565b8181111561149d5782828501525b509190910192915050565b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606093841b811682529190921b16601482015260280190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b602080825282518282018190526000919060409081850190868401855b828110156115c357815180516004811061156c57fe5b85528087015161157e88870182611412565b50858101518686015260608082015161159982880182611412565b5050608090810151906115ae86820183611412565b505060a0939093019290850190600101611556565b5091979650505050505050565b901515815260200190565b90815260200190565b60006020825282602083015282846040840137818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b60208082526017908201527f696e76616c696420646973747269627574696f6e204944000000000000000000604082015260600190565b60208082526012908201527f63616e6e6f7420636c61696d2074776963650000000000000000000000000000604082015260600190565b60208082526037908201527f6469737472696275746f72206861736e27742070726f7669646564207375666660408201527f696369656e7420746f6b656e7320666f7220636c61696d000000000000000000606082015260800190565b60208082526016908201527f696e636f7272656374206d65726b6c652070726f6f6600000000000000000000604082015260600190565b6020808252601b908201527f75736572206d75737420636c61696d206f776e2062616c616e63650000000000604082015260600190565b92835273ffffffffffffffffffffffffffffffffffffffff919091166020830152604082015260600190565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff811182821017156117ec57600080fd5b604052919050565b600067ffffffffffffffff82111561180a578081fd5b5060209081020190565b73ffffffffffffffffffffffffffffffffffffffff8116811461183657600080fd5b5056fea264697066735822122049716b4e8fcc2f0204a76e048a56845fb4229db0b0ede50964734901df638dc564736f6c63430007010033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100be5760003560e01c80638d928af811610076578063ece123541161005b578063ece123541461016f578063fb97812814610182578063fea7364914610195576100be565b80638d928af814610147578063a68d1e9d1461015c576100be565b806362c8b7c9116100a757806362c8b7c91461010157806381ae8541146101145780638bf3e45714610134576100be565b80632b630140146100c3578063515ac052146100d8575b600080fd5b6100d66100d1366004611114565b6101a8565b005b6100eb6100e6366004611301565b6101bb565b6040516100f891906115d0565b60405180910390f35b6100eb61010f366004611353565b610226565b610127610122366004611289565b61024e565b6040516100f891906115db565b6100d6610142366004611114565b610274565b61014f6102da565b6040516100f89190611631565b6100d661016a366004611187565b6102fe565b6100d661017d3660046113d8565b6103e9565b610127610190366004611289565b6106a2565b6101276101a33660046112c1565b6106c6565b6101b68384848460006106f7565b505050565b60008060006101c985610a9a565b9150915060006101d98888610aa8565b600090815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8916845282528083209583529490529290922054600190911b161515915050949350505050565b6000806102338888610aa8565b90506102428187878787610adb565b98975050505050505050565b60008061025b8484610aa8565b6000908152600360205260409020549150505b92915050565b3373ffffffffffffffffffffffffffffffffffffffff8416146102cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c390611754565b60405180910390fd5b6101b68384848460016106f7565b7f000000000000000000000000000000000000000000000000000000000000000090565b3373ffffffffffffffffffffffffffffffffffffffff87161461034d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c390611754565b61035b8684878760016106f7565b6040517f55c524c100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906355c524c1906103af90859085906004016115e4565b600060405180830381600087803b1580156103c957600080fd5b505af11580156103dd573d6000803e3d6000fd5b50505050505050505050565b3360006103f68683610aa8565b6000818152602081905260409020549091508314806104215750600081815260208190526040902054155b610457576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c390611652565b61047973ffffffffffffffffffffffffffffffffffffffff8716833087610b56565b8573ffffffffffffffffffffffffffffffffffffffff1663095ea7b361049d6102da565b866040518363ffffffff1660e01b81526004016104bb929190611513565b602060405180830381600087803b1580156104d557600080fd5b505af11580156104e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050d9190611262565b50604080516001808252818301909252606091816020015b61052d610ed8565b8152602001906001900390816105255750506040805160a081018252600080825273ffffffffffffffffffffffffffffffffffffffff8b1660208301529181018890523060608201819052608082015282519293509183919061058c57fe5b602002602001018190525061059f6102da565b73ffffffffffffffffffffffffffffffffffffffff16630e8e3e84826040518263ffffffff1660e01b81526004016105d79190611539565b600060405180830381600087803b1580156105f157600080fd5b505af1158015610605573d6000803e3d6000fd5b505050600083815260036020908152604080832080548a019055600180835281842089855283528184208b9055868452918390529182902090870190555173ffffffffffffffffffffffffffffffffffffffff808a1692508516907f24a80c4e3ef74c732b163bfb2decfbe077a51aef3b708c93f8ef3dd06fc3ea7c906106919088908b908b906117b7565b60405180910390a350505050505050565b6000806106af8484610aa8565b600090815260208190526040902054949350505050565b6000806106d38585610aa8565b60009081526001602090815260408083208684529091529020549150509392505050565b6060825167ffffffffffffffff8111801561071157600080fd5b5060405190808252806020026020018201604052801561073b578160200160208202803683370190505b509050610746610f08565b60005b85518110156108ec5785818151811061075e57fe5b602002602001015191506000806107788460000151610a9a565b9150915060006107a38886606001518151811061079157fe5b60200260200101518660400151610aa8565b90506001821b6107b5828d8684610bff565b6107c3828760200151610cb3565b6107dc8287600001518e89602001518a60800151610adb565b610812576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c39061171d565b85602001518787606001518151811061082757fe5b6020026020010181815101915081815250508b73ffffffffffffffffffffffffffffffffffffffff168987606001518151811061086057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16876040015173ffffffffffffffffffffffffffffffffffffffff167ff3f33f2319d28d6a1402aa9e6ca0ae16d3ada035d576b3b8074b422aaa03b69889600001518f8b602001516040516108d49392919061178b565b60405180910390a45050600190920191506107499050565b506000836108fb5760016108fe565b60025b90506060855167ffffffffffffffff8111801561091a57600080fd5b5060405190808252806020026020018201604052801561095457816020015b610941610ed8565b8152602001906001900390816109395790505b50905060005b8651811015610a1c576040518060a0016040528084600381111561097a57fe5b815260200188838151811061098b57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1681526020018683815181106109ba57fe5b602002602001015181526020013073ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff16815250828281518110610a0957fe5b602090810291909101015260010161095a565b50610a256102da565b73ffffffffffffffffffffffffffffffffffffffff16630e8e3e84826040518263ffffffff1660e01b8152600401610a5d9190611539565b600060405180830381600087803b158015610a7757600080fd5b505af1158015610a8b573d6000803e3d6000fd5b50505050505050505050505050565b61010081049160ff90911690565b60008282604051602001610abd9291906114a8565b60405160208183030381529060405280519060200120905092915050565b6000808484604051602001610af192919061142c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012060008a8152600184528281208a8252909352912054909150610b4b90849083610d14565b979650505050505050565b610bf9846323b872dd60e01b858585604051602401610b77939291906114e2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610db1565b50505050565b600084815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452825280832085845290915290205481811615610c71576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c390611689565b600094855260026020908152604080872073ffffffffffffffffffffffffffffffffffffffff9096168752948152848620938652929092529190922091179055565b600082815260036020526040902054811115610cfb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c3906116c0565b6000918252600360205260409091208054919091039055565b600081815b8551811015610da6576000868281518110610d3057fe5b60200260200101519050808311610d71578281604051602001610d54929190611461565b604051602081830303815290604052805190602001209250610d9d565b8083604051602001610d84929190611461565b6040516020818303038152906040528051906020012092505b50600101610d19565b509092149392505050565b600060608373ffffffffffffffffffffffffffffffffffffffff1683604051610dda919061146f565b6000604051808303816000865af19150503d8060008114610e17576040519150601f19603f3d011682016040523d82523d6000602084013e610e1c565b606091505b50915091506000821415610e34573d6000803e3d6000fd5b610bf9815160001480610e56575081806020019051810190610e569190611262565b6101a281610e6757610e6781610e6b565b5050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b6040805160a081019091528060008152600060208201819052604082018190526060820181905260809091015290565b6040518060a001604052806000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b803561026e81611814565b600082601f830112610f68578081fd5b8135610f7b610f76826117f4565b6117cd565b818152915060208083019084810181840286018201871015610f9c57600080fd5b60005b84811015610fbb57813584529282019290820190600101610f9f565b505050505092915050565b600082601f830112610fd6578081fd5b8135610fe4610f76826117f4565b81815291506020808301908481018184028601820187101561100557600080fd5b60005b84811015610fbb57813561101b81611814565b84529282019290820190600101611008565b600082601f83011261103d578081fd5b813561104b610f76826117f4565b818152915060208083019084810160005b84811015610fbb578135870160a0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838c0301121561109b57600080fd5b6110a4816117cd565b8583013581526040808401358783015260606110c28d828701610f4d565b828401526080915081850135818401525082840135925067ffffffffffffffff8311156110ee57600080fd5b6110fc8c8885870101610f58565b9082015286525050928201929082019060010161105c565b600080600060608486031215611128578283fd5b833561113381611814565b9250602084013567ffffffffffffffff8082111561114f578384fd5b61115b8783880161102d565b93506040860135915080821115611170578283fd5b5061117d86828701610fc6565b9150509250925092565b60008060008060008060a0878903121561119f578182fd5b86356111aa81611814565b9550602087013567ffffffffffffffff808211156111c6578384fd5b6111d28a838b0161102d565b965060408901359150808211156111e7578384fd5b6111f38a838b01610fc6565b95506060890135915061120582611814565b9093506080880135908082111561121a578384fd5b818901915089601f83011261122d578384fd5b81358181111561123b578485fd5b8a602082850101111561124c578485fd5b6020830194508093505050509295509295509295565b600060208284031215611273578081fd5b81518015158114611282578182fd5b9392505050565b6000806040838503121561129b578182fd5b82356112a681611814565b915060208301356112b681611814565b809150509250929050565b6000806000606084860312156112d5578283fd5b83356112e081611814565b925060208401356112f081611814565b929592945050506040919091013590565b60008060008060808587031215611316578384fd5b843561132181611814565b9350602085013561133181611814565b925060408501359150606085013561134881611814565b939692955090935050565b60008060008060008060c0878903121561136b578182fd5b863561137681611814565b9550602087013561138681611814565b945060408701359350606087013561139d81611814565b92506080870135915060a087013567ffffffffffffffff8111156113bf578182fd5b6113cb89828a01610f58565b9150509295509295509295565b600080600080608085870312156113ed578182fd5b84356113f881611814565b966020860135965060408601359560600135945092505050565b73ffffffffffffffffffffffffffffffffffffffff169052565b60609290921b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000168252601482015260340190565b918252602082015260400190565b60008251815b8181101561148f5760208186018101518583015201611475565b8181111561149d5782828501525b509190910192915050565b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606093841b811682529190921b16601482015260280190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b602080825282518282018190526000919060409081850190868401855b828110156115c357815180516004811061156c57fe5b85528087015161157e88870182611412565b50858101518686015260608082015161159982880182611412565b5050608090810151906115ae86820183611412565b505060a0939093019290850190600101611556565b5091979650505050505050565b901515815260200190565b90815260200190565b60006020825282602083015282846040840137818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b60208082526017908201527f696e76616c696420646973747269627574696f6e204944000000000000000000604082015260600190565b60208082526012908201527f63616e6e6f7420636c61696d2074776963650000000000000000000000000000604082015260600190565b60208082526037908201527f6469737472696275746f72206861736e27742070726f7669646564207375666660408201527f696369656e7420746f6b656e7320666f7220636c61696d000000000000000000606082015260800190565b60208082526016908201527f696e636f7272656374206d65726b6c652070726f6f6600000000000000000000604082015260600190565b6020808252601b908201527f75736572206d75737420636c61696d206f776e2062616c616e63650000000000604082015260600190565b92835273ffffffffffffffffffffffffffffffffffffffff919091166020830152604082015260600190565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff811182821017156117ec57600080fd5b604052919050565b600067ffffffffffffffff82111561180a578081fd5b5060209081020190565b73ffffffffffffffffffffffffffffffffffffffff8116811461183657600080fd5b5056fea264697066735822122049716b4e8fcc2f0204a76e048a56845fb4229db0b0ede50964734901df638dc564736f6c63430007010033",
"linkReferences": {},
"deployedLinkReferences": {}
}