-
Notifications
You must be signed in to change notification settings - Fork 44
/
Copy pathBatchRelayerLibrary.json
758 lines (758 loc) · 80.4 KB
/
BatchRelayerLibrary.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
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
{
"_format": "hh-sol-artifact-1",
"contractName": "BatchRelayerLibrary",
"sourceName": "contracts/BatchRelayerLibrary.sol",
"abi": [
{
"inputs": [
{
"internalType": "contract IVault",
"name": "vault",
"type": "address"
},
{
"internalType": "contract IERC20",
"name": "wstETH",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "approveVault",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum IVault.SwapKind",
"name": "kind",
"type": "uint8"
},
{
"components": [
{
"internalType": "bytes32",
"name": "poolId",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "assetInIndex",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "assetOutIndex",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "userData",
"type": "bytes"
}
],
"internalType": "struct IVault.BatchSwapStep[]",
"name": "swaps",
"type": "tuple[]"
},
{
"internalType": "contract IAsset[]",
"name": "assets",
"type": "address[]"
},
{
"components": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "bool",
"name": "fromInternalBalance",
"type": "bool"
},
{
"internalType": "address payable",
"name": "recipient",
"type": "address"
},
{
"internalType": "bool",
"name": "toInternalBalance",
"type": "bool"
}
],
"internalType": "struct IVault.FundManagement",
"name": "funds",
"type": "tuple"
},
{
"internalType": "int256[]",
"name": "limits",
"type": "int256[]"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"components": [
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "key",
"type": "uint256"
}
],
"internalType": "struct VaultActions.OutputReference[]",
"name": "outputReferences",
"type": "tuple[]"
}
],
"name": "batchSwap",
"outputs": [
{
"internalType": "int256[]",
"name": "",
"type": "int256[]"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "poolId",
"type": "bytes32"
},
{
"internalType": "enum VaultActions.PoolKind",
"name": "kind",
"type": "uint8"
},
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "address payable",
"name": "recipient",
"type": "address"
},
{
"components": [
{
"internalType": "contract IAsset[]",
"name": "assets",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "minAmountsOut",
"type": "uint256[]"
},
{
"internalType": "bytes",
"name": "userData",
"type": "bytes"
},
{
"internalType": "bool",
"name": "toInternalBalance",
"type": "bool"
}
],
"internalType": "struct IVault.ExitPoolRequest",
"name": "request",
"type": "tuple"
},
{
"components": [
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "key",
"type": "uint256"
}
],
"internalType": "struct VaultActions.OutputReference[]",
"name": "outputReferences",
"type": "tuple[]"
}
],
"name": "exitPool",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "getEntrypoint",
"outputs": [
{
"internalType": "contract IBalancerRelayer",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getVault",
"outputs": [
{
"internalType": "contract IVault",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "poolId",
"type": "bytes32"
},
{
"internalType": "enum VaultActions.PoolKind",
"name": "kind",
"type": "uint8"
},
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"components": [
{
"internalType": "contract IAsset[]",
"name": "assets",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "maxAmountsIn",
"type": "uint256[]"
},
{
"internalType": "bytes",
"name": "userData",
"type": "bytes"
},
{
"internalType": "bool",
"name": "fromInternalBalance",
"type": "bool"
}
],
"internalType": "struct IVault.JoinPoolRequest",
"name": "request",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "outputReference",
"type": "uint256"
}
],
"name": "joinPool",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "enum IVault.UserBalanceOpKind",
"name": "kind",
"type": "uint8"
},
{
"internalType": "contract IAsset",
"name": "asset",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "address payable",
"name": "recipient",
"type": "address"
}
],
"internalType": "struct IVault.UserBalanceOp[]",
"name": "ops",
"type": "tuple[]"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "manageUserBalance",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "relayer",
"type": "address"
},
{
"internalType": "bool",
"name": "approved",
"type": "bool"
},
{
"internalType": "bytes",
"name": "authorisation",
"type": "bytes"
}
],
"name": "setRelayerApproval",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "outputReference",
"type": "uint256"
}
],
"name": "stakeETH",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "outputReference",
"type": "uint256"
}
],
"name": "stakeETHAndWrap",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "bytes32",
"name": "poolId",
"type": "bytes32"
},
{
"internalType": "enum IVault.SwapKind",
"name": "kind",
"type": "uint8"
},
{
"internalType": "contract IAsset",
"name": "assetIn",
"type": "address"
},
{
"internalType": "contract IAsset",
"name": "assetOut",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "userData",
"type": "bytes"
}
],
"internalType": "struct IVault.SingleSwap",
"name": "singleSwap",
"type": "tuple"
},
{
"components": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "bool",
"name": "fromInternalBalance",
"type": "bool"
},
{
"internalType": "address payable",
"name": "recipient",
"type": "address"
},
{
"internalType": "bool",
"name": "toInternalBalance",
"type": "bool"
}
],
"internalType": "struct IVault.FundManagement",
"name": "funds",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "limit",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "outputReference",
"type": "uint256"
}
],
"name": "swap",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IStaticATokenLM",
"name": "staticToken",
"type": "address"
},
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bool",
"name": "toUnderlying",
"type": "bool"
},
{
"internalType": "uint256",
"name": "outputReference",
"type": "uint256"
}
],
"name": "unwrapAaveStaticToken",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "outputReference",
"type": "uint256"
}
],
"name": "unwrapWstETH",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Permit",
"name": "token",
"type": "address"
},
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
},
{
"internalType": "uint8",
"name": "v",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "r",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"name": "vaultPermit",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20PermitDAI",
"name": "token",
"type": "address"
},
{
"internalType": "address",
"name": "holder",
"type": "address"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "expiry",
"type": "uint256"
},
{
"internalType": "bool",
"name": "allowed",
"type": "bool"
},
{
"internalType": "uint8",
"name": "v",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "r",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"name": "vaultPermitDAI",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IStaticATokenLM",
"name": "staticToken",
"type": "address"
},
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bool",
"name": "fromUnderlying",
"type": "bool"
},
{
"internalType": "uint256",
"name": "outputReference",
"type": "uint256"
}
],
"name": "wrapAaveDynamicToken",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "outputReference",
"type": "uint256"
}
],
"name": "wrapStETH",
"outputs": [],
"stateMutability": "payable",
"type": "function"
}
],
"bytecode": "0x6101406040527fae1dc54057af8e8e5ce068cdd4383149c7efcb30e8fb95b592ee1594367fb50960e0523480156200003657600080fd5b5060405162004415380380620044158339810160408190526200005991620001fa565b8082806001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200009557600080fd5b505afa158015620000aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d0919062000238565b6001600160601b0319606091821b81166080529082901b1660a05260405181903090620000fd90620001ec565b6200010a9291906200025e565b604051809103906000f08015801562000127573d6000803e3d6000fd5b5060601b6001600160601b03191660c052506001600160a01b03811662000150576000620001c7565b806001600160a01b031663c1fe3e486040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156200018c57600080fd5b505af1158015620001a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c7919062000238565b6001600160601b0319606091821b81166101005291901b166101205250620002919050565b61074f8062003cc683390190565b600080604083850312156200020d578182fd5b82516200021a8162000278565b60208401519092506200022d8162000278565b809150509250929050565b6000602082840312156200024a578081fd5b8151620002578162000278565b9392505050565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03811681146200028e57600080fd5b50565b60805160601c60a05160601c60c05160601c60e0516101005160601c6101205160601c6139a562000321600039806102e6528061037a52806103e05280610770528061082052806108e95280611ab55280611b0d5250806106ee528061074352806109b15280610a905280611bd6525080611fad525080610fc35250806110c3528061116d5250506139a56000f3fe60806040526004361061010e5760003560e01c806380db15bd116100a5578063959fc17a11610074578063d80952d511610059578063d80952d514610260578063db4c0e9114610273578063ecc02637146102865761010e565b8063959fc17a1461022d578063b6d24737146102405761010e565b806380db15bd146101df5780638d64cfbc146101f25780638d928af8146102055780638fe4624f1461021a5761010e565b80632e6272ea116100e15780632e6272ea14610177578063433b0865146101975780637ab6e03c146101aa5780637fd0e5d5146101bd5761010e565b80631089e5e31461011357806318369446146101285780631c982441146101515780632cbec84e14610164575b600080fd5b610126610121366004612926565b610299565b005b61013b610136366004612e6a565b610489565b6040516101489190613438565b60405180910390f35b61012661015f366004612854565b610696565b610126610172366004612926565b610993565b61018a610185366004612f66565b610ac7565b604051610148919061389f565b6101266101a5366004612d24565b610bf4565b6101266101b8366004612d24565b610ea3565b3480156101c957600080fd5b506101d2610fc1565b60405161014891906132b4565b6101266101ed366004612899565b610fe5565b610126610200366004612c6f565b6110f1565b34801561021157600080fd5b506101d261116b565b610126610228366004612b5f565b61118f565b61012661023b366004612bee565b6113c6565b34801561024c57600080fd5b5061012661025b366004612cf9565b611443565b61012661026e366004612ab7565b6114cf565b610126610281366004612854565b611a5d565b6101266102943660046129ea565b611c0d565b6102a282611d05565b156102b3576102b082611d50565b91505b6040517fb0e389000000000000000000000000000000000000000000000000000000000081526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b0e389009061031b90869060040161389f565b60206040518083038186803b15801561033357600080fd5b505afa158015610347573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061036b9190613054565b90506103a06001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001684611d6a565b6001600160a01b038416301461046b576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061041790879085906004016133d0565b602060405180830381600087803b15801561043157600080fd5b505af1158015610445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104699190612a9b565b505b61047482611d05565b15610483576104838282611de4565b50505050565b60603361049960208a018a612838565b6001600160a01b031614806104c25750306104b760208a018a612838565b6001600160a01b0316145b6104e75760405162461bcd60e51b81526004016104de9061376f565b60405180910390fd5b60005b8b5181101561054c5760008c828151811061050157fe5b602002602001015160600151905061051881611d05565b156105435761052681611d50565b8d838151811061053257fe5b602002602001015160600181815250505b506001016104ea565b50606061055761116b565b6001600160a01b031663945bcec9868f8f8f8f8f8f8f8f6040518a63ffffffff1660e01b8152600401610591989796959493929190613666565b6000604051808303818588803b1580156105aa57600080fd5b505af11580156105be573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526105e7919081019061295a565b905060005b838110156106855761061285858381811061060357fe5b90506040020160200135611d05565b61062e5760405162461bcd60e51b81526004016104de906137dd565b61067d85858381811061063d57fe5b905060400201602001356106788488888681811061065757fe5b905060400201600001358151811061066b57fe5b6020026020010151611df7565b611de4565b6001016105ec565b509c9b505050505050505050505050565b61069f82611d05565b156106b0576106ad82611d50565b91505b6001600160a01b0384163014610713576001600160a01b03841633146106e85760405162461bcd60e51b81526004016104de9061376f565b610713847f000000000000000000000000000000000000000000000000000000000000000084611e11565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b39061079a907f00000000000000000000000000000000000000000000000000000000000000009086906004016133d0565b602060405180830381600087803b1580156107b457600080fd5b505af11580156107c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ec9190612a9b565b506040517fea598cb00000000000000000000000000000000000000000000000000000000081526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ea598cb09061085590869060040161389f565b602060405180830381600087803b15801561086f57600080fd5b505af1158015610883573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a79190613054565b90506001600160a01b0384163014610974576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061092090879085906004016133d0565b602060405180830381600087803b15801561093a57600080fd5b505af115801561094e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109729190612a9b565b505b61097d82611d05565b1561098c5761098c8282611de4565b5050505050565b61099c82611d05565b156109ad576109aa82611d50565b91505b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a1903eab84306040518363ffffffff1660e01b81526004016109fc91906132b4565b6020604051808303818588803b158015610a1557600080fd5b505af1158015610a29573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a4e9190613054565b90506001600160a01b038416301461046b576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061041790879085906004016133d0565b600033610ad76020880188612838565b6001600160a01b03161480610b00575030610af56020880188612838565b6001600160a01b0316145b610b1c5760405162461bcd60e51b81526004016104de9061376f565b610b298760800151611d05565b15610b4157610b3b8760800151611d50565b60808801525b6000610b4b61116b565b6001600160a01b03166352bbbe29858a8a8a8a6040518663ffffffff1660e01b8152600401610b7d9493929190613814565b6020604051808303818588803b158015610b9657600080fd5b505af1158015610baa573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610bcf9190613054565b9050610bda83611d05565b15610be957610be98382611de4565b979650505050505050565b610bfd83611d05565b15610c0e57610c0b83611d50565b92505b600082610c8d57866001600160a01b03166351c0e0616040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610c5057600080fd5b505af1158015610c64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c889190612cdd565b610d00565b866001600160a01b0316634800d97f6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610cc857600080fd5b505af1158015610cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d009190612cdd565b90506001600160a01b0386163014610d45576001600160a01b0386163314610d3a5760405162461bcd60e51b81526004016104de9061376f565b610d45868286611e11565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063095ea7b390610d8c908a9088906004016133d0565b602060405180830381600087803b158015610da657600080fd5b505af1158015610dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dde9190612a9b565b506040517f2f2cab870000000000000000000000000000000000000000000000000000000081526000906001600160a01b03891690632f2cab8790610e2d908990899086908a9060040161340c565b602060405180830381600087803b158015610e4757600080fd5b505af1158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7f9190613054565b9050610e8a83611d05565b15610e9957610e998382611de4565b5050505050505050565b610eac83611d05565b15610ebd57610eba83611d50565b92505b6001600160a01b0385163014610f00576001600160a01b0385163314610ef55760405162461bcd60e51b81526004016104de9061376f565b610f00858785611e11565b6040517fead5d3590000000000000000000000000000000000000000000000000000000081526000906001600160a01b0388169063ead5d35990610f4c908890889088906004016133e9565b6040805180830381600087803b158015610f6557600080fd5b505af1158015610f79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9d919061306c565b915050610fa982611d05565b15610fb857610fb88282611de4565b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b038416301480610ffa575082155b6110165760405162461bcd60e51b81526004016104de906137a6565b606063fa6e671d60e01b338686604051602401611035939291906132c8565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090951694909417909352516110a4928691869101613281565b60408051601f1981840301815291905290506110e96001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001682611ead565b505050505050565b866001600160a01b031663d505accf8761110961116b565b88888888886040518863ffffffff1660e01b8152600401611130979695949392919061338f565b600060405180830381600087803b15801561114a57600080fd5b505af115801561115e573d6000803e3d6000fd5b5050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0385163314806111ae57506001600160a01b03851630145b6111ca5760405162461bcd60e51b81526004016104de9061376f565b60006111d588611f25565b905060006111e283611d05565b6111ed576000611282565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038316906370a08231906112329089906004016132b4565b60206040518083038186803b15801561124a57600080fd5b505afa15801561125e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112829190613054565b9050611292888660400151611f2b565b604086015261129f61116b565b6001600160a01b031663b95cac28858b8a8a8a6040518663ffffffff1660e01b81526004016112d194939291906135c0565b6000604051808303818588803b1580156112ea57600080fd5b505af11580156112fe573d6000803e3d6000fd5b505050505061130c83611d05565b156113bb576040517f70a082310000000000000000000000000000000000000000000000000000000081526000906001600160a01b038416906370a0823190611359908a906004016132b4565b60206040518083038186803b15801561137157600080fd5b505afa158015611385573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a99190613054565b90506113b9846106788385611f59565b505b505050505050505050565b876001600160a01b0316638fcbaf0c886113de61116b565b8989898989896040518963ffffffff1660e01b8152600401611407989796959493929190613346565b600060405180830381600087803b15801561142157600080fd5b505af1158015611435573d6000803e3d6000fd5b505050505050505050505050565b816001600160a01b031663095ea7b361145a61116b565b836040518363ffffffff1660e01b81526004016114789291906133d0565b602060405180830381600087803b15801561149257600080fd5b505af11580156114a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ca9190612a9b565b505050565b6001600160a01b0385163314806114ee57506001600160a01b03851630145b61150a5760405162461bcd60e51b81526004016104de9061376f565b60608167ffffffffffffffff8111801561152357600080fd5b5060405190808252806020026020018201604052801561154d578160200160208202803683370190505b50905060608267ffffffffffffffff8111801561156957600080fd5b50604051908082528060200260200182016040528015611593578160200160208202803683370190505b50905060005b83811015611703576115b085858381811061060357fe5b6115cc5760405162461bcd60e51b81526004016104de906137dd565b85516000908686848181106115dd57fe5b90506040020160000135815181106115f157fe5b6020026020010151905086606001511561163f5761160e81611f6f565b84838151811061161a57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506116fa565b61164881611f72565b6116d55761165581611f6f565b6001600160a01b03166370a08231896040518263ffffffff1660e01b815260040161168091906132b4565b60206040518083038186803b15801561169857600080fd5b505afa1580156116ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d09190613054565b6116e1565b876001600160a01b0316315b8383815181106116ed57fe5b6020026020010181815250505b50600101611599565b5084606001511561179a5761171661116b565b6001600160a01b0316630f5a6efa87846040518363ffffffff1660e01b81526004016117439291906132ec565b60006040518083038186803b15801561175b57600080fd5b505afa15801561176f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117979190810190612a60565b90505b6117a8888660400151611f7f565b60408601526117b561116b565b6001600160a01b0316638bdb39138a8989896040518563ffffffff1660e01b81526004016117e694939291906135c0565b600060405180830381600087803b15801561180057600080fd5b505af1158015611814573d6000803e3d6000fd5b50606092508591505067ffffffffffffffff8111801561183357600080fd5b5060405190808252806020026020018201604052801561185d578160200160208202803683370190505b5090508560600151156118fa5761187261116b565b6001600160a01b0316630f5a6efa88856040518363ffffffff1660e01b815260040161189f9291906132ec565b60006040518083038186803b1580156118b757600080fd5b505afa1580156118cb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118f39190810190612a60565b90506119f8565b60005b848110156119f657865160009087878481811061191657fe5b905060400201600001358151811061192a57fe5b6020026020010151905061193d81611f72565b6119ca5761194a81611f6f565b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040161197591906132b4565b60206040518083038186803b15801561198d57600080fd5b505afa1580156119a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c59190613054565b6119d6565b886001600160a01b0316315b8383815181106119e257fe5b6020908102919091010152506001016118fd565b505b60005b8481101561115e57611a55868683818110611a1257fe5b90506040020160200135610678858481518110611a2b57fe5b6020026020010151858581518110611a3f57fe5b6020026020010151611f5990919063ffffffff16565b6001016119fb565b611a6682611d05565b15611a7757611a7482611d50565b91505b6001600160a01b0384163014611ada576001600160a01b0384163314611aaf5760405162461bcd60e51b81526004016104de9061376f565b611ada847f000000000000000000000000000000000000000000000000000000000000000084611e11565b6040517fde0e9a3e0000000000000000000000000000000000000000000000000000000081526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063de0e9a3e90611b4290869060040161389f565b602060405180830381600087803b158015611b5c57600080fd5b505af1158015611b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b949190613054565b90506001600160a01b0384163014610974576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061092090879085906004016133d0565b60005b82811015611ca15733848483818110611c2557fe5b905060a002016060016020810190611c3d9190612838565b6001600160a01b03161480611c7d575030848483818110611c5a57fe5b905060a002016060016020810190611c729190612838565b6001600160a01b0316145b611c995760405162461bcd60e51b81526004016104de9061376f565b600101611c10565b50611caa61116b565b6001600160a01b0316630e8e3e848285856040518463ffffffff1660e01b8152600401611cd892919061347c565b6000604051808303818588803b158015611cf157600080fd5b505af1158015610e99573d6000803e3d6000fd5b7fba100000000000000000000000000000000000000000000000000000000000007fffff0000000000000000000000000000000000000000000000000000000000008216145b919050565b600080611d5c83611fa6565b805460009091559392505050565b611d79814710156101a3611ffc565b6000826001600160a01b031682604051611d9290611f6f565b60006040518083038185875af1925050503d8060008114611dcf576040519150601f19603f3d011682016040523d82523d6000602084013e611dd4565b606091505b505090506114ca816101a4611ffc565b6000611def83611fa6565b919091555050565b6000808213611e095781600003611e0b565b815b92915050565b80611e1b576114ca565b604080516001808252818301909252606091602080830190803683370190505090508281600081518110611e4b57fe5b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092526060918160200160208202803683370190505090508281600081518110611e9657fe5b60200260200101818152505061098c85838361200e565b606060006060846001600160a01b031684604051611ecb9190613265565b6000604051808303816000865af19150503d8060008114611f08576040519150601f19603f3d011682016040523d82523d6000602084013e611f0d565b606091505b5091509150611f1c8282612148565b95945050505050565b60601c90565b60606000838015611f3857fe5b1415611f4e57611f4782612172565b9050611e0b565b611e0b6101366121af565b6000611f69838311156001611ffc565b50900390565b90565b6001600160a01b03161590565b60606000838015611f8c57fe5b1415611f9b57611f4782612202565b611e0b6101506121af565b60006001827f0000000000000000000000000000000000000000000000000000000000000000604051602001611fdd9291906132a6565b60408051808303601f1901815291905280516020909101200392915050565b8161200a5761200a816121af565b5050565b6060825167ffffffffffffffff8111801561202857600080fd5b5060405190808252806020026020018201604052801561206257816020015b61204f61241c565b8152602001906001900390816120475790505b50905060005b83518110156120fa576040805160a08101909152806003815260200185838151811061209057fe5b60200260200101516001600160a01b031681526020018483815181106120b257fe5b60200260200101518152602001866001600160a01b03168152602001306001600160a01b03168152508282815181106120e757fe5b6020908102919091010152600101612068565b5061210361116b565b6001600160a01b0316630e8e3e84826040518263ffffffff1660e01b815260040161212e919061352a565b600060405180830381600087803b158015611cf157600080fd5b60608215612157575080611e0b565b8151156121675781518083602001fd5b611e0b6101ae6121af565b6060600061217f8361224b565b9050600181600381111561218f57fe5b14156121a65761219e83612261565b915050611d4b565b82915050611d4b565b62461bcd60e51b6000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b6060600061220f8361224b565b9050600081600381111561221f57fe5b141561222e5761219e8361230f565b600181600381111561223c57fe5b14156121a65761219e83612372565b600081806020019051810190611e0b9190612d93565b606080600061226f846123c5565b915091506000805b83518110156122d557600084828151811061228e57fe5b602002602001015190506122a181611d05565b156122cc576122af81611d50565b8583815181106122bb57fe5b602002602001018181525050600192505b50600101612277565b50806122e15784611f1c565b600183836040516020016122f793929190613634565b60405160208183030381529060405295945050505050565b606060008061231d846123e8565b9150915061232a82611d05565b156123685761233882611d50565b91506000828260405160200161235093929190613613565b60405160208183030381529060405292505050611d4b565b8392505050611d4b565b6060600061237f836123ff565b905061238a81611d05565b156121a65761239881611d50565b90506001816040516020016123ae9291906135fc565b604051602081830303815290604052915050611d4b565b60606000828060200190518101906123dd9190612e12565b909590945092505050565b600080828060200190518101906123dd9190612ddc565b6000818060200190518101906124159190612daf565b9392505050565b6040805160a081019091528060008152600060208201819052604082018190526060820181905260809091015290565b8035611e0b8161393f565b60008083601f840112612468578182fd5b50813567ffffffffffffffff81111561247f578182fd5b602083019150836020808302850101111561249957600080fd5b9250929050565b600082601f8301126124b0578081fd5b81356124c36124be826138cf565b6138a8565b8181529150602080830190848101818402860182018710156124e457600080fd5b60005b8481101561250c5781356124fa8161393f565b845292820192908201906001016124e7565b505050505092915050565b600082601f830112612527578081fd5b81356125356124be826138cf565b818152915060208083019084810160005b8481101561250c578135870160a080601f19838c0301121561256757600080fd5b612570816138a8565b85830135815260408084013587830152606080850135828401526080915081850135818401525082840135925067ffffffffffffffff8311156125b257600080fd5b6125c08c88858701016126e2565b90820152865250509282019290820190600101612546565b60008083601f8401126125e9578182fd5b50813567ffffffffffffffff811115612600578182fd5b60208301915083602060408302850101111561249957600080fd5b600082601f83011261262b578081fd5b81356126396124be826138cf565b81815291506020808301908481018184028601820187101561265a57600080fd5b60005b8481101561250c5781358452928201929082019060010161265d565b600082601f830112612689578081fd5b81516126976124be826138cf565b8181529150602080830190848101818402860182018710156126b857600080fd5b60005b8481101561250c578151845292820192908201906001016126bb565b8035611e0b81613954565b600082601f8301126126f2578081fd5b813567ffffffffffffffff811115612708578182fd5b61271b6020601f19601f840116016138a8565b915080825283602082850101111561273257600080fd5b8060208401602084013760009082016020015292915050565b803560018110611e0b57600080fd5b803560028110611e0b57600080fd5b60006080828403121561277a578081fd5b61278460806138a8565b9050813567ffffffffffffffff8082111561279e57600080fd5b6127aa858386016124a0565b835260208401359150808211156127c057600080fd5b6127cc8583860161261b565b602084015260408401359150808211156127e557600080fd5b506127f2848285016126e2565b60408301525061280583606084016126d7565b606082015292915050565b600060808284031215612821578081fd5b50919050565b803560ff81168114611e0b57600080fd5b600060208284031215612849578081fd5b81356124158161393f565b60008060008060808587031215612869578283fd5b84356128748161393f565b935060208501356128848161393f565b93969395505050506040820135916060013590565b600080600080606085870312156128ae578182fd5b84356128b98161393f565b935060208501356128c981613954565b9250604085013567ffffffffffffffff808211156128e5578384fd5b818701915087601f8301126128f8578384fd5b813581811115612906578485fd5b886020828501011115612917578485fd5b95989497505060200194505050565b60008060006060848603121561293a578081fd5b83356129458161393f565b95602085013595506040909401359392505050565b6000602080838503121561296c578182fd5b825167ffffffffffffffff811115612982578283fd5b8301601f81018513612992578283fd5b80516129a06124be826138cf565b81815283810190838501858402850186018910156129bc578687fd5b8694505b838510156129de5780518352600194909401939185019185016129c0565b50979650505050505050565b6000806000604084860312156129fe578081fd5b833567ffffffffffffffff80821115612a15578283fd5b818601915086601f830112612a28578283fd5b813581811115612a36578384fd5b87602060a083028501011115612a4a578384fd5b6020928301989097509590910135949350505050565b600060208284031215612a71578081fd5b815167ffffffffffffffff811115612a87578182fd5b612a9384828501612679565b949350505050565b600060208284031215612aac578081fd5b815161241581613954565b600080600080600080600060c0888a031215612ad1578485fd5b87359650612ae28960208a0161274b565b95506040880135612af28161393f565b94506060880135612b028161393f565b9350608088013567ffffffffffffffff80821115612b1e578485fd5b612b2a8b838c01612769565b945060a08a0135915080821115612b3f578384fd5b50612b4c8a828b016125d8565b989b979a50959850939692959293505050565b600080600080600080600060e0888a031215612b79578081fd5b87359650612b8a8960208a0161274b565b95506040880135612b9a8161393f565b94506060880135612baa8161393f565b9350608088013567ffffffffffffffff811115612bc5578182fd5b612bd18a828b01612769565b93505060a0880135915060c0880135905092959891949750929550565b600080600080600080600080610100898b031215612c0a578182fd5b8835612c158161393f565b97506020890135612c258161393f565b965060408901359550606089013594506080890135612c4381613954565b9350612c528a60a08b01612827565b925060c0890135915060e089013590509295985092959890939650565b600080600080600080600060e0888a031215612c89578081fd5b8735612c948161393f565b96506020880135612ca48161393f565b95506040880135945060608801359350612cc18960808a01612827565b925060a0880135915060c0880135905092959891949750929550565b600060208284031215612cee578081fd5b81516124158161393f565b60008060408385031215612d0b578182fd5b8235612d168161393f565b946020939093013593505050565b60008060008060008060c08789031215612d3c578384fd5b8635612d478161393f565b95506020870135612d578161393f565b94506040870135612d678161393f565b9350606087013592506080870135612d7e81613954565b8092505060a087013590509295509295509295565b600060208284031215612da4578081fd5b815161241581613962565b60008060408385031215612dc1578182fd5b8251612dcc81613962565b6020939093015192949293505050565b600080600060608486031215612df0578081fd5b8351612dfb81613962565b602085015160409095015190969495509392505050565b600080600060608486031215612e26578081fd5b8351612e3181613962565b602085015190935067ffffffffffffffff811115612e4d578182fd5b612e5986828701612679565b925050604084015190509250925092565b60008060008060008060008060008060006101608c8e031215612e8b578485fd5b612e958d8d61275a565b9a5067ffffffffffffffff8060208e01351115612eb0578586fd5b612ec08e60208f01358f01612517565b9a508060408e01351115612ed2578586fd5b612ee28e60408f01358f01612457565b909a509850612ef48e60608f01612810565b97508060e08e01351115612f06578586fd5b612f168e60e08f01358f01612457565b90975095506101008d013594506101208d013593506101408d0135811015612f3c578283fd5b50612f4e8d6101408e01358e016125d8565b81935080925050509295989b509295989b9093969950565b6000806000806000806101208789031215612f7f578384fd5b863567ffffffffffffffff80821115612f96578586fd5b9088019060c0828b031215612fa9578586fd5b612fb360c06138a8565b82358152612fc48b6020850161275a565b60208201526040830135612fd78161393f565b6040820152612fe98b6060850161244c565b60608201526080830135608082015260a083013582811115613009578788fd5b6130158c8286016126e2565b60a08301525080985050505061302e8860208901612810565b959895975050505060a08401359360c08101359360e08201359350610100909101359150565b600060208284031215613065578081fd5b5051919050565b6000806040838503121561307e578182fd5b505080516020909101519092909150565b6001600160a01b03169052565b60008284526020808501945082825b858110156130d95781356130be8161393f565b6001600160a01b0316875295820195908201906001016130ab565b509495945050505050565b60008284526020808501945082825b858110156130d9578135875295820195908201906001016130f3565b6000815180845260208085019450808401835b838110156130d957815187529582019590820190600101613122565b15159052565b6000815180845261315c8160208601602086016138fc565b601f01601f19169290920160200192915050565b8051608080845281519084018190526000916020919082019060a0860190845b818110156131b55783516001600160a01b031683529284019291840191600101613190565b5050828501519150858103838701526131ce818361310f565b92505050604083015184820360408601526131e98282613144565b91505060608301516131fe606086018261313e565b509392505050565b80356132118161393f565b6001600160a01b03908116835260208201359061322d82613954565b90151560208401526040820135906132448261393f565b166040830152606081013561325881613954565b8015156060840152505050565b600082516132778184602087016138fc565b9190910192915050565b600084516132938184602089016138fc565b8201838582379092019182525092915050565b918252602082015260400190565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152901515604082015260600190565b6000604082016001600160a01b03808616845260206040818601528286518085526060870191508288019450855b8181101561333857855185168352948301949183019160010161331a565b509098975050505050505050565b6001600160a01b039889168152969097166020870152604086019490945260608501929092521515608084015260ff1660a083015260c082015260e08101919091526101000190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393909316835260208301919091521515604082015260600190565b6001600160a01b03949094168452602084019290925261ffff1660408301521515606082015260800190565b6020808252825182820181905260009190848201906040850190845b8181101561347057835183529284019291840191600101613454565b50909695505050505050565b6020808252818101839052600090604080840186845b8781101561351d5781356134a581613962565b6134ae81613928565b8352818501356134bd8161393f565b6001600160a01b031683860152818401358484015260606134e0818401846138ef565b6134ec8286018261308f565b505060806134fc818401846138ef565b6135088286018261308f565b505060a0928301929190910190600101613492565b5090979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156135b3578151805161355c81613928565b8552808701516001600160a01b03168786015285810151868601526060808201516135898288018261308f565b50506080908101519061359e8682018361308f565b505060a0939093019290850190600101613547565b5091979650505050505050565b60008582526001600160a01b038086166020840152808516604084015250608060608301526135f26080830184613170565b9695505050505050565b6040810161360984613928565b9281526020015290565b6060810161362085613928565b938152602081019290925260409091015290565b600061363f85613928565b84825260606020830152613656606083018561310f565b9050826040830152949350505050565b60006101208083016136778c613935565b8b84526020808501929092528a5190819052610140808501928281028601909101918c8201855b8281101561371e578785037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec00186528151805186528481015185870152604080820151908701526060808201519087015260809081015160a09187018290529061370a81880183613144565b97860197965050509083019060010161369e565b505050508381036040850152613735818a8c61309c565b9150506137456060840188613206565b82810360e08401526137588186886130e4565b915050826101008301529998505050505050505050565b60208082526010908201527f496e636f72726563742073656e64657200000000000000000000000000000000604082015260600190565b6020808252601f908201527f52656c617965722063616e206f6e6c7920617070726f766520697473656c6600604082015260600190565b60208082526019908201527f696e76616c696420636861696e6564207265666572656e636500000000000000604082015260600190565b600060e08252855160e0830152602086015161382f81613935565b61010083015260408601516001600160a01b03908116610120840152606087015116610140830152608086015161016083015260a086015160c061018084015261387d6101a0840182613144565b91505061388d6020830186613206565b60a082019390935260c0015292915050565b90815260200190565b60405181810167ffffffffffffffff811182821017156138c757600080fd5b604052919050565b600067ffffffffffffffff8211156138e5578081fd5b5060209081020190565b600082356124158161393f565b60005b838110156139175781810151838201526020016138ff565b838111156104835750506000910152565b6004811061393257fe5b50565b6002811061393257fe5b6001600160a01b038116811461393257600080fd5b801515811461393257600080fd5b6004811061393257600080fdfea2646970667358221220ca9b18e46ddedb91380084b41ec5db4b9ef22aec5e474a5296f4dd1961e9082364736f6c6343000701003360c060405234801561001057600080fd5b5060405161074f38038061074f83398101604081905261002f91610052565b60016000556001600160601b0319606092831b8116608052911b1660a0526100a3565b60008060408385031215610064578182fd5b825161006f8161008b565b60208401519092506100808161008b565b809150509250929050565b6001600160a01b03811681146100a057600080fd5b50565b60805160601c60a05160601c61067b6100d46000398060fc528061020f52508060585280610120525061067b6000f3fe6080604052600436106100385760003560e01c80637678922e146100885780638d928af8146100b3578063ac9650d8146100c857610083565b36610083576100813373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146102066100e8565b005b600080fd5b34801561009457600080fd5b5061009d6100fa565b6040516100aa91906104d6565b60405180910390f35b3480156100bf57600080fd5b5061009d61011e565b6100db6100d6366004610448565b610142565b6040516100aa91906104f7565b816100f6576100f68161026e565b5050565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b606061014c6102db565b8167ffffffffffffffff8111801561016357600080fd5b5060405190808252806020026020018201604052801561019757816020015b60608152602001906001900390816101825790505b50905060005b82811015610257576102388484838181106101b457fe5b90506020028101906101c691906105ab565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016929150506102f4565b82828151811061024457fe5b602090810291909101015260010161019d565b50610260610377565b61026861038b565b92915050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b6102ed600260005414156101906100e8565b6002600055565b6060600060608473ffffffffffffffffffffffffffffffffffffffff168460405161031f91906104b7565b600060405180830381855af49150503d806000811461035a576040519150601f19603f3d011682016040523d82523d6000602084013e61035f565b606091505b509150915061036e8282610392565b95945050505050565b4780156103885761038833826103bc565b50565b6001600055565b606082156103a1575080610268565b8151156103b15781518083602001fd5b6102686101ae61026e565b6103cb814710156101a36100e8565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516103f1906104d3565b60006040518083038185875af1925050503d806000811461042e576040519150601f19603f3d011682016040523d82523d6000602084013e610433565b606091505b50509050610443816101a46100e8565b505050565b6000806020838503121561045a578182fd5b823567ffffffffffffffff80821115610471578384fd5b818501915085601f830112610484578384fd5b813581811115610492578485fd5b86602080830285010111156104a5578485fd5b60209290920196919550909350505050565b600082516104c9818460208701610615565b9190910192915050565b90565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6000602080830181845280855180835260408601915060408482028701019250838701855b8281101561059e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845281518051808752610561818989018a8501610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169590950186019450928501929085019060010161051c565b5092979650505050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126105df578283fd5b83018035915067ffffffffffffffff8211156105f9578283fd5b60200191503681900382131561060e57600080fd5b9250929050565b60005b83811015610630578181015183820152602001610618565b8381111561063f576000848401525b5050505056fea2646970667358221220cc598b4a8bf1e4a2e99c141298c681681ab59d8d380078ccf785ce580934a5ae64736f6c63430007010033",
"deployedBytecode": "0x60806040526004361061010e5760003560e01c806380db15bd116100a5578063959fc17a11610074578063d80952d511610059578063d80952d514610260578063db4c0e9114610273578063ecc02637146102865761010e565b8063959fc17a1461022d578063b6d24737146102405761010e565b806380db15bd146101df5780638d64cfbc146101f25780638d928af8146102055780638fe4624f1461021a5761010e565b80632e6272ea116100e15780632e6272ea14610177578063433b0865146101975780637ab6e03c146101aa5780637fd0e5d5146101bd5761010e565b80631089e5e31461011357806318369446146101285780631c982441146101515780632cbec84e14610164575b600080fd5b610126610121366004612926565b610299565b005b61013b610136366004612e6a565b610489565b6040516101489190613438565b60405180910390f35b61012661015f366004612854565b610696565b610126610172366004612926565b610993565b61018a610185366004612f66565b610ac7565b604051610148919061389f565b6101266101a5366004612d24565b610bf4565b6101266101b8366004612d24565b610ea3565b3480156101c957600080fd5b506101d2610fc1565b60405161014891906132b4565b6101266101ed366004612899565b610fe5565b610126610200366004612c6f565b6110f1565b34801561021157600080fd5b506101d261116b565b610126610228366004612b5f565b61118f565b61012661023b366004612bee565b6113c6565b34801561024c57600080fd5b5061012661025b366004612cf9565b611443565b61012661026e366004612ab7565b6114cf565b610126610281366004612854565b611a5d565b6101266102943660046129ea565b611c0d565b6102a282611d05565b156102b3576102b082611d50565b91505b6040517fb0e389000000000000000000000000000000000000000000000000000000000081526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b0e389009061031b90869060040161389f565b60206040518083038186803b15801561033357600080fd5b505afa158015610347573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061036b9190613054565b90506103a06001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001684611d6a565b6001600160a01b038416301461046b576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061041790879085906004016133d0565b602060405180830381600087803b15801561043157600080fd5b505af1158015610445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104699190612a9b565b505b61047482611d05565b15610483576104838282611de4565b50505050565b60603361049960208a018a612838565b6001600160a01b031614806104c25750306104b760208a018a612838565b6001600160a01b0316145b6104e75760405162461bcd60e51b81526004016104de9061376f565b60405180910390fd5b60005b8b5181101561054c5760008c828151811061050157fe5b602002602001015160600151905061051881611d05565b156105435761052681611d50565b8d838151811061053257fe5b602002602001015160600181815250505b506001016104ea565b50606061055761116b565b6001600160a01b031663945bcec9868f8f8f8f8f8f8f8f6040518a63ffffffff1660e01b8152600401610591989796959493929190613666565b6000604051808303818588803b1580156105aa57600080fd5b505af11580156105be573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526105e7919081019061295a565b905060005b838110156106855761061285858381811061060357fe5b90506040020160200135611d05565b61062e5760405162461bcd60e51b81526004016104de906137dd565b61067d85858381811061063d57fe5b905060400201602001356106788488888681811061065757fe5b905060400201600001358151811061066b57fe5b6020026020010151611df7565b611de4565b6001016105ec565b509c9b505050505050505050505050565b61069f82611d05565b156106b0576106ad82611d50565b91505b6001600160a01b0384163014610713576001600160a01b03841633146106e85760405162461bcd60e51b81526004016104de9061376f565b610713847f000000000000000000000000000000000000000000000000000000000000000084611e11565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b39061079a907f00000000000000000000000000000000000000000000000000000000000000009086906004016133d0565b602060405180830381600087803b1580156107b457600080fd5b505af11580156107c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ec9190612a9b565b506040517fea598cb00000000000000000000000000000000000000000000000000000000081526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ea598cb09061085590869060040161389f565b602060405180830381600087803b15801561086f57600080fd5b505af1158015610883573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a79190613054565b90506001600160a01b0384163014610974576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061092090879085906004016133d0565b602060405180830381600087803b15801561093a57600080fd5b505af115801561094e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109729190612a9b565b505b61097d82611d05565b1561098c5761098c8282611de4565b5050505050565b61099c82611d05565b156109ad576109aa82611d50565b91505b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a1903eab84306040518363ffffffff1660e01b81526004016109fc91906132b4565b6020604051808303818588803b158015610a1557600080fd5b505af1158015610a29573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a4e9190613054565b90506001600160a01b038416301461046b576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061041790879085906004016133d0565b600033610ad76020880188612838565b6001600160a01b03161480610b00575030610af56020880188612838565b6001600160a01b0316145b610b1c5760405162461bcd60e51b81526004016104de9061376f565b610b298760800151611d05565b15610b4157610b3b8760800151611d50565b60808801525b6000610b4b61116b565b6001600160a01b03166352bbbe29858a8a8a8a6040518663ffffffff1660e01b8152600401610b7d9493929190613814565b6020604051808303818588803b158015610b9657600080fd5b505af1158015610baa573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610bcf9190613054565b9050610bda83611d05565b15610be957610be98382611de4565b979650505050505050565b610bfd83611d05565b15610c0e57610c0b83611d50565b92505b600082610c8d57866001600160a01b03166351c0e0616040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610c5057600080fd5b505af1158015610c64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c889190612cdd565b610d00565b866001600160a01b0316634800d97f6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610cc857600080fd5b505af1158015610cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d009190612cdd565b90506001600160a01b0386163014610d45576001600160a01b0386163314610d3a5760405162461bcd60e51b81526004016104de9061376f565b610d45868286611e11565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063095ea7b390610d8c908a9088906004016133d0565b602060405180830381600087803b158015610da657600080fd5b505af1158015610dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dde9190612a9b565b506040517f2f2cab870000000000000000000000000000000000000000000000000000000081526000906001600160a01b03891690632f2cab8790610e2d908990899086908a9060040161340c565b602060405180830381600087803b158015610e4757600080fd5b505af1158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7f9190613054565b9050610e8a83611d05565b15610e9957610e998382611de4565b5050505050505050565b610eac83611d05565b15610ebd57610eba83611d50565b92505b6001600160a01b0385163014610f00576001600160a01b0385163314610ef55760405162461bcd60e51b81526004016104de9061376f565b610f00858785611e11565b6040517fead5d3590000000000000000000000000000000000000000000000000000000081526000906001600160a01b0388169063ead5d35990610f4c908890889088906004016133e9565b6040805180830381600087803b158015610f6557600080fd5b505af1158015610f79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9d919061306c565b915050610fa982611d05565b15610fb857610fb88282611de4565b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b038416301480610ffa575082155b6110165760405162461bcd60e51b81526004016104de906137a6565b606063fa6e671d60e01b338686604051602401611035939291906132c8565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090951694909417909352516110a4928691869101613281565b60408051601f1981840301815291905290506110e96001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001682611ead565b505050505050565b866001600160a01b031663d505accf8761110961116b565b88888888886040518863ffffffff1660e01b8152600401611130979695949392919061338f565b600060405180830381600087803b15801561114a57600080fd5b505af115801561115e573d6000803e3d6000fd5b5050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0385163314806111ae57506001600160a01b03851630145b6111ca5760405162461bcd60e51b81526004016104de9061376f565b60006111d588611f25565b905060006111e283611d05565b6111ed576000611282565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038316906370a08231906112329089906004016132b4565b60206040518083038186803b15801561124a57600080fd5b505afa15801561125e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112829190613054565b9050611292888660400151611f2b565b604086015261129f61116b565b6001600160a01b031663b95cac28858b8a8a8a6040518663ffffffff1660e01b81526004016112d194939291906135c0565b6000604051808303818588803b1580156112ea57600080fd5b505af11580156112fe573d6000803e3d6000fd5b505050505061130c83611d05565b156113bb576040517f70a082310000000000000000000000000000000000000000000000000000000081526000906001600160a01b038416906370a0823190611359908a906004016132b4565b60206040518083038186803b15801561137157600080fd5b505afa158015611385573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a99190613054565b90506113b9846106788385611f59565b505b505050505050505050565b876001600160a01b0316638fcbaf0c886113de61116b565b8989898989896040518963ffffffff1660e01b8152600401611407989796959493929190613346565b600060405180830381600087803b15801561142157600080fd5b505af1158015611435573d6000803e3d6000fd5b505050505050505050505050565b816001600160a01b031663095ea7b361145a61116b565b836040518363ffffffff1660e01b81526004016114789291906133d0565b602060405180830381600087803b15801561149257600080fd5b505af11580156114a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ca9190612a9b565b505050565b6001600160a01b0385163314806114ee57506001600160a01b03851630145b61150a5760405162461bcd60e51b81526004016104de9061376f565b60608167ffffffffffffffff8111801561152357600080fd5b5060405190808252806020026020018201604052801561154d578160200160208202803683370190505b50905060608267ffffffffffffffff8111801561156957600080fd5b50604051908082528060200260200182016040528015611593578160200160208202803683370190505b50905060005b83811015611703576115b085858381811061060357fe5b6115cc5760405162461bcd60e51b81526004016104de906137dd565b85516000908686848181106115dd57fe5b90506040020160000135815181106115f157fe5b6020026020010151905086606001511561163f5761160e81611f6f565b84838151811061161a57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506116fa565b61164881611f72565b6116d55761165581611f6f565b6001600160a01b03166370a08231896040518263ffffffff1660e01b815260040161168091906132b4565b60206040518083038186803b15801561169857600080fd5b505afa1580156116ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d09190613054565b6116e1565b876001600160a01b0316315b8383815181106116ed57fe5b6020026020010181815250505b50600101611599565b5084606001511561179a5761171661116b565b6001600160a01b0316630f5a6efa87846040518363ffffffff1660e01b81526004016117439291906132ec565b60006040518083038186803b15801561175b57600080fd5b505afa15801561176f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117979190810190612a60565b90505b6117a8888660400151611f7f565b60408601526117b561116b565b6001600160a01b0316638bdb39138a8989896040518563ffffffff1660e01b81526004016117e694939291906135c0565b600060405180830381600087803b15801561180057600080fd5b505af1158015611814573d6000803e3d6000fd5b50606092508591505067ffffffffffffffff8111801561183357600080fd5b5060405190808252806020026020018201604052801561185d578160200160208202803683370190505b5090508560600151156118fa5761187261116b565b6001600160a01b0316630f5a6efa88856040518363ffffffff1660e01b815260040161189f9291906132ec565b60006040518083038186803b1580156118b757600080fd5b505afa1580156118cb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118f39190810190612a60565b90506119f8565b60005b848110156119f657865160009087878481811061191657fe5b905060400201600001358151811061192a57fe5b6020026020010151905061193d81611f72565b6119ca5761194a81611f6f565b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040161197591906132b4565b60206040518083038186803b15801561198d57600080fd5b505afa1580156119a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c59190613054565b6119d6565b886001600160a01b0316315b8383815181106119e257fe5b6020908102919091010152506001016118fd565b505b60005b8481101561115e57611a55868683818110611a1257fe5b90506040020160200135610678858481518110611a2b57fe5b6020026020010151858581518110611a3f57fe5b6020026020010151611f5990919063ffffffff16565b6001016119fb565b611a6682611d05565b15611a7757611a7482611d50565b91505b6001600160a01b0384163014611ada576001600160a01b0384163314611aaf5760405162461bcd60e51b81526004016104de9061376f565b611ada847f000000000000000000000000000000000000000000000000000000000000000084611e11565b6040517fde0e9a3e0000000000000000000000000000000000000000000000000000000081526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063de0e9a3e90611b4290869060040161389f565b602060405180830381600087803b158015611b5c57600080fd5b505af1158015611b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b949190613054565b90506001600160a01b0384163014610974576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061092090879085906004016133d0565b60005b82811015611ca15733848483818110611c2557fe5b905060a002016060016020810190611c3d9190612838565b6001600160a01b03161480611c7d575030848483818110611c5a57fe5b905060a002016060016020810190611c729190612838565b6001600160a01b0316145b611c995760405162461bcd60e51b81526004016104de9061376f565b600101611c10565b50611caa61116b565b6001600160a01b0316630e8e3e848285856040518463ffffffff1660e01b8152600401611cd892919061347c565b6000604051808303818588803b158015611cf157600080fd5b505af1158015610e99573d6000803e3d6000fd5b7fba100000000000000000000000000000000000000000000000000000000000007fffff0000000000000000000000000000000000000000000000000000000000008216145b919050565b600080611d5c83611fa6565b805460009091559392505050565b611d79814710156101a3611ffc565b6000826001600160a01b031682604051611d9290611f6f565b60006040518083038185875af1925050503d8060008114611dcf576040519150601f19603f3d011682016040523d82523d6000602084013e611dd4565b606091505b505090506114ca816101a4611ffc565b6000611def83611fa6565b919091555050565b6000808213611e095781600003611e0b565b815b92915050565b80611e1b576114ca565b604080516001808252818301909252606091602080830190803683370190505090508281600081518110611e4b57fe5b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092526060918160200160208202803683370190505090508281600081518110611e9657fe5b60200260200101818152505061098c85838361200e565b606060006060846001600160a01b031684604051611ecb9190613265565b6000604051808303816000865af19150503d8060008114611f08576040519150601f19603f3d011682016040523d82523d6000602084013e611f0d565b606091505b5091509150611f1c8282612148565b95945050505050565b60601c90565b60606000838015611f3857fe5b1415611f4e57611f4782612172565b9050611e0b565b611e0b6101366121af565b6000611f69838311156001611ffc565b50900390565b90565b6001600160a01b03161590565b60606000838015611f8c57fe5b1415611f9b57611f4782612202565b611e0b6101506121af565b60006001827f0000000000000000000000000000000000000000000000000000000000000000604051602001611fdd9291906132a6565b60408051808303601f1901815291905280516020909101200392915050565b8161200a5761200a816121af565b5050565b6060825167ffffffffffffffff8111801561202857600080fd5b5060405190808252806020026020018201604052801561206257816020015b61204f61241c565b8152602001906001900390816120475790505b50905060005b83518110156120fa576040805160a08101909152806003815260200185838151811061209057fe5b60200260200101516001600160a01b031681526020018483815181106120b257fe5b60200260200101518152602001866001600160a01b03168152602001306001600160a01b03168152508282815181106120e757fe5b6020908102919091010152600101612068565b5061210361116b565b6001600160a01b0316630e8e3e84826040518263ffffffff1660e01b815260040161212e919061352a565b600060405180830381600087803b158015611cf157600080fd5b60608215612157575080611e0b565b8151156121675781518083602001fd5b611e0b6101ae6121af565b6060600061217f8361224b565b9050600181600381111561218f57fe5b14156121a65761219e83612261565b915050611d4b565b82915050611d4b565b62461bcd60e51b6000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b6060600061220f8361224b565b9050600081600381111561221f57fe5b141561222e5761219e8361230f565b600181600381111561223c57fe5b14156121a65761219e83612372565b600081806020019051810190611e0b9190612d93565b606080600061226f846123c5565b915091506000805b83518110156122d557600084828151811061228e57fe5b602002602001015190506122a181611d05565b156122cc576122af81611d50565b8583815181106122bb57fe5b602002602001018181525050600192505b50600101612277565b50806122e15784611f1c565b600183836040516020016122f793929190613634565b60405160208183030381529060405295945050505050565b606060008061231d846123e8565b9150915061232a82611d05565b156123685761233882611d50565b91506000828260405160200161235093929190613613565b60405160208183030381529060405292505050611d4b565b8392505050611d4b565b6060600061237f836123ff565b905061238a81611d05565b156121a65761239881611d50565b90506001816040516020016123ae9291906135fc565b604051602081830303815290604052915050611d4b565b60606000828060200190518101906123dd9190612e12565b909590945092505050565b600080828060200190518101906123dd9190612ddc565b6000818060200190518101906124159190612daf565b9392505050565b6040805160a081019091528060008152600060208201819052604082018190526060820181905260809091015290565b8035611e0b8161393f565b60008083601f840112612468578182fd5b50813567ffffffffffffffff81111561247f578182fd5b602083019150836020808302850101111561249957600080fd5b9250929050565b600082601f8301126124b0578081fd5b81356124c36124be826138cf565b6138a8565b8181529150602080830190848101818402860182018710156124e457600080fd5b60005b8481101561250c5781356124fa8161393f565b845292820192908201906001016124e7565b505050505092915050565b600082601f830112612527578081fd5b81356125356124be826138cf565b818152915060208083019084810160005b8481101561250c578135870160a080601f19838c0301121561256757600080fd5b612570816138a8565b85830135815260408084013587830152606080850135828401526080915081850135818401525082840135925067ffffffffffffffff8311156125b257600080fd5b6125c08c88858701016126e2565b90820152865250509282019290820190600101612546565b60008083601f8401126125e9578182fd5b50813567ffffffffffffffff811115612600578182fd5b60208301915083602060408302850101111561249957600080fd5b600082601f83011261262b578081fd5b81356126396124be826138cf565b81815291506020808301908481018184028601820187101561265a57600080fd5b60005b8481101561250c5781358452928201929082019060010161265d565b600082601f830112612689578081fd5b81516126976124be826138cf565b8181529150602080830190848101818402860182018710156126b857600080fd5b60005b8481101561250c578151845292820192908201906001016126bb565b8035611e0b81613954565b600082601f8301126126f2578081fd5b813567ffffffffffffffff811115612708578182fd5b61271b6020601f19601f840116016138a8565b915080825283602082850101111561273257600080fd5b8060208401602084013760009082016020015292915050565b803560018110611e0b57600080fd5b803560028110611e0b57600080fd5b60006080828403121561277a578081fd5b61278460806138a8565b9050813567ffffffffffffffff8082111561279e57600080fd5b6127aa858386016124a0565b835260208401359150808211156127c057600080fd5b6127cc8583860161261b565b602084015260408401359150808211156127e557600080fd5b506127f2848285016126e2565b60408301525061280583606084016126d7565b606082015292915050565b600060808284031215612821578081fd5b50919050565b803560ff81168114611e0b57600080fd5b600060208284031215612849578081fd5b81356124158161393f565b60008060008060808587031215612869578283fd5b84356128748161393f565b935060208501356128848161393f565b93969395505050506040820135916060013590565b600080600080606085870312156128ae578182fd5b84356128b98161393f565b935060208501356128c981613954565b9250604085013567ffffffffffffffff808211156128e5578384fd5b818701915087601f8301126128f8578384fd5b813581811115612906578485fd5b886020828501011115612917578485fd5b95989497505060200194505050565b60008060006060848603121561293a578081fd5b83356129458161393f565b95602085013595506040909401359392505050565b6000602080838503121561296c578182fd5b825167ffffffffffffffff811115612982578283fd5b8301601f81018513612992578283fd5b80516129a06124be826138cf565b81815283810190838501858402850186018910156129bc578687fd5b8694505b838510156129de5780518352600194909401939185019185016129c0565b50979650505050505050565b6000806000604084860312156129fe578081fd5b833567ffffffffffffffff80821115612a15578283fd5b818601915086601f830112612a28578283fd5b813581811115612a36578384fd5b87602060a083028501011115612a4a578384fd5b6020928301989097509590910135949350505050565b600060208284031215612a71578081fd5b815167ffffffffffffffff811115612a87578182fd5b612a9384828501612679565b949350505050565b600060208284031215612aac578081fd5b815161241581613954565b600080600080600080600060c0888a031215612ad1578485fd5b87359650612ae28960208a0161274b565b95506040880135612af28161393f565b94506060880135612b028161393f565b9350608088013567ffffffffffffffff80821115612b1e578485fd5b612b2a8b838c01612769565b945060a08a0135915080821115612b3f578384fd5b50612b4c8a828b016125d8565b989b979a50959850939692959293505050565b600080600080600080600060e0888a031215612b79578081fd5b87359650612b8a8960208a0161274b565b95506040880135612b9a8161393f565b94506060880135612baa8161393f565b9350608088013567ffffffffffffffff811115612bc5578182fd5b612bd18a828b01612769565b93505060a0880135915060c0880135905092959891949750929550565b600080600080600080600080610100898b031215612c0a578182fd5b8835612c158161393f565b97506020890135612c258161393f565b965060408901359550606089013594506080890135612c4381613954565b9350612c528a60a08b01612827565b925060c0890135915060e089013590509295985092959890939650565b600080600080600080600060e0888a031215612c89578081fd5b8735612c948161393f565b96506020880135612ca48161393f565b95506040880135945060608801359350612cc18960808a01612827565b925060a0880135915060c0880135905092959891949750929550565b600060208284031215612cee578081fd5b81516124158161393f565b60008060408385031215612d0b578182fd5b8235612d168161393f565b946020939093013593505050565b60008060008060008060c08789031215612d3c578384fd5b8635612d478161393f565b95506020870135612d578161393f565b94506040870135612d678161393f565b9350606087013592506080870135612d7e81613954565b8092505060a087013590509295509295509295565b600060208284031215612da4578081fd5b815161241581613962565b60008060408385031215612dc1578182fd5b8251612dcc81613962565b6020939093015192949293505050565b600080600060608486031215612df0578081fd5b8351612dfb81613962565b602085015160409095015190969495509392505050565b600080600060608486031215612e26578081fd5b8351612e3181613962565b602085015190935067ffffffffffffffff811115612e4d578182fd5b612e5986828701612679565b925050604084015190509250925092565b60008060008060008060008060008060006101608c8e031215612e8b578485fd5b612e958d8d61275a565b9a5067ffffffffffffffff8060208e01351115612eb0578586fd5b612ec08e60208f01358f01612517565b9a508060408e01351115612ed2578586fd5b612ee28e60408f01358f01612457565b909a509850612ef48e60608f01612810565b97508060e08e01351115612f06578586fd5b612f168e60e08f01358f01612457565b90975095506101008d013594506101208d013593506101408d0135811015612f3c578283fd5b50612f4e8d6101408e01358e016125d8565b81935080925050509295989b509295989b9093969950565b6000806000806000806101208789031215612f7f578384fd5b863567ffffffffffffffff80821115612f96578586fd5b9088019060c0828b031215612fa9578586fd5b612fb360c06138a8565b82358152612fc48b6020850161275a565b60208201526040830135612fd78161393f565b6040820152612fe98b6060850161244c565b60608201526080830135608082015260a083013582811115613009578788fd5b6130158c8286016126e2565b60a08301525080985050505061302e8860208901612810565b959895975050505060a08401359360c08101359360e08201359350610100909101359150565b600060208284031215613065578081fd5b5051919050565b6000806040838503121561307e578182fd5b505080516020909101519092909150565b6001600160a01b03169052565b60008284526020808501945082825b858110156130d95781356130be8161393f565b6001600160a01b0316875295820195908201906001016130ab565b509495945050505050565b60008284526020808501945082825b858110156130d9578135875295820195908201906001016130f3565b6000815180845260208085019450808401835b838110156130d957815187529582019590820190600101613122565b15159052565b6000815180845261315c8160208601602086016138fc565b601f01601f19169290920160200192915050565b8051608080845281519084018190526000916020919082019060a0860190845b818110156131b55783516001600160a01b031683529284019291840191600101613190565b5050828501519150858103838701526131ce818361310f565b92505050604083015184820360408601526131e98282613144565b91505060608301516131fe606086018261313e565b509392505050565b80356132118161393f565b6001600160a01b03908116835260208201359061322d82613954565b90151560208401526040820135906132448261393f565b166040830152606081013561325881613954565b8015156060840152505050565b600082516132778184602087016138fc565b9190910192915050565b600084516132938184602089016138fc565b8201838582379092019182525092915050565b918252602082015260400190565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152901515604082015260600190565b6000604082016001600160a01b03808616845260206040818601528286518085526060870191508288019450855b8181101561333857855185168352948301949183019160010161331a565b509098975050505050505050565b6001600160a01b039889168152969097166020870152604086019490945260608501929092521515608084015260ff1660a083015260c082015260e08101919091526101000190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393909316835260208301919091521515604082015260600190565b6001600160a01b03949094168452602084019290925261ffff1660408301521515606082015260800190565b6020808252825182820181905260009190848201906040850190845b8181101561347057835183529284019291840191600101613454565b50909695505050505050565b6020808252818101839052600090604080840186845b8781101561351d5781356134a581613962565b6134ae81613928565b8352818501356134bd8161393f565b6001600160a01b031683860152818401358484015260606134e0818401846138ef565b6134ec8286018261308f565b505060806134fc818401846138ef565b6135088286018261308f565b505060a0928301929190910190600101613492565b5090979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156135b3578151805161355c81613928565b8552808701516001600160a01b03168786015285810151868601526060808201516135898288018261308f565b50506080908101519061359e8682018361308f565b505060a0939093019290850190600101613547565b5091979650505050505050565b60008582526001600160a01b038086166020840152808516604084015250608060608301526135f26080830184613170565b9695505050505050565b6040810161360984613928565b9281526020015290565b6060810161362085613928565b938152602081019290925260409091015290565b600061363f85613928565b84825260606020830152613656606083018561310f565b9050826040830152949350505050565b60006101208083016136778c613935565b8b84526020808501929092528a5190819052610140808501928281028601909101918c8201855b8281101561371e578785037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec00186528151805186528481015185870152604080820151908701526060808201519087015260809081015160a09187018290529061370a81880183613144565b97860197965050509083019060010161369e565b505050508381036040850152613735818a8c61309c565b9150506137456060840188613206565b82810360e08401526137588186886130e4565b915050826101008301529998505050505050505050565b60208082526010908201527f496e636f72726563742073656e64657200000000000000000000000000000000604082015260600190565b6020808252601f908201527f52656c617965722063616e206f6e6c7920617070726f766520697473656c6600604082015260600190565b60208082526019908201527f696e76616c696420636861696e6564207265666572656e636500000000000000604082015260600190565b600060e08252855160e0830152602086015161382f81613935565b61010083015260408601516001600160a01b03908116610120840152606087015116610140830152608086015161016083015260a086015160c061018084015261387d6101a0840182613144565b91505061388d6020830186613206565b60a082019390935260c0015292915050565b90815260200190565b60405181810167ffffffffffffffff811182821017156138c757600080fd5b604052919050565b600067ffffffffffffffff8211156138e5578081fd5b5060209081020190565b600082356124158161393f565b60005b838110156139175781810151838201526020016138ff565b838111156104835750506000910152565b6004811061393257fe5b50565b6002811061393257fe5b6001600160a01b038116811461393257600080fd5b801515811461393257600080fd5b6004811061393257600080fdfea2646970667358221220ca9b18e46ddedb91380084b41ec5db4b9ef22aec5e474a5296f4dd1961e9082364736f6c63430007010033",
"linkReferences": {},
"deployedLinkReferences": {}
}