-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMarketReader.json
More file actions
776 lines (776 loc) · 74.9 KB
/
Copy pathMarketReader.json
File metadata and controls
776 lines (776 loc) · 74.9 KB
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
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
{
"_format": "hh-sol-artifact-1",
"contractName": "MarketReader",
"sourceName": "contracts/market/MarketReader.sol",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "_f",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "previousAdminRole",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "newAdminRole",
"type": "bytes32"
}
],
"name": "RoleAdminChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleGranted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleRevoked",
"type": "event"
},
{
"inputs": [],
"name": "DEFAULT_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "market",
"type": "address"
},
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "bool",
"name": "isLong",
"type": "bool"
}
],
"name": "availableLiquidity",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "fac",
"outputs": [
{
"internalType": "contract IMarketFactory",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "address",
"name": "market",
"type": "address"
},
{
"internalType": "bool",
"name": "isLong",
"type": "bool"
}
],
"name": "getFundingFee",
"outputs": [
{
"internalType": "int256",
"name": "",
"type": "int256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_market",
"type": "address"
},
{
"internalType": "bool",
"name": "_isLong",
"type": "bool"
}
],
"name": "getFundingRate",
"outputs": [
{
"internalType": "int256",
"name": "",
"type": "int256"
},
{
"internalType": "int256",
"name": "",
"type": "int256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_marketAddr",
"type": "address"
}
],
"name": "getMarket",
"outputs": [
{
"components": [
{
"internalType": "uint256",
"name": "minSlippage",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxSlippage",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "slippageDigits",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "minLev",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxLev",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "minCollateral",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxTradeAmount",
"type": "uint256"
},
{
"internalType": "bool",
"name": "allowOpen",
"type": "bool"
},
{
"internalType": "bool",
"name": "allowClose",
"type": "bool"
}
],
"internalType": "struct IMarketReader.ValidOuts",
"name": "validOuts",
"type": "tuple"
},
{
"components": [
{
"internalType": "uint256",
"name": "tokenDigits",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "closeFeeRate",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "openFeeRate",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "liquidationFeeUsd",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "spread",
"type": "uint256"
},
{
"internalType": "address",
"name": "indexToken",
"type": "address"
},
{
"internalType": "address",
"name": "collateralToken",
"type": "address"
},
{
"internalType": "address",
"name": "orderBookLong",
"type": "address"
},
{
"internalType": "address",
"name": "orderBookShort",
"type": "address"
},
{
"internalType": "address",
"name": "positionBook",
"type": "address"
}
],
"internalType": "struct IMarketReader.MarketOuts",
"name": "mktOuts",
"type": "tuple"
},
{
"components": [
{
"internalType": "uint256",
"name": "closeFeeRate",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "openFeeRate",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "execFee",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "liquidateFee",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "digits",
"type": "uint256"
}
],
"internalType": "struct IMarketReader.FeeOuts",
"name": "feeOuts",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getMarkets",
"outputs": [
{
"components": [
{
"internalType": "string",
"name": "name",
"type": "string"
},
{
"internalType": "address",
"name": "addr",
"type": "address"
},
{
"internalType": "uint256",
"name": "minPay",
"type": "uint256"
},
{
"internalType": "bool",
"name": "allowOpen",
"type": "bool"
},
{
"internalType": "bool",
"name": "allowClose",
"type": "bool"
}
],
"internalType": "struct IMarketFactory.Outs[]",
"name": "_outs",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "address",
"name": "market",
"type": "address"
}
],
"name": "getPositions",
"outputs": [
{
"components": [
{
"internalType": "address",
"name": "market",
"type": "address"
},
{
"internalType": "bool",
"name": "isLong",
"type": "bool"
},
{
"internalType": "uint32",
"name": "lastTime",
"type": "uint32"
},
{
"internalType": "uint216",
"name": "extra3",
"type": "uint216"
},
{
"internalType": "uint256",
"name": "size",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "collateral",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "averagePrice",
"type": "uint256"
},
{
"internalType": "int256",
"name": "entryFundingRate",
"type": "int256"
},
{
"internalType": "int256",
"name": "realisedPnl",
"type": "int256"
},
{
"internalType": "uint256",
"name": "extra0",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "extra1",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "extra2",
"type": "uint256"
}
],
"internalType": "struct Position.Props[]",
"name": "_positions",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "getRoleAdmin",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "grantAndRevoke",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "grantRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "hasRole",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_marketRouter",
"type": "address"
},
{
"internalType": "address",
"name": "_vaultRouter",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "market",
"type": "address"
},
{
"internalType": "address",
"name": "_account",
"type": "address"
},
{
"internalType": "bool",
"name": "_isLong",
"type": "bool"
}
],
"name": "isLiquidate",
"outputs": [
{
"internalType": "uint256",
"name": "_state",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "marketRouter",
"outputs": [
{
"internalType": "contract IMarketRouter",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "renounceRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "revokeRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
}
],
"name": "transferAdmin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "vaultRouter",
"outputs": [
{
"internalType": "contract IVaultRouter",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x60806040523480156200001157600080fd5b5060405162003c1338038062003c13833981016040819052620000349162000357565b8062000040336200007d565b6200005681620000cf60201b620021b41760201c565b50600480546001600160a01b0319166001600160a01b039290921691909117905562000389565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620000da336200007d565b620000e7600033620002a7565b620000f4600082620002a7565b6200010f60008051602062003b9383398151915233620002a7565b6200012a60008051602062003b9383398151915282620002a7565b6200014560008051602062003bf383398151915233620002a7565b6200016060008051602062003bf383398151915282620002a7565b6200017b60008051602062003b7383398151915233620002a7565b6200019660008051602062003b7383398151915282620002a7565b620001b160008051602062003b5383398151915233620002a7565b620001cc60008051602062003b5383398151915282620002a7565b620001e760008051602062003bb383398151915233620002a7565b6200020260008051602062003bb383398151915282620002a7565b6200021d60008051602062003b3383398151915233620002a7565b6200023860008051602062003b3383398151915282620002a7565b6200025360008051602062003b1383398151915233620002a7565b6200026e60008051602062003b1383398151915282620002a7565b6200028960008051602062003bd383398151915233620002a7565b620002a460008051602062003bd383398151915282620002a7565b50565b620002b38282620002b7565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16620002b3576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620003133390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000602082840312156200036a57600080fd5b81516001600160a01b03811681146200038257600080fd5b9392505050565b61377a80620003996000396000f3fe608060405234801561001057600080fd5b506004361061011d5760003560e01c806301ffc9a71461012257806320981df41461014a5780632396100114610172578063248a9ca3146101935780632f2ff15d146101a657806336568abe146101bb578063485cc955146101ce578063715018a6146101e1578063735a2885146101e9578063739118a4146101fc57806375829def1461021c578063889be2851461022f5780638da5cb5b1461024257806391d148541461025757806399d5c1ec1461026a578063a217fddf1461027d578063c3b3147214610285578063d12dbde414610298578063d37c441c146102ab578063d4dfadbf146102be578063d547741f146102e0578063ec2c9016146102f3578063f2fde38b14610308575b600080fd5b610135610130366004612840565b61031b565b60405190151581526020015b60405180910390f35b61015d61015836600461288d565b610352565b60408051928352602083019190915201610141565b6101856101803660046128c6565b610592565b604051908152602001610141565b6101856101a1366004612911565b6108a2565b6101b96101b436600461292a565b6108b7565b005b6101b96101c936600461292a565b6108d8565b6101b96101dc36600461294f565b61095b565b6101b9610ada565b6101856101f73660046128c6565b610aee565b61020f61020a36600461294f565b611139565b6040516101419190612a31565b6101b961022a366004612a80565b61148a565b61018561023d3660046128c6565b6114b4565b61024a61172d565b6040516101419190612a9d565b61013561026536600461292a565b61173c565b6101b961027836600461292a565b611765565b610185600081565b60045461024a906001600160a01b031681565b60025461024a906001600160a01b031681565b60035461024a906001600160a01b031681565b6102d16102cc366004612a80565b611792565b60405161014193929190612b44565b6101b96102ee36600461292a565b61209d565b6102fb6120b9565b6040516101419190612c41565b6101b9610316366004612a80565b61213b565b60006001600160e01b03198216637965db0b60e01b148061034c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000806000846001600160a01b031663f29ebf616040518163ffffffff1660e01b8152600401602060405180830381865afa158015610395573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b99190612ce3565b90506000856001600160a01b031663ac0b05a66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041f9190612ce3565b9050600080826001600160a01b0316638749694a6040518163ffffffff1660e01b81526004016040805180830381865afa158015610461573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104859190612d00565b604051630a09716d60e31b81526001600160a01b038b8116600483015260248201849052604482018390528a1515606483015292945090925060009186169063504b8b6890608401602060405180830381865afa1580156104ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050e9190612d24565b90506000856001600160a01b03166334f32e258b8b6040518363ffffffff1660e01b8152600401610540929190612d3d565b602060405180830381865afa15801561055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105819190612d24565b919a91995090975050505050505050565b6000808490506000816001600160a01b031663b894300d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fc9190612ce3565b9050806001600160a01b0316631f21756a868887866001600160a01b031663ac0b05a66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561064e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106729190612ce3565b876001600160a01b031663f29ebf616040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d49190612ce3565b886001600160a01b031663741bef1a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610712573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107369190612ce3565b6001600160a01b03166376d697608a6001600160a01b031663e7d015f26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a69190612ce3565b8d156040518363ffffffff1660e01b81526004016107c5929190612d3d565b602060405180830381865afa1580156107e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108069190612d24565b60405160e088901b6001600160e01b03191681526001600160a01b039687166004820152948616602486015292151560448501529084166064840152909216608482015260a481019190915260c401602060405180830381865afa158015610872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108969190612d24565b925050505b9392505050565b60009081526020819052604090206001015490565b6108c0826108a2565b6108c981612353565b6108d3838361235d565b505050565b6001600160a01b038116331461094d5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61095782826123e1565b5050565b610963612446565b600154600160a81b900460ff1615808015610989575060018054600160a01b900460ff16105b806109a95750303b1580156109a9575060018054600160a01b900460ff16145b610a0c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610944565b6001805460ff60a01b1916600160a01b1790558015610a39576001805460ff60a81b1916600160a81b1790555b6001600160a01b038316610a4c57600080fd5b6001600160a01b038216610a5f57600080fd5b600280546001600160a01b038086166001600160a01b031992831617909255600380549285169290911691909117905580156108d3576001805460ff60a81b191681556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b610ae2612446565b610aec60006124a5565b565b600080846001600160a01b031663d37c441c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b539190612ce3565b90506000816001600160a01b0316636dc7b0a16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb99190612d24565b905060008111610bce5760009250505061089b565b816001600160a01b03166311a2ad496040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c309190612d24565b8111610c415760009250505061089b565b6000866001600160a01b031663ac0b05a66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca59190612ce3565b90506000876001600160a01b031663c54dc3d66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ce7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0b9190612ce3565b9050610d6e60405180610140016040528060006001600160a01b0316815260200160008152602001600015158152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b03808a1682528715156040808401919091526000602084015280516343a4b4a560e11b8152815192861692638749694a926004808401939192918290030181865afa158015610dc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dec9190612d00565b61010083015260e082015260025460405162b29b4b60e61b81526001600160a01b0390911690632ca6d2c090610e26908b90600401612a9d565b6040805180830381865afa158015610e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e669190612d00565b60c083015260a082015260025460408051630799f55f60e01b815281516001600160a01b0390931692630799f55f926004808401939192918290030181865afa158015610eb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edb9190612d00565b8260600183608001828152508281525050506000896001600160a01b031663b2016bd46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f519190612ce3565b9050611034600360009054906101000a90046001600160a01b03166001600160a01b0316636dc7b0a16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcd9190612d24565b826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102f9190612d68565b6124f7565b826101200181815250506000866001600160a01b03166311a2ad496040518163ffffffff1660e01b8152600401602060405180830381865afa15801561107e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a29190612d24565b6110ac9087612da1565b90506000846001600160a01b0316638050e32f856040518263ffffffff1660e01b81526004016110dc9190612db4565b602060405180830381865afa1580156110f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111d9190612d24565b90506111298282612524565b9c9b505050505050505050505050565b60606001600160a01b038216611419576000600460009054906101000a90046001600160a01b03166001600160a01b031663ec2c90166040518163ffffffff1660e01b8152600401600060405180830381865afa15801561119e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111c69190810190612ef5565b905060008080805b845181101561128f578481815181106111e9576111e961306e565b60200260200101516020015193506000846001600160a01b0316633eeb530e8a6040518263ffffffff1660e01b81526004016112259190612a9d565b600060405180830381865afa158015611242573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261126a9190810190613168565b90508051836112799190613202565b925050808061128790613215565b9150506111ce565b50806000036112a1575050505061034c565b806001600160401b038111156112b9576112b9612e36565b6040519080825280602002602001820160405280156112f257816020015b6112df6127c5565b8152602001906001900390816112d75790505b50945060005b845181101561140f578481815181106113135761131361306e565b60200260200101516020015193506000846001600160a01b0316633eeb530e8a6040518263ffffffff1660e01b815260040161134f9190612a9d565b600060405180830381865afa15801561136c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113949190810190613168565b905060005b81518110156113fa578181815181106113b4576113b461306e565b60200260200101518886815181106113ce576113ce61306e565b602002602001018190525084806113e490613215565b95505080806113f290613215565b915050611399565b5050808061140790613215565b9150506112f8565b505050505061034c565b604051631f75a98760e11b81526001600160a01b03831690633eeb530e90611445908690600401612a9d565b600060405180830381865afa158015611462573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261089b9190810190613168565b600061149581612353565b6114a060008361253c565b6114a9826124a5565b6109576000336123e1565b600080836001600160a01b031663ac0b05a66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115199190612ce3565b90506115236127c5565b60405163bc95baad60e01b81526001600160a01b03878116600483015260006024830152851515604483015283169063bc95baad9060640161018060405180830381865afa158015611579573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159d919061322e565b90506000856001600160a01b031663f29ebf616040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116039190612ce3565b604080516101e081018252600080825281830181905260608083018290526080830182905260a080840183905260c0840183905260e08401839052610100840183905261012084018390526101408401839052610160840183905261018084018381526101a085018490526101c08501929092528a1515602085015287015190526001600160a01b038a811683529251634151026360e01b8152939450909290918416906341510263906116bd9085908890600401613286565b600060405180830381865afa1580156116da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117029190810190613386565b9050806002815181106117175761171761306e565b6020026020010151955050505050509392505050565b6001546001600160a01b031690565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6000805160206136c583398151915261177d81612353565b61178783836108b7565b6108d360003361209d565b6117e5604051806101200160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101919091526118686040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b60008490506000816001600160a01b031663f29ebf616040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d19190612ce3565b90506000826001600160a01b031663b894300d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611913573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119379190612ce3565b90506000816001600160a01b031663177927296040518163ffffffff1660e01b8152600401602060405180830381865afa158015611979573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199d9190613416565b90506040518061012001604052806119b78351610fff1690565b81528251602090910190600c1c610fff1681526020016119d8612710612546565b8152825160181c610fff9081166020830152835160241c166040820152606001611a018361256b565b8152602001611a0f83612589565b8152602001611a248351600f606c1b16151590565b15158152602001611a3b8351600f60681b16151590565b15158152509650604051806101400160405280856001600160a01b031663e84254676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab09190612d68565b60ff168152602001846001600160a01b031663d87780688b60016040518363ffffffff1660e01b8152600401611ae7929190613457565b602060405180830381865afa158015611b04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b289190612d24565b8152602001846001600160a01b031663d87780688b60006040518363ffffffff1660e01b8152600401611b5c929190613457565b602060405180830381865afa158015611b79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9d9190612d24565b8152602001846001600160a01b031663d87780688b60046040518363ffffffff1660e01b8152600401611bd1929190613457565b602060405180830381865afa158015611bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c129190612d24565b815260200160008152602001856001600160a01b031663e7d015f26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c809190612ce3565b6001600160a01b03168152602001856001600160a01b031663b2016bd46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf09190612ce3565b6001600160a01b03168152602001856001600160a01b0316637b2fd1e56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d609190612ce3565b6001600160a01b03168152602001856001600160a01b03166305ba9ae96040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd09190612ce3565b6001600160a01b03168152602001856001600160a01b031663ac0b05a66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e409190612ce3565b6001600160a01b039081169091526040805160a0810191829052631b0ef00d60e31b9091529197508190851663d8778068611e808c600160a48601613457565b602060405180830381865afa158015611e9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec19190612d24565b8152602001846001600160a01b031663d87780688b60006040518363ffffffff1660e01b8152600401611ef5929190613457565b602060405180830381865afa158015611f12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f369190612d24565b8152602001846001600160a01b031663d87780688b60036040518363ffffffff1660e01b8152600401611f6a929190613457565b602060405180830381865afa158015611f87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fab9190612d24565b8152602001846001600160a01b031663d87780688b60046040518363ffffffff1660e01b8152600401611fdf929190613457565b602060405180830381865afa158015611ffc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120209190612d24565b815260200161208f856001600160a01b031663f4ca4d1d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612066573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208a9190612d24565b612546565b905296989597505050505050565b6120a6826108a2565b6120af81612353565b6108d383836123e1565b6060600460009054906101000a90046001600160a01b03166001600160a01b031663ec2c90166040518163ffffffff1660e01b8152600401600060405180830381865afa15801561210e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121369190810190612ef5565b905090565b612143612446565b6001600160a01b0381166121a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610944565b6121b1816124a5565b50565b6121bd336124a5565b6121c860003361253c565b6121d360008261253c565b6121eb6000805160206136c58339815191523361253c565b6122036000805160206136c58339815191528261253c565b61221b6000805160206137258339815191523361253c565b6122336000805160206137258339815191528261253c565b61224b6000805160206136a58339815191523361253c565b6122636000805160206136a58339815191528261253c565b61227b6000805160206136858339815191523361253c565b6122936000805160206136858339815191528261253c565b6122ab6000805160206136e58339815191523361253c565b6122c36000805160206136e58339815191528261253c565b6122db6000805160206136658339815191523361253c565b6122f36000805160206136658339815191528261253c565b61230b6000805160206136458339815191523361253c565b6123236000805160206136458339815191528261253c565b61233b6000805160206137058339815191523361253c565b6121b16000805160206137058339815191528261253c565b6121b181336125a9565b612367828261173c565b610957576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561239d3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6123eb828261173c565b15610957576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b3361244f61172d565b6001600160a01b031614610aec5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610944565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600061250482600a613557565b6125106012600a613566565b61251a9085613572565b61089b9190613589565b60008183101561253557508161034c565b508061034c565b610957828261235d565b600060015b60019091019061255c600a82613572565b905082810361254b5750919050565b600061257682612602565b825161034c9190603c1c610fff16613572565b600061259482612602565b825161034c919060481c63ffffffff16613572565b6125b3828261173c565b610957576125c081612618565b6125cb83602061262a565b6040516020016125dc9291906135ab565b60408051601f198184030181529082905262461bcd60e51b82526109449160040161361a565b805160009061034c9060701c60ff16600a613566565b606061034c6001600160a01b03831660145b60606000612639836002613572565b612644906002613202565b6001600160401b0381111561265b5761265b612e36565b6040519080825280601f01601f191660200182016040528015612685576020820181803683370190505b509050600360fc1b816000815181106126a0576126a061306e565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106126cf576126cf61306e565b60200101906001600160f81b031916908160001a90535060006126f3846002613572565b6126fe906001613202565b90505b6001811115612776576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106127325761273261306e565b1a60f81b8282815181106127485761274861306e565b60200101906001600160f81b031916908160001a90535060049490941c9361276f8161362d565b9050612701565b50831561089b5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610944565b60405180610180016040528060006001600160a01b03168152602001600015158152602001600063ffffffff16815260200160006001600160d81b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006020828403121561285257600080fd5b81356001600160e01b03198116811461089b57600080fd5b6001600160a01b03811681146121b157600080fd5b80151581146121b157600080fd5b600080604083850312156128a057600080fd5b82356128ab8161286a565b915060208301356128bb8161287f565b809150509250929050565b6000806000606084860312156128db57600080fd5b83356128e68161286a565b925060208401356128f68161286a565b915060408401356129068161287f565b809150509250925092565b60006020828403121561292357600080fd5b5035919050565b6000806040838503121561293d57600080fd5b8235915060208301356128bb8161286a565b6000806040838503121561296257600080fd5b823561296d8161286a565b915060208301356128bb8161286a565b6001600160a01b03169052565b61299582825161297d565b60208101516129a8602084018215159052565b5060408101516129c0604084018263ffffffff169052565b5060608101516129db60608401826001600160d81b03169052565b506080818101519083015260a0808201519083015260c0808201519083015260e0808201519083015261010080820151908301526101208082015190830152610140808201519083015261016090810151910152565b6020808252825182820181905260009190848201906040850190845b81811015612a7457612a6083855161298a565b928401926101809290920191600101612a4d565b50909695505050505050565b600060208284031215612a9257600080fd5b813561089b8161286a565b6001600160a01b0391909116815260200190565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a0810151612aef60a084018261297d565b5060c0810151612b0260c084018261297d565b5060e0810151612b1560e084018261297d565b5061010080820151612b298285018261297d565b505061012080820151612b3e8285018261297d565b50505050565b600061030082019050845182526020850151602083015260408501516040830152606085015160608301526080850151608083015260a085015160a083015260c085015160c083015260e0850151151560e08301526101008086015115158184015250612bb5610120830185612ab1565b8251610260830152602083015161028083015260408301516102a083015260608301516102c083015260808301516102e0830152949350505050565b60005b83811015612c0c578181015183820152602001612bf4565b50506000910152565b60008151808452612c2d816020860160208601612bf1565b601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015612cd557603f19898403018552815160a08151818652612c8e82870182612c15565b838b01516001600160a01b0316878c0152898401518a8801526060808501511515908801526080938401511515939096019290925250509386019390860190600101612c68565b509098975050505050505050565b600060208284031215612cf557600080fd5b815161089b8161286a565b60008060408385031215612d1357600080fd5b505080516020909101519092909150565b600060208284031215612d3657600080fd5b5051919050565b6001600160a01b039290921682521515602082015260400190565b8051612d638161286a565b919050565b600060208284031215612d7a57600080fd5b815160ff8116811461089b57600080fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561034c5761034c612d8b565b600061014082019050612dc882845161297d565b602083015160208301526040830151612de5604084018215159052565b50606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151818401525092915050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715612e6e57612e6e612e36565b60405290565b60405161018081016001600160401b0381118282101715612e6e57612e6e612e36565b604051601f8201601f191681016001600160401b0381118282101715612ebf57612ebf612e36565b604052919050565b60006001600160401b03821115612ee057612ee0612e36565b5060051b60200190565b8051612d638161287f565b60006020808385031215612f0857600080fd5b82516001600160401b0380821115612f1f57600080fd5b818501915085601f830112612f3357600080fd5b8151612f46612f4182612ec7565b612e97565b81815260059190911b83018401908481019088831115612f6557600080fd5b8585015b8381101561306157805185811115612f8057600080fd5b8601601f1960a0828d0382011215612f985760008081fd5b612fa0612e4c565b8983015188811115612fb25760008081fd5b8301603f81018e13612fc45760008081fd5b8a81015160408a821115612fda57612fda612e36565b612fea8d86601f85011601612e97565b94508185528f818385010111156130015760008081fd5b613010828e8701838601612bf1565b84845261301e818701612d58565b8d850152606094508486015181850152505050608061303e818501612eea565b8383015261304e60a08501612eea565b9082015285525050918601918601612f69565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b805163ffffffff81168114612d6357600080fd5b80516001600160d81b0381168114612d6357600080fd5b600061018082840312156130c257600080fd5b6130ca612e74565b90506130d582612d58565b81526130e360208301612eea565b60208201526130f460408301613084565b604082015261310560608301613098565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e082015261010080830151818301525061012080830151818301525061014080830151818301525061016080830151818301525092915050565b6000602080838503121561317b57600080fd5b82516001600160401b0381111561319157600080fd5b8301601f810185136131a257600080fd5b80516131b0612f4182612ec7565b81815261018091820283018401918482019190888411156131d057600080fd5b938501935b838510156131f6576131e789866130af565b835293840193918501916131d5565b50979650505050505050565b8082018082111561034c5761034c612d8b565b60006001820161322757613227612d8b565b5060010190565b6000610180828403121561324157600080fd5b61089b83836130af565b600081518084526020808501945080840160005b8381101561327b5781518752958201959082019060010161325f565b509495945050505050565b60006101a080835261329b818401865161297d565b60208501516101c06132b08186018315159052565b60408701516101e08681019190915260608801511515610200870152608088015192506132e161022087018461297d565b60a088015161024087015260c088015161026087015260e088015161028087015261010088015115156102a087015261012088015160ff9081166102c08801526101408901516001600160401b03166102e0880152610160890151610300880152610180890151610320880152938801519093166103408601528601516103608501929092525061337661038084018261324b565b91505061089b602083018461298a565b6000602080838503121561339957600080fd5b82516001600160401b038111156133af57600080fd5b8301601f810185136133c057600080fd5b80516133ce612f4182612ec7565b81815260059190911b820183019083810190878311156133ed57600080fd5b928401925b8284101561340b578351825292840192908401906133f2565b979650505050505050565b60006020828403121561342857600080fd5b604051602081016001600160401b038111828210171561344a5761344a612e36565b6040529151825250919050565b6001600160a01b0392909216825260ff16602082015260400190565b600181815b808511156134ae57816000190482111561349457613494612d8b565b808516156134a157918102915b93841c9390800290613478565b509250929050565b6000826134c55750600161034c565b816134d25750600061034c565b81600181146134e857600281146134f25761350e565b600191505061034c565b60ff84111561350357613503612d8b565b50506001821b61034c565b5060208310610133831016604e8410600b8410161715613531575081810a61034c565b61353b8383613473565b806000190482111561354f5761354f612d8b565b029392505050565b600061089b60ff8416836134b6565b600061089b83836134b6565b808202811582820484141761034c5761034c612d8b565b6000826135a657634e487b7160e01b600052601260045260246000fd5b500490565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516135dd816017850160208801612bf1565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161360e816028840160208801612bf1565b01602801949350505050565b60208152600061089b6020830184612c15565b60008161363c5761363c612d8b565b50600019019056fe59c7a9ef9a56707d87d116a5d27496afee2604c70b902ac2c4dbdcb68f36f2eacb6bc1c12dd43bca8d7dd46d975f913325437d0dcd5978e99d515e4ad39b97725d8e12c39142ff96d79d04d15d1ba1269e4fe57bb9d26f43523628b34ba108ecfb248bbb6ca5a799a6bb9ba79f58aa5cdbe0e5979238a967315e7ffbfd119d1a241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08275a642cf55cb12407e505ec86398168f240e88df6e66d1649bd09de9071c5dbf21b97e3e053faeacb5e76d16d9daf713b69d060518bccb2c9ee13a7f9cfc49f8d1089725c0dc266707fa6207730fb801dcd03108bfed7a21099bd303651d2b7a2646970667358221220b260462a726acecf626eeceebfeedcab4c564846ace6462906515922c43424bb64736f6c6343000811003359c7a9ef9a56707d87d116a5d27496afee2604c70b902ac2c4dbdcb68f36f2eacb6bc1c12dd43bca8d7dd46d975f913325437d0dcd5978e99d515e4ad39b97725d8e12c39142ff96d79d04d15d1ba1269e4fe57bb9d26f43523628b34ba108ecfb248bbb6ca5a799a6bb9ba79f58aa5cdbe0e5979238a967315e7ffbfd119d1a241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08275a642cf55cb12407e505ec86398168f240e88df6e66d1649bd09de9071c5dbf21b97e3e053faeacb5e76d16d9daf713b69d060518bccb2c9ee13a7f9cfc49f8d1089725c0dc266707fa6207730fb801dcd03108bfed7a21099bd303651d2b7",
"deployedBytecode": "0x608060405234801561001057600080fd5b506004361061011d5760003560e01c806301ffc9a71461012257806320981df41461014a5780632396100114610172578063248a9ca3146101935780632f2ff15d146101a657806336568abe146101bb578063485cc955146101ce578063715018a6146101e1578063735a2885146101e9578063739118a4146101fc57806375829def1461021c578063889be2851461022f5780638da5cb5b1461024257806391d148541461025757806399d5c1ec1461026a578063a217fddf1461027d578063c3b3147214610285578063d12dbde414610298578063d37c441c146102ab578063d4dfadbf146102be578063d547741f146102e0578063ec2c9016146102f3578063f2fde38b14610308575b600080fd5b610135610130366004612840565b61031b565b60405190151581526020015b60405180910390f35b61015d61015836600461288d565b610352565b60408051928352602083019190915201610141565b6101856101803660046128c6565b610592565b604051908152602001610141565b6101856101a1366004612911565b6108a2565b6101b96101b436600461292a565b6108b7565b005b6101b96101c936600461292a565b6108d8565b6101b96101dc36600461294f565b61095b565b6101b9610ada565b6101856101f73660046128c6565b610aee565b61020f61020a36600461294f565b611139565b6040516101419190612a31565b6101b961022a366004612a80565b61148a565b61018561023d3660046128c6565b6114b4565b61024a61172d565b6040516101419190612a9d565b61013561026536600461292a565b61173c565b6101b961027836600461292a565b611765565b610185600081565b60045461024a906001600160a01b031681565b60025461024a906001600160a01b031681565b60035461024a906001600160a01b031681565b6102d16102cc366004612a80565b611792565b60405161014193929190612b44565b6101b96102ee36600461292a565b61209d565b6102fb6120b9565b6040516101419190612c41565b6101b9610316366004612a80565b61213b565b60006001600160e01b03198216637965db0b60e01b148061034c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000806000846001600160a01b031663f29ebf616040518163ffffffff1660e01b8152600401602060405180830381865afa158015610395573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b99190612ce3565b90506000856001600160a01b031663ac0b05a66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041f9190612ce3565b9050600080826001600160a01b0316638749694a6040518163ffffffff1660e01b81526004016040805180830381865afa158015610461573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104859190612d00565b604051630a09716d60e31b81526001600160a01b038b8116600483015260248201849052604482018390528a1515606483015292945090925060009186169063504b8b6890608401602060405180830381865afa1580156104ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050e9190612d24565b90506000856001600160a01b03166334f32e258b8b6040518363ffffffff1660e01b8152600401610540929190612d3d565b602060405180830381865afa15801561055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105819190612d24565b919a91995090975050505050505050565b6000808490506000816001600160a01b031663b894300d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fc9190612ce3565b9050806001600160a01b0316631f21756a868887866001600160a01b031663ac0b05a66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561064e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106729190612ce3565b876001600160a01b031663f29ebf616040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d49190612ce3565b886001600160a01b031663741bef1a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610712573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107369190612ce3565b6001600160a01b03166376d697608a6001600160a01b031663e7d015f26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a69190612ce3565b8d156040518363ffffffff1660e01b81526004016107c5929190612d3d565b602060405180830381865afa1580156107e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108069190612d24565b60405160e088901b6001600160e01b03191681526001600160a01b039687166004820152948616602486015292151560448501529084166064840152909216608482015260a481019190915260c401602060405180830381865afa158015610872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108969190612d24565b925050505b9392505050565b60009081526020819052604090206001015490565b6108c0826108a2565b6108c981612353565b6108d3838361235d565b505050565b6001600160a01b038116331461094d5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61095782826123e1565b5050565b610963612446565b600154600160a81b900460ff1615808015610989575060018054600160a01b900460ff16105b806109a95750303b1580156109a9575060018054600160a01b900460ff16145b610a0c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610944565b6001805460ff60a01b1916600160a01b1790558015610a39576001805460ff60a81b1916600160a81b1790555b6001600160a01b038316610a4c57600080fd5b6001600160a01b038216610a5f57600080fd5b600280546001600160a01b038086166001600160a01b031992831617909255600380549285169290911691909117905580156108d3576001805460ff60a81b191681556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b610ae2612446565b610aec60006124a5565b565b600080846001600160a01b031663d37c441c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b539190612ce3565b90506000816001600160a01b0316636dc7b0a16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb99190612d24565b905060008111610bce5760009250505061089b565b816001600160a01b03166311a2ad496040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c309190612d24565b8111610c415760009250505061089b565b6000866001600160a01b031663ac0b05a66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca59190612ce3565b90506000876001600160a01b031663c54dc3d66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ce7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0b9190612ce3565b9050610d6e60405180610140016040528060006001600160a01b0316815260200160008152602001600015158152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b03808a1682528715156040808401919091526000602084015280516343a4b4a560e11b8152815192861692638749694a926004808401939192918290030181865afa158015610dc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dec9190612d00565b61010083015260e082015260025460405162b29b4b60e61b81526001600160a01b0390911690632ca6d2c090610e26908b90600401612a9d565b6040805180830381865afa158015610e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e669190612d00565b60c083015260a082015260025460408051630799f55f60e01b815281516001600160a01b0390931692630799f55f926004808401939192918290030181865afa158015610eb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edb9190612d00565b8260600183608001828152508281525050506000896001600160a01b031663b2016bd46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f519190612ce3565b9050611034600360009054906101000a90046001600160a01b03166001600160a01b0316636dc7b0a16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcd9190612d24565b826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102f9190612d68565b6124f7565b826101200181815250506000866001600160a01b03166311a2ad496040518163ffffffff1660e01b8152600401602060405180830381865afa15801561107e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a29190612d24565b6110ac9087612da1565b90506000846001600160a01b0316638050e32f856040518263ffffffff1660e01b81526004016110dc9190612db4565b602060405180830381865afa1580156110f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111d9190612d24565b90506111298282612524565b9c9b505050505050505050505050565b60606001600160a01b038216611419576000600460009054906101000a90046001600160a01b03166001600160a01b031663ec2c90166040518163ffffffff1660e01b8152600401600060405180830381865afa15801561119e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111c69190810190612ef5565b905060008080805b845181101561128f578481815181106111e9576111e961306e565b60200260200101516020015193506000846001600160a01b0316633eeb530e8a6040518263ffffffff1660e01b81526004016112259190612a9d565b600060405180830381865afa158015611242573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261126a9190810190613168565b90508051836112799190613202565b925050808061128790613215565b9150506111ce565b50806000036112a1575050505061034c565b806001600160401b038111156112b9576112b9612e36565b6040519080825280602002602001820160405280156112f257816020015b6112df6127c5565b8152602001906001900390816112d75790505b50945060005b845181101561140f578481815181106113135761131361306e565b60200260200101516020015193506000846001600160a01b0316633eeb530e8a6040518263ffffffff1660e01b815260040161134f9190612a9d565b600060405180830381865afa15801561136c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113949190810190613168565b905060005b81518110156113fa578181815181106113b4576113b461306e565b60200260200101518886815181106113ce576113ce61306e565b602002602001018190525084806113e490613215565b95505080806113f290613215565b915050611399565b5050808061140790613215565b9150506112f8565b505050505061034c565b604051631f75a98760e11b81526001600160a01b03831690633eeb530e90611445908690600401612a9d565b600060405180830381865afa158015611462573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261089b9190810190613168565b600061149581612353565b6114a060008361253c565b6114a9826124a5565b6109576000336123e1565b600080836001600160a01b031663ac0b05a66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115199190612ce3565b90506115236127c5565b60405163bc95baad60e01b81526001600160a01b03878116600483015260006024830152851515604483015283169063bc95baad9060640161018060405180830381865afa158015611579573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159d919061322e565b90506000856001600160a01b031663f29ebf616040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116039190612ce3565b604080516101e081018252600080825281830181905260608083018290526080830182905260a080840183905260c0840183905260e08401839052610100840183905261012084018390526101408401839052610160840183905261018084018381526101a085018490526101c08501929092528a1515602085015287015190526001600160a01b038a811683529251634151026360e01b8152939450909290918416906341510263906116bd9085908890600401613286565b600060405180830381865afa1580156116da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117029190810190613386565b9050806002815181106117175761171761306e565b6020026020010151955050505050509392505050565b6001546001600160a01b031690565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6000805160206136c583398151915261177d81612353565b61178783836108b7565b6108d360003361209d565b6117e5604051806101200160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101919091526118686040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b60008490506000816001600160a01b031663f29ebf616040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d19190612ce3565b90506000826001600160a01b031663b894300d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611913573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119379190612ce3565b90506000816001600160a01b031663177927296040518163ffffffff1660e01b8152600401602060405180830381865afa158015611979573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199d9190613416565b90506040518061012001604052806119b78351610fff1690565b81528251602090910190600c1c610fff1681526020016119d8612710612546565b8152825160181c610fff9081166020830152835160241c166040820152606001611a018361256b565b8152602001611a0f83612589565b8152602001611a248351600f606c1b16151590565b15158152602001611a3b8351600f60681b16151590565b15158152509650604051806101400160405280856001600160a01b031663e84254676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab09190612d68565b60ff168152602001846001600160a01b031663d87780688b60016040518363ffffffff1660e01b8152600401611ae7929190613457565b602060405180830381865afa158015611b04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b289190612d24565b8152602001846001600160a01b031663d87780688b60006040518363ffffffff1660e01b8152600401611b5c929190613457565b602060405180830381865afa158015611b79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9d9190612d24565b8152602001846001600160a01b031663d87780688b60046040518363ffffffff1660e01b8152600401611bd1929190613457565b602060405180830381865afa158015611bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c129190612d24565b815260200160008152602001856001600160a01b031663e7d015f26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c809190612ce3565b6001600160a01b03168152602001856001600160a01b031663b2016bd46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf09190612ce3565b6001600160a01b03168152602001856001600160a01b0316637b2fd1e56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d609190612ce3565b6001600160a01b03168152602001856001600160a01b03166305ba9ae96040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd09190612ce3565b6001600160a01b03168152602001856001600160a01b031663ac0b05a66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e409190612ce3565b6001600160a01b039081169091526040805160a0810191829052631b0ef00d60e31b9091529197508190851663d8778068611e808c600160a48601613457565b602060405180830381865afa158015611e9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec19190612d24565b8152602001846001600160a01b031663d87780688b60006040518363ffffffff1660e01b8152600401611ef5929190613457565b602060405180830381865afa158015611f12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f369190612d24565b8152602001846001600160a01b031663d87780688b60036040518363ffffffff1660e01b8152600401611f6a929190613457565b602060405180830381865afa158015611f87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fab9190612d24565b8152602001846001600160a01b031663d87780688b60046040518363ffffffff1660e01b8152600401611fdf929190613457565b602060405180830381865afa158015611ffc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120209190612d24565b815260200161208f856001600160a01b031663f4ca4d1d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612066573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208a9190612d24565b612546565b905296989597505050505050565b6120a6826108a2565b6120af81612353565b6108d383836123e1565b6060600460009054906101000a90046001600160a01b03166001600160a01b031663ec2c90166040518163ffffffff1660e01b8152600401600060405180830381865afa15801561210e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121369190810190612ef5565b905090565b612143612446565b6001600160a01b0381166121a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610944565b6121b1816124a5565b50565b6121bd336124a5565b6121c860003361253c565b6121d360008261253c565b6121eb6000805160206136c58339815191523361253c565b6122036000805160206136c58339815191528261253c565b61221b6000805160206137258339815191523361253c565b6122336000805160206137258339815191528261253c565b61224b6000805160206136a58339815191523361253c565b6122636000805160206136a58339815191528261253c565b61227b6000805160206136858339815191523361253c565b6122936000805160206136858339815191528261253c565b6122ab6000805160206136e58339815191523361253c565b6122c36000805160206136e58339815191528261253c565b6122db6000805160206136658339815191523361253c565b6122f36000805160206136658339815191528261253c565b61230b6000805160206136458339815191523361253c565b6123236000805160206136458339815191528261253c565b61233b6000805160206137058339815191523361253c565b6121b16000805160206137058339815191528261253c565b6121b181336125a9565b612367828261173c565b610957576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561239d3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6123eb828261173c565b15610957576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b3361244f61172d565b6001600160a01b031614610aec5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610944565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600061250482600a613557565b6125106012600a613566565b61251a9085613572565b61089b9190613589565b60008183101561253557508161034c565b508061034c565b610957828261235d565b600060015b60019091019061255c600a82613572565b905082810361254b5750919050565b600061257682612602565b825161034c9190603c1c610fff16613572565b600061259482612602565b825161034c919060481c63ffffffff16613572565b6125b3828261173c565b610957576125c081612618565b6125cb83602061262a565b6040516020016125dc9291906135ab565b60408051601f198184030181529082905262461bcd60e51b82526109449160040161361a565b805160009061034c9060701c60ff16600a613566565b606061034c6001600160a01b03831660145b60606000612639836002613572565b612644906002613202565b6001600160401b0381111561265b5761265b612e36565b6040519080825280601f01601f191660200182016040528015612685576020820181803683370190505b509050600360fc1b816000815181106126a0576126a061306e565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106126cf576126cf61306e565b60200101906001600160f81b031916908160001a90535060006126f3846002613572565b6126fe906001613202565b90505b6001811115612776576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106127325761273261306e565b1a60f81b8282815181106127485761274861306e565b60200101906001600160f81b031916908160001a90535060049490941c9361276f8161362d565b9050612701565b50831561089b5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610944565b60405180610180016040528060006001600160a01b03168152602001600015158152602001600063ffffffff16815260200160006001600160d81b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006020828403121561285257600080fd5b81356001600160e01b03198116811461089b57600080fd5b6001600160a01b03811681146121b157600080fd5b80151581146121b157600080fd5b600080604083850312156128a057600080fd5b82356128ab8161286a565b915060208301356128bb8161287f565b809150509250929050565b6000806000606084860312156128db57600080fd5b83356128e68161286a565b925060208401356128f68161286a565b915060408401356129068161287f565b809150509250925092565b60006020828403121561292357600080fd5b5035919050565b6000806040838503121561293d57600080fd5b8235915060208301356128bb8161286a565b6000806040838503121561296257600080fd5b823561296d8161286a565b915060208301356128bb8161286a565b6001600160a01b03169052565b61299582825161297d565b60208101516129a8602084018215159052565b5060408101516129c0604084018263ffffffff169052565b5060608101516129db60608401826001600160d81b03169052565b506080818101519083015260a0808201519083015260c0808201519083015260e0808201519083015261010080820151908301526101208082015190830152610140808201519083015261016090810151910152565b6020808252825182820181905260009190848201906040850190845b81811015612a7457612a6083855161298a565b928401926101809290920191600101612a4d565b50909695505050505050565b600060208284031215612a9257600080fd5b813561089b8161286a565b6001600160a01b0391909116815260200190565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a0810151612aef60a084018261297d565b5060c0810151612b0260c084018261297d565b5060e0810151612b1560e084018261297d565b5061010080820151612b298285018261297d565b505061012080820151612b3e8285018261297d565b50505050565b600061030082019050845182526020850151602083015260408501516040830152606085015160608301526080850151608083015260a085015160a083015260c085015160c083015260e0850151151560e08301526101008086015115158184015250612bb5610120830185612ab1565b8251610260830152602083015161028083015260408301516102a083015260608301516102c083015260808301516102e0830152949350505050565b60005b83811015612c0c578181015183820152602001612bf4565b50506000910152565b60008151808452612c2d816020860160208601612bf1565b601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015612cd557603f19898403018552815160a08151818652612c8e82870182612c15565b838b01516001600160a01b0316878c0152898401518a8801526060808501511515908801526080938401511515939096019290925250509386019390860190600101612c68565b509098975050505050505050565b600060208284031215612cf557600080fd5b815161089b8161286a565b60008060408385031215612d1357600080fd5b505080516020909101519092909150565b600060208284031215612d3657600080fd5b5051919050565b6001600160a01b039290921682521515602082015260400190565b8051612d638161286a565b919050565b600060208284031215612d7a57600080fd5b815160ff8116811461089b57600080fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561034c5761034c612d8b565b600061014082019050612dc882845161297d565b602083015160208301526040830151612de5604084018215159052565b50606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151818401525092915050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715612e6e57612e6e612e36565b60405290565b60405161018081016001600160401b0381118282101715612e6e57612e6e612e36565b604051601f8201601f191681016001600160401b0381118282101715612ebf57612ebf612e36565b604052919050565b60006001600160401b03821115612ee057612ee0612e36565b5060051b60200190565b8051612d638161287f565b60006020808385031215612f0857600080fd5b82516001600160401b0380821115612f1f57600080fd5b818501915085601f830112612f3357600080fd5b8151612f46612f4182612ec7565b612e97565b81815260059190911b83018401908481019088831115612f6557600080fd5b8585015b8381101561306157805185811115612f8057600080fd5b8601601f1960a0828d0382011215612f985760008081fd5b612fa0612e4c565b8983015188811115612fb25760008081fd5b8301603f81018e13612fc45760008081fd5b8a81015160408a821115612fda57612fda612e36565b612fea8d86601f85011601612e97565b94508185528f818385010111156130015760008081fd5b613010828e8701838601612bf1565b84845261301e818701612d58565b8d850152606094508486015181850152505050608061303e818501612eea565b8383015261304e60a08501612eea565b9082015285525050918601918601612f69565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b805163ffffffff81168114612d6357600080fd5b80516001600160d81b0381168114612d6357600080fd5b600061018082840312156130c257600080fd5b6130ca612e74565b90506130d582612d58565b81526130e360208301612eea565b60208201526130f460408301613084565b604082015261310560608301613098565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e082015261010080830151818301525061012080830151818301525061014080830151818301525061016080830151818301525092915050565b6000602080838503121561317b57600080fd5b82516001600160401b0381111561319157600080fd5b8301601f810185136131a257600080fd5b80516131b0612f4182612ec7565b81815261018091820283018401918482019190888411156131d057600080fd5b938501935b838510156131f6576131e789866130af565b835293840193918501916131d5565b50979650505050505050565b8082018082111561034c5761034c612d8b565b60006001820161322757613227612d8b565b5060010190565b6000610180828403121561324157600080fd5b61089b83836130af565b600081518084526020808501945080840160005b8381101561327b5781518752958201959082019060010161325f565b509495945050505050565b60006101a080835261329b818401865161297d565b60208501516101c06132b08186018315159052565b60408701516101e08681019190915260608801511515610200870152608088015192506132e161022087018461297d565b60a088015161024087015260c088015161026087015260e088015161028087015261010088015115156102a087015261012088015160ff9081166102c08801526101408901516001600160401b03166102e0880152610160890151610300880152610180890151610320880152938801519093166103408601528601516103608501929092525061337661038084018261324b565b91505061089b602083018461298a565b6000602080838503121561339957600080fd5b82516001600160401b038111156133af57600080fd5b8301601f810185136133c057600080fd5b80516133ce612f4182612ec7565b81815260059190911b820183019083810190878311156133ed57600080fd5b928401925b8284101561340b578351825292840192908401906133f2565b979650505050505050565b60006020828403121561342857600080fd5b604051602081016001600160401b038111828210171561344a5761344a612e36565b6040529151825250919050565b6001600160a01b0392909216825260ff16602082015260400190565b600181815b808511156134ae57816000190482111561349457613494612d8b565b808516156134a157918102915b93841c9390800290613478565b509250929050565b6000826134c55750600161034c565b816134d25750600061034c565b81600181146134e857600281146134f25761350e565b600191505061034c565b60ff84111561350357613503612d8b565b50506001821b61034c565b5060208310610133831016604e8410600b8410161715613531575081810a61034c565b61353b8383613473565b806000190482111561354f5761354f612d8b565b029392505050565b600061089b60ff8416836134b6565b600061089b83836134b6565b808202811582820484141761034c5761034c612d8b565b6000826135a657634e487b7160e01b600052601260045260246000fd5b500490565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516135dd816017850160208801612bf1565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161360e816028840160208801612bf1565b01602801949350505050565b60208152600061089b6020830184612c15565b60008161363c5761363c612d8b565b50600019019056fe59c7a9ef9a56707d87d116a5d27496afee2604c70b902ac2c4dbdcb68f36f2eacb6bc1c12dd43bca8d7dd46d975f913325437d0dcd5978e99d515e4ad39b97725d8e12c39142ff96d79d04d15d1ba1269e4fe57bb9d26f43523628b34ba108ecfb248bbb6ca5a799a6bb9ba79f58aa5cdbe0e5979238a967315e7ffbfd119d1a241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08275a642cf55cb12407e505ec86398168f240e88df6e66d1649bd09de9071c5dbf21b97e3e053faeacb5e76d16d9daf713b69d060518bccb2c9ee13a7f9cfc49f8d1089725c0dc266707fa6207730fb801dcd03108bfed7a21099bd303651d2b7a2646970667358221220b260462a726acecf626eeceebfeedcab4c564846ace6462906515922c43424bb64736f6c63430008110033",
"linkReferences": {},
"deployedLinkReferences": {}
}