@keep-network/tbtc-v2 0.1.1-dev.54 → 0.1.1-dev.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/artifacts/Bank.json +3 -3
  2. package/artifacts/Bridge.json +581 -234
  3. package/artifacts/Deposit.json +9 -9
  4. package/artifacts/DepositSweep.json +76 -0
  5. package/artifacts/EcdsaDkgValidator.json +1 -1
  6. package/artifacts/EcdsaInactivity.json +1 -1
  7. package/artifacts/Fraud.json +9 -9
  8. package/artifacts/KeepRegistry.json +1 -1
  9. package/artifacts/KeepStake.json +2 -2
  10. package/artifacts/KeepToken.json +2 -2
  11. package/artifacts/KeepTokenStaking.json +1 -1
  12. package/artifacts/MovingFunds.json +41 -11
  13. package/artifacts/NuCypherStakingEscrow.json +1 -1
  14. package/artifacts/NuCypherToken.json +2 -2
  15. package/artifacts/RandomBeaconStub.json +1 -1
  16. package/artifacts/Redemption.json +9 -9
  17. package/artifacts/ReimbursementPool.json +2 -2
  18. package/artifacts/Relay.json +9 -9
  19. package/artifacts/SortitionPool.json +2 -2
  20. package/artifacts/T.json +2 -2
  21. package/artifacts/TBTC.json +3 -3
  22. package/artifacts/TBTCToken.json +3 -3
  23. package/artifacts/TokenStaking.json +1 -1
  24. package/artifacts/TokenholderGovernor.json +9 -9
  25. package/artifacts/TokenholderTimelock.json +8 -8
  26. package/artifacts/VendingMachine.json +10 -10
  27. package/artifacts/VendingMachineKeep.json +1 -1
  28. package/artifacts/VendingMachineNuCypher.json +1 -1
  29. package/artifacts/WalletRegistry.json +2 -2
  30. package/artifacts/WalletRegistryGovernance.json +2 -2
  31. package/artifacts/Wallets.json +9 -9
  32. package/artifacts/solcInputs/{799c7b289d9b6d9cfc600d2fc23c7b64.json → d1140ac40baa1ba6f0d558afe0fa6d54.json} +10 -10
  33. package/build/contracts/GovernanceUtils.sol/GovernanceUtils.dbg.json +1 -1
  34. package/build/contracts/bank/Bank.sol/Bank.dbg.json +1 -1
  35. package/build/contracts/bridge/BitcoinTx.sol/BitcoinTx.dbg.json +1 -1
  36. package/build/contracts/bridge/BitcoinTx.sol/BitcoinTx.json +2 -2
  37. package/build/contracts/bridge/Bridge.sol/Bridge.dbg.json +1 -1
  38. package/build/contracts/bridge/Bridge.sol/Bridge.json +296 -128
  39. package/build/contracts/bridge/BridgeState.sol/BridgeState.dbg.json +1 -1
  40. package/build/contracts/bridge/BridgeState.sol/BridgeState.json +17 -11
  41. package/build/contracts/bridge/Deposit.sol/Deposit.dbg.json +1 -1
  42. package/build/contracts/bridge/Deposit.sol/Deposit.json +2 -2
  43. package/build/contracts/bridge/DepositSweep.sol/DepositSweep.dbg.json +4 -0
  44. package/build/contracts/bridge/DepositSweep.sol/DepositSweep.json +30 -0
  45. package/build/contracts/bridge/EcdsaLib.sol/EcdsaLib.dbg.json +1 -1
  46. package/build/contracts/bridge/Fraud.sol/Fraud.dbg.json +1 -1
  47. package/build/contracts/bridge/Fraud.sol/Fraud.json +2 -2
  48. package/build/contracts/bridge/IRelay.sol/IRelay.dbg.json +1 -1
  49. package/build/contracts/bridge/MovingFunds.sol/MovingFunds.dbg.json +1 -1
  50. package/build/contracts/bridge/MovingFunds.sol/MovingFunds.json +21 -2
  51. package/build/contracts/bridge/Redemption.sol/OutboundTx.dbg.json +1 -1
  52. package/build/contracts/bridge/Redemption.sol/OutboundTx.json +2 -2
  53. package/build/contracts/bridge/Redemption.sol/Redemption.dbg.json +1 -1
  54. package/build/contracts/bridge/Redemption.sol/Redemption.json +2 -2
  55. package/build/contracts/bridge/VendingMachine.sol/VendingMachine.dbg.json +1 -1
  56. package/build/contracts/bridge/Wallets.sol/Wallets.dbg.json +1 -1
  57. package/build/contracts/bridge/Wallets.sol/Wallets.json +2 -2
  58. package/build/contracts/token/TBTC.sol/TBTC.dbg.json +1 -1
  59. package/build/contracts/vault/IVault.sol/IVault.dbg.json +1 -1
  60. package/build/contracts/vault/TBTCVault.sol/TBTCVault.dbg.json +1 -1
  61. package/contracts/bridge/BitcoinTx.sol +69 -0
  62. package/contracts/bridge/Bridge.sol +132 -49
  63. package/contracts/bridge/BridgeState.sol +77 -46
  64. package/contracts/bridge/{Sweep.sol → DepositSweep.sol} +30 -18
  65. package/contracts/bridge/MovingFunds.sol +480 -76
  66. package/contracts/bridge/Wallets.sol +2 -0
  67. package/deploy/05_deploy_bridge.ts +5 -2
  68. package/export.json +348 -81
  69. package/package.json +1 -1
  70. package/artifacts/Sweep.json +0 -76
  71. package/build/contracts/bridge/Sweep.sol/Sweep.dbg.json +0 -4
  72. package/build/contracts/bridge/Sweep.sol/Sweep.json +0 -30
@@ -217,16 +217,10 @@
217
217
  {
218
218
  "anonymous": false,
219
219
  "inputs": [
220
- {
221
- "indexed": false,
222
- "internalType": "uint96",
223
- "name": "fraudSlashingAmount",
224
- "type": "uint96"
225
- },
226
220
  {
227
221
  "indexed": false,
228
222
  "internalType": "uint256",
229
- "name": "fraudNotifierRewardMultiplier",
223
+ "name": "fraudChallengeDepositAmount",
230
224
  "type": "uint256"
231
225
  },
232
226
  {
@@ -235,10 +229,16 @@
235
229
  "name": "fraudChallengeDefeatTimeout",
236
230
  "type": "uint256"
237
231
  },
232
+ {
233
+ "indexed": false,
234
+ "internalType": "uint96",
235
+ "name": "fraudSlashingAmount",
236
+ "type": "uint96"
237
+ },
238
238
  {
239
239
  "indexed": false,
240
240
  "internalType": "uint256",
241
- "name": "fraudChallengeDepositAmount",
241
+ "name": "fraudNotifierRewardMultiplier",
242
242
  "type": "uint256"
243
243
  }
244
244
  ],
@@ -264,6 +264,25 @@
264
264
  "name": "GovernanceTransferred",
265
265
  "type": "event"
266
266
  },
267
+ {
268
+ "anonymous": false,
269
+ "inputs": [
270
+ {
271
+ "indexed": false,
272
+ "internalType": "bytes20",
273
+ "name": "walletPubKeyHash",
274
+ "type": "bytes20"
275
+ },
276
+ {
277
+ "indexed": false,
278
+ "internalType": "bytes32",
279
+ "name": "sweepTxHash",
280
+ "type": "bytes32"
281
+ }
282
+ ],
283
+ "name": "MovedFundsSwept",
284
+ "type": "event"
285
+ },
267
286
  {
268
287
  "anonymous": false,
269
288
  "inputs": [
@@ -330,6 +349,12 @@
330
349
  "name": "movingFundsTxMaxTotalFee",
331
350
  "type": "uint64"
332
351
  },
352
+ {
353
+ "indexed": false,
354
+ "internalType": "uint64",
355
+ "name": "movingFundsDustThreshold",
356
+ "type": "uint64"
357
+ },
333
358
  {
334
359
  "indexed": false,
335
360
  "internalType": "uint32",
@@ -351,7 +376,7 @@
351
376
  {
352
377
  "indexed": false,
353
378
  "internalType": "uint64",
354
- "name": "movingFundsDustThreshold",
379
+ "name": "movedFundsSweepTxMaxTotalFee",
355
380
  "type": "uint64"
356
381
  }
357
382
  ],
@@ -888,14 +913,9 @@
888
913
  "inputs": [],
889
914
  "name": "fraudParameters",
890
915
  "outputs": [
891
- {
892
- "internalType": "uint96",
893
- "name": "fraudSlashingAmount",
894
- "type": "uint96"
895
- },
896
916
  {
897
917
  "internalType": "uint256",
898
- "name": "fraudNotifierRewardMultiplier",
918
+ "name": "fraudChallengeDepositAmount",
899
919
  "type": "uint256"
900
920
  },
901
921
  {
@@ -903,9 +923,14 @@
903
923
  "name": "fraudChallengeDefeatTimeout",
904
924
  "type": "uint256"
905
925
  },
926
+ {
927
+ "internalType": "uint96",
928
+ "name": "fraudSlashingAmount",
929
+ "type": "uint96"
930
+ },
906
931
  {
907
932
  "internalType": "uint256",
908
- "name": "fraudChallengeDepositAmount",
933
+ "name": "fraudNotifierRewardMultiplier",
909
934
  "type": "uint256"
910
935
  }
911
936
  ],
@@ -957,6 +982,47 @@
957
982
  "stateMutability": "view",
958
983
  "type": "function"
959
984
  },
985
+ {
986
+ "inputs": [
987
+ {
988
+ "internalType": "uint256",
989
+ "name": "requestKey",
990
+ "type": "uint256"
991
+ }
992
+ ],
993
+ "name": "movedFundsSweepRequests",
994
+ "outputs": [
995
+ {
996
+ "components": [
997
+ {
998
+ "internalType": "bytes20",
999
+ "name": "walletPubKeyHash",
1000
+ "type": "bytes20"
1001
+ },
1002
+ {
1003
+ "internalType": "uint64",
1004
+ "name": "value",
1005
+ "type": "uint64"
1006
+ },
1007
+ {
1008
+ "internalType": "uint32",
1009
+ "name": "createdAt",
1010
+ "type": "uint32"
1011
+ },
1012
+ {
1013
+ "internalType": "uint32",
1014
+ "name": "sweptAt",
1015
+ "type": "uint32"
1016
+ }
1017
+ ],
1018
+ "internalType": "struct MovingFunds.MovedFundsSweepRequest",
1019
+ "name": "",
1020
+ "type": "tuple"
1021
+ }
1022
+ ],
1023
+ "stateMutability": "view",
1024
+ "type": "function"
1025
+ },
960
1026
  {
961
1027
  "inputs": [],
962
1028
  "name": "movingFundsParameters",
@@ -966,6 +1032,11 @@
966
1032
  "name": "movingFundsTxMaxTotalFee",
967
1033
  "type": "uint64"
968
1034
  },
1035
+ {
1036
+ "internalType": "uint64",
1037
+ "name": "movingFundsDustThreshold",
1038
+ "type": "uint64"
1039
+ },
969
1040
  {
970
1041
  "internalType": "uint32",
971
1042
  "name": "movingFundsTimeout",
@@ -983,7 +1054,7 @@
983
1054
  },
984
1055
  {
985
1056
  "internalType": "uint64",
986
- "name": "movingFundsDustThreshold",
1057
+ "name": "movedFundsSweepTxMaxTotalFee",
987
1058
  "type": "uint64"
988
1059
  }
989
1060
  ],
@@ -1413,49 +1484,53 @@
1413
1484
  {
1414
1485
  "inputs": [
1415
1486
  {
1416
- "internalType": "bytes",
1417
- "name": "walletPublicKey",
1418
- "type": "bytes"
1419
- },
1420
- {
1421
- "internalType": "bytes32",
1422
- "name": "sighash",
1423
- "type": "bytes32"
1487
+ "components": [
1488
+ {
1489
+ "internalType": "bytes4",
1490
+ "name": "version",
1491
+ "type": "bytes4"
1492
+ },
1493
+ {
1494
+ "internalType": "bytes",
1495
+ "name": "inputVector",
1496
+ "type": "bytes"
1497
+ },
1498
+ {
1499
+ "internalType": "bytes",
1500
+ "name": "outputVector",
1501
+ "type": "bytes"
1502
+ },
1503
+ {
1504
+ "internalType": "bytes4",
1505
+ "name": "locktime",
1506
+ "type": "bytes4"
1507
+ }
1508
+ ],
1509
+ "internalType": "struct BitcoinTx.Info",
1510
+ "name": "sweepTx",
1511
+ "type": "tuple"
1424
1512
  },
1425
1513
  {
1426
1514
  "components": [
1427
1515
  {
1428
- "internalType": "bytes32",
1429
- "name": "r",
1430
- "type": "bytes32"
1516
+ "internalType": "bytes",
1517
+ "name": "merkleProof",
1518
+ "type": "bytes"
1431
1519
  },
1432
1520
  {
1433
- "internalType": "bytes32",
1434
- "name": "s",
1435
- "type": "bytes32"
1521
+ "internalType": "uint256",
1522
+ "name": "txIndexInBlock",
1523
+ "type": "uint256"
1436
1524
  },
1437
1525
  {
1438
- "internalType": "uint8",
1439
- "name": "v",
1440
- "type": "uint8"
1526
+ "internalType": "bytes",
1527
+ "name": "bitcoinHeaders",
1528
+ "type": "bytes"
1441
1529
  }
1442
1530
  ],
1443
- "internalType": "struct BitcoinTx.RSVSignature",
1444
- "name": "signature",
1531
+ "internalType": "struct BitcoinTx.Proof",
1532
+ "name": "sweepProof",
1445
1533
  "type": "tuple"
1446
- }
1447
- ],
1448
- "name": "submitFraudChallenge",
1449
- "outputs": [],
1450
- "stateMutability": "payable",
1451
- "type": "function"
1452
- },
1453
- {
1454
- "inputs": [
1455
- {
1456
- "internalType": "bytes20",
1457
- "name": "walletPubKeyHash",
1458
- "type": "bytes20"
1459
1534
  },
1460
1535
  {
1461
1536
  "components": [
@@ -1476,28 +1551,53 @@
1476
1551
  }
1477
1552
  ],
1478
1553
  "internalType": "struct BitcoinTx.UTXO",
1479
- "name": "walletMainUtxo",
1554
+ "name": "mainUtxo",
1480
1555
  "type": "tuple"
1481
- },
1556
+ }
1557
+ ],
1558
+ "name": "submitDepositSweepProof",
1559
+ "outputs": [],
1560
+ "stateMutability": "nonpayable",
1561
+ "type": "function"
1562
+ },
1563
+ {
1564
+ "inputs": [
1482
1565
  {
1483
- "internalType": "uint32[]",
1484
- "name": "walletMembersIDs",
1485
- "type": "uint32[]"
1566
+ "internalType": "bytes",
1567
+ "name": "walletPublicKey",
1568
+ "type": "bytes"
1486
1569
  },
1487
1570
  {
1488
- "internalType": "uint256",
1489
- "name": "walletMemberIndex",
1490
- "type": "uint256"
1571
+ "internalType": "bytes32",
1572
+ "name": "sighash",
1573
+ "type": "bytes32"
1491
1574
  },
1492
1575
  {
1493
- "internalType": "bytes20[]",
1494
- "name": "targetWallets",
1495
- "type": "bytes20[]"
1576
+ "components": [
1577
+ {
1578
+ "internalType": "bytes32",
1579
+ "name": "r",
1580
+ "type": "bytes32"
1581
+ },
1582
+ {
1583
+ "internalType": "bytes32",
1584
+ "name": "s",
1585
+ "type": "bytes32"
1586
+ },
1587
+ {
1588
+ "internalType": "uint8",
1589
+ "name": "v",
1590
+ "type": "uint8"
1591
+ }
1592
+ ],
1593
+ "internalType": "struct BitcoinTx.RSVSignature",
1594
+ "name": "signature",
1595
+ "type": "tuple"
1496
1596
  }
1497
1597
  ],
1498
- "name": "submitMovingFundsCommitment",
1598
+ "name": "submitFraudChallenge",
1499
1599
  "outputs": [],
1500
- "stateMutability": "nonpayable",
1600
+ "stateMutability": "payable",
1501
1601
  "type": "function"
1502
1602
  },
1503
1603
  {
@@ -1526,7 +1626,7 @@
1526
1626
  }
1527
1627
  ],
1528
1628
  "internalType": "struct BitcoinTx.Info",
1529
- "name": "movingFundsTx",
1629
+ "name": "sweepTx",
1530
1630
  "type": "tuple"
1531
1631
  },
1532
1632
  {
@@ -1548,7 +1648,7 @@
1548
1648
  }
1549
1649
  ],
1550
1650
  "internalType": "struct BitcoinTx.Proof",
1551
- "name": "movingFundsProof",
1651
+ "name": "sweepProof",
1552
1652
  "type": "tuple"
1553
1653
  },
1554
1654
  {
@@ -1572,14 +1672,59 @@
1572
1672
  "internalType": "struct BitcoinTx.UTXO",
1573
1673
  "name": "mainUtxo",
1574
1674
  "type": "tuple"
1575
- },
1675
+ }
1676
+ ],
1677
+ "name": "submitMovedFundsSweepProof",
1678
+ "outputs": [],
1679
+ "stateMutability": "nonpayable",
1680
+ "type": "function"
1681
+ },
1682
+ {
1683
+ "inputs": [
1576
1684
  {
1577
1685
  "internalType": "bytes20",
1578
1686
  "name": "walletPubKeyHash",
1579
1687
  "type": "bytes20"
1688
+ },
1689
+ {
1690
+ "components": [
1691
+ {
1692
+ "internalType": "bytes32",
1693
+ "name": "txHash",
1694
+ "type": "bytes32"
1695
+ },
1696
+ {
1697
+ "internalType": "uint32",
1698
+ "name": "txOutputIndex",
1699
+ "type": "uint32"
1700
+ },
1701
+ {
1702
+ "internalType": "uint64",
1703
+ "name": "txOutputValue",
1704
+ "type": "uint64"
1705
+ }
1706
+ ],
1707
+ "internalType": "struct BitcoinTx.UTXO",
1708
+ "name": "walletMainUtxo",
1709
+ "type": "tuple"
1710
+ },
1711
+ {
1712
+ "internalType": "uint32[]",
1713
+ "name": "walletMembersIDs",
1714
+ "type": "uint32[]"
1715
+ },
1716
+ {
1717
+ "internalType": "uint256",
1718
+ "name": "walletMemberIndex",
1719
+ "type": "uint256"
1720
+ },
1721
+ {
1722
+ "internalType": "bytes20[]",
1723
+ "name": "targetWallets",
1724
+ "type": "bytes20[]"
1580
1725
  }
1581
1726
  ],
1582
- "name": "submitMovingFundsProof",
1727
+ "name": "submitMovingFundsCommitment",
1583
1728
  "outputs": [],
1584
1729
  "stateMutability": "nonpayable",
1585
1730
  "type": "function"
@@ -1610,7 +1755,7 @@
1610
1755
  }
1611
1756
  ],
1612
1757
  "internalType": "struct BitcoinTx.Info",
1613
- "name": "redemptionTx",
1758
+ "name": "movingFundsTx",
1614
1759
  "type": "tuple"
1615
1760
  },
1616
1761
  {
@@ -1632,7 +1777,7 @@
1632
1777
  }
1633
1778
  ],
1634
1779
  "internalType": "struct BitcoinTx.Proof",
1635
- "name": "redemptionProof",
1780
+ "name": "movingFundsProof",
1636
1781
  "type": "tuple"
1637
1782
  },
1638
1783
  {
@@ -1663,7 +1808,7 @@
1663
1808
  "type": "bytes20"
1664
1809
  }
1665
1810
  ],
1666
- "name": "submitRedemptionProof",
1811
+ "name": "submitMovingFundsProof",
1667
1812
  "outputs": [],
1668
1813
  "stateMutability": "nonpayable",
1669
1814
  "type": "function"
@@ -1694,7 +1839,7 @@
1694
1839
  }
1695
1840
  ],
1696
1841
  "internalType": "struct BitcoinTx.Info",
1697
- "name": "sweepTx",
1842
+ "name": "redemptionTx",
1698
1843
  "type": "tuple"
1699
1844
  },
1700
1845
  {
@@ -1716,7 +1861,7 @@
1716
1861
  }
1717
1862
  ],
1718
1863
  "internalType": "struct BitcoinTx.Proof",
1719
- "name": "sweepProof",
1864
+ "name": "redemptionProof",
1720
1865
  "type": "tuple"
1721
1866
  },
1722
1867
  {
@@ -1740,9 +1885,14 @@
1740
1885
  "internalType": "struct BitcoinTx.UTXO",
1741
1886
  "name": "mainUtxo",
1742
1887
  "type": "tuple"
1888
+ },
1889
+ {
1890
+ "internalType": "bytes20",
1891
+ "name": "walletPubKeyHash",
1892
+ "type": "bytes20"
1743
1893
  }
1744
1894
  ],
1745
- "name": "submitSweepProof",
1895
+ "name": "submitRedemptionProof",
1746
1896
  "outputs": [],
1747
1897
  "stateMutability": "nonpayable",
1748
1898
  "type": "function"
@@ -1857,14 +2007,9 @@
1857
2007
  },
1858
2008
  {
1859
2009
  "inputs": [
1860
- {
1861
- "internalType": "uint96",
1862
- "name": "fraudSlashingAmount",
1863
- "type": "uint96"
1864
- },
1865
2010
  {
1866
2011
  "internalType": "uint256",
1867
- "name": "fraudNotifierRewardMultiplier",
2012
+ "name": "fraudChallengeDepositAmount",
1868
2013
  "type": "uint256"
1869
2014
  },
1870
2015
  {
@@ -1872,9 +2017,14 @@
1872
2017
  "name": "fraudChallengeDefeatTimeout",
1873
2018
  "type": "uint256"
1874
2019
  },
2020
+ {
2021
+ "internalType": "uint96",
2022
+ "name": "fraudSlashingAmount",
2023
+ "type": "uint96"
2024
+ },
1875
2025
  {
1876
2026
  "internalType": "uint256",
1877
- "name": "fraudChallengeDepositAmount",
2027
+ "name": "fraudNotifierRewardMultiplier",
1878
2028
  "type": "uint256"
1879
2029
  }
1880
2030
  ],
@@ -1890,6 +2040,11 @@
1890
2040
  "name": "movingFundsTxMaxTotalFee",
1891
2041
  "type": "uint64"
1892
2042
  },
2043
+ {
2044
+ "internalType": "uint64",
2045
+ "name": "movingFundsDustThreshold",
2046
+ "type": "uint64"
2047
+ },
1893
2048
  {
1894
2049
  "internalType": "uint32",
1895
2050
  "name": "movingFundsTimeout",
@@ -1907,7 +2062,7 @@
1907
2062
  },
1908
2063
  {
1909
2064
  "internalType": "uint64",
1910
- "name": "movingFundsDustThreshold",
2065
+ "name": "movedFundsSweepTxMaxTotalFee",
1911
2066
  "type": "uint64"
1912
2067
  }
1913
2068
  ],
@@ -2082,6 +2237,11 @@
2082
2237
  "name": "closingStartedAt",
2083
2238
  "type": "uint32"
2084
2239
  },
2240
+ {
2241
+ "internalType": "uint32",
2242
+ "name": "pendingMovedFundsSweepRequestsCount",
2243
+ "type": "uint32"
2244
+ },
2085
2245
  {
2086
2246
  "internalType": "enum Wallets.WalletState",
2087
2247
  "name": "state",
@@ -2102,14 +2262,22 @@
2102
2262
  "type": "function"
2103
2263
  }
2104
2264
  ],
2105
- "bytecode": "0x60806040523480156200001157600080fd5b5060405162003ec538038062003ec58339810160408190526200003491620003b7565b6001600160a01b038516620000905760405162461bcd60e51b815260206004820152601b60248201527f42616e6b20616464726573732063616e6e6f74206265207a65726f000000000060448201526064015b60405180910390fd5b600180546001600160a01b0319166001600160a01b03878116919091179091558416620001005760405162461bcd60e51b815260206004820152601c60248201527f52656c617920616464726573732063616e6e6f74206265207a65726f00000000604482015260640162000087565b600280546001600160a01b0319166001600160a01b03868116919091179091558216620001855760405162461bcd60e51b815260206004820152602c60248201527f45434453412057616c6c6574205265676973747279206164647265737320636160448201526b6e6e6f74206265207a65726f60a01b606482015260840162000087565b600380546001600160a01b0319166001600160a01b03848116919091179091558316620001f55760405162461bcd60e51b815260206004820152601f60248201527f547265617375727920616464726573732063616e6e6f74206265207a65726f00604482015260640162000087565b6005805460048390556001600160a01b0385166001600160e01b031990911617613d0960a61b179055600680546001600160801b03191669271000000000000007d01790556202a300600c55600d805469021e19e0c9bab24000006001600160601b031991821681179092556064600e819055600980546001600160c01b03191675021e19e0c9bab240000000093a800000000000002710179055600a81905579271000000000000007d000000000000f42400000000000004e20600b5560118054909216909217905560125562093a80601355671bc16d674ec800006014557eeff1000000000002faf08000000002540be4000000000005f5e10000093a80601755601880546001600160c01b0316621dcd6560c91b179055601980546234bc0063ffffffff199091161790556200032e3362000339565b50505050506200041e565b600080546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b80516001600160a01b0381168114620003b257600080fd5b919050565b600080600080600060a08688031215620003d057600080fd5b620003db866200039a565b9450620003eb602087016200039a565b9350620003fb604087016200039a565b92506200040b606087016200039a565b9150608086015190509295509295909350565b613a97806200042e6000396000f3fe6080604052600436106102d15760003560e01c80636e70ce4111610179578063b2146cd6116100d6578063c8b5d2db1161008a578063ded1d24a11610064578063ded1d24a14610d2d578063e53c0b5514610d5e578063e65e19d514610d9757600080fd5b8063c8b5d2db14610ccd578063d38bfff414610ced578063d6eccdf014610d0d57600080fd5b8063b34b3216116100bb578063b34b321614610bf1578063be05abe314610c11578063c42b64d014610c8157600080fd5b8063b2146cd614610b91578063b216bd3514610bd157600080fd5b8063a145e2d51161012d578063a9de2f3a11610112578063a9de2f3a146109ec578063abaeed8f14610a2c578063b02c43d014610a4c57600080fd5b8063a145e2d5146109ac578063a8fa0f42146109cc57600080fd5b806377145f211161015e57806377145f211461094c578063883d6a111461096c57806392238f321461098c57600080fd5b80636e70ce411461086057806375b922d11461090457600080fd5b806333e957cb116102325780635aa6e675116101e657806361ccf97a116101c057806361ccf97a146107a757806361d027b31461082f5780636d02b43c1461084d57600080fd5b80635aa6e6751461072f5780635c0b48121461076757806360d712fc1461078757600080fd5b80634fb1b4c6116102175780634fb1b4c6146106cf578063575e4279146106ef57806359a9d90a1461070f57600080fd5b806333e957cb146105d05780633dce9812146106af57600080fd5b806324028c11116102895780632bb818c21161026e5780632bb818c2146105725780632f429b641461059057806331a4889a146105b057600080fd5b806324028c111461052057806329e3e74d1461055257600080fd5b80630b6ba19d116102ba5780630b6ba19d1461042257806310760882146104e057806317c964001461050057600080fd5b806303d952f7146102d657806307f7d22314610400575b600080fd5b3480156102e257600080fd5b506103946102f1366004612aa7565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506000908152600f6020908152604091829020825160a08101845281546001600160a01b0381168252600160a01b900467ffffffffffffffff9081169382019390935260019091015480831693820193909352600160401b83049091166060820152600160801b90910463ffffffff16608082015290565b6040516103f79190600060a0820190506001600160a01b038351168252602083015167ffffffffffffffff8082166020850152806040860151166040850152806060860151166060850152505063ffffffff608084015116608083015292915050565b60405180910390f35b34801561040c57600080fd5b5061042061041b366004612afa565b610dc4565b005b34801561042e57600080fd5b5061039461043d366004612aa7565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915250600090815260106020908152604091829020825160a08101845281546001600160a01b0381168252600160a01b900467ffffffffffffffff9081169382019390935260019091015480831693820193909352600160401b83049091166060820152600160801b90910463ffffffff16608082015290565b3480156104ec57600080fd5b506104206104fb366004612b4a565b610e4d565b34801561050c57600080fd5b5061042061051b366004612b9b565b610ec0565b34801561052c57600080fd5b50601854600160a01b900463ffffffff1660405163ffffffff90911681526020016103f7565b34801561055e57600080fd5b5061042061056d366004612bf2565b610f2c565b34801561057e57600080fd5b506004546040519081526020016103f7565b34801561059c57600080fd5b506104206105ab366004612c62565b610f9c565b3480156105bc57600080fd5b506104206105cb366004612d76565b611029565b3480156105dc57600080fd5b5061066b6105eb366004612aa7565b60408051608081018252600080825260208201819052918101829052606081019190915250600090815260156020908152604091829020825160808101845281546001600160a01b031681526001820154928101929092526002015463ffffffff81169282019290925264010000000090910460ff161515606082015290565b6040516103f7919081516001600160a01b031681526020808301519082015260408083015163ffffffff169082015260609182015115159181019190915260800190565b3480156106bb57600080fd5b506104206106ca366004612df7565b6110bb565b3480156106db57600080fd5b506104206106ea366004612e23565b61114b565b3480156106fb57600080fd5b5061042061070a366004612afa565b6111a6565b34801561071b57600080fd5b5061042061072a366004612e97565b6111fb565b34801561073b57600080fd5b5060005461074f906001600160a01b031681565b6040516001600160a01b0390911681526020016103f7565b34801561077357600080fd5b50610420610782366004612f03565b611252565b34801561079357600080fd5b506104206107a2366004612f85565b6112a7565b3480156107b357600080fd5b506017546018546019546040805163ffffffff808616825267ffffffffffffffff640100000000870481166020840152600160601b8704811693830193909352600160a01b860483166060830152600160e01b90950485166080820152600160c01b9093041660a08301529190911660c082015260e0016103f7565b34801561083b57600080fd5b506005546001600160a01b031661074f565b61042061085b366004612faf565b611360565b34801561086c57600080fd5b506108b7600b54600c54600d54600e5467ffffffffffffffff600160401b8504811695600160801b8604821695600160c01b900490911693926bffffffffffffffffffffffff169190565b6040805167ffffffffffffffff97881681529587166020870152939095169284019290925260608301526bffffffffffffffffffffffff16608082015260a081019190915260c0016103f7565b34801561091057600080fd5b50601154601254601354601454604080516bffffffffffffffffffffffff909516855260208501939093529183015260608201526080016103f7565b34801561095857600080fd5b50610420610967366004613002565b6113b9565b34801561097857600080fd5b50610420610987366004613077565b611414565b34801561099857600080fd5b506104206109a73660046130fd565b61147f565b3480156109b857600080fd5b506104206109c7366004613150565b6114d6565b3480156109d857600080fd5b506104206109e7366004612df7565b611555565b3480156109f857600080fd5b50600154600254600354604080516001600160a01b03948516815292841660208401529216918101919091526060016103f7565b348015610a3857600080fd5b50610420610a47366004613173565b6115bb565b348015610a5857600080fd5b50610b1b610a67366004612aa7565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915250600090815260076020908152604091829020825160c08101845281546001600160a01b03808216835267ffffffffffffffff600160a01b80840482169685019690965263ffffffff600160e01b938490048116978501979097526001949094015490811660608401529384049092166080820152910490911660a082015290565b6040516103f79190600060c0820190506001600160a01b03808451168352602084015167ffffffffffffffff80821660208601526040860151915063ffffffff80831660408701528360608801511660608701528160808801511660808701528060a08801511660a08701525050505092915050565b348015610b9d57600080fd5b50610bc1610bac366004612aa7565b60009081526016602052604090205460ff1690565b60405190151581526020016103f7565b348015610bdd57600080fd5b50610420610bec36600461320f565b611653565b348015610bfd57600080fd5b50610420610c0c366004612c62565b6116bd565b348015610c1d57600080fd5b50600954600a54600b546040805167ffffffffffffffff8086168252600160401b860463ffffffff166020830152600160601b9095046bffffffffffffffffffffffff1691810191909152606081019290925291909116608082015260a0016103f7565b348015610c8d57600080fd5b5060055460065460408051600160a01b90930467ffffffffffffffff90811684528083166020850152600160401b909204909116908201526060016103f7565b348015610cd957600080fd5b50610420610ce8366004613275565b611716565b348015610cf957600080fd5b50610420610d08366004613290565b611724565b348015610d1957600080fd5b50610420610d283660046132ab565b611803565b348015610d3957600080fd5b5060185460601b6040516bffffffffffffffffffffffff1990911681526020016103f7565b348015610d6a57600080fd5b50610bc1610d79366004613290565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610da357600080fd5b50610db7610db2366004613275565b61185e565b6040516103f7919061332c565b6040517f260b6cde00000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063260b6cde90610e1990600190869086906004016133f7565b60006040518083038186803b158015610e3157600080fd5b505af4158015610e45573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610eac5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064015b60405180910390fd5b610eba600185858585611968565b50505050565b6000546001600160a01b03163314610f1a5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610ea3565b610f276001848484611ae2565b505050565b6000546001600160a01b03163314610f865760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610ea3565b610f9560018686868686611d28565b5050505050565b6040517e92bac900000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__906292bac990610ff39060019088908890889088906004016135b3565b60006040518083038186803b15801561100b57600080fd5b505af415801561101f573d6000803e3d6000fd5b5050505050505050565b6040517fa76558b300000000000000000000000000000000000000000000000000000000815273__$9935b6ea18e0c526c293569ddd26842c9b$__9063a76558b3906110849060019089908990899089908990600401613651565b60006040518083038186803b15801561109c57600080fd5b505af41580156110b0573d6000803e3d6000fd5b505050505050505050565b6040517fc87de7f400000000000000000000000000000000000000000000000000000000815260016004820152602481018390526044810182905273__$0f118c52967a3847a37f0a2ef02ffcee04$__9063c87de7f4906064015b60006040518083038186803b15801561112e57600080fd5b505af4158015611142573d6000803e3d6000fd5b50505050505050565b6040517f89b43a8600000000000000000000000000000000000000000000000000000000815273__$a542940934c03bae9a39609192cb25cc3c$__906389b43a869061108490600190899089908990899089906004016136a0565b6040517f99b0b84700000000000000000000000000000000000000000000000000000000815273__$0f118c52967a3847a37f0a2ef02ffcee04$__906399b0b84790610e1990600190869086906004016133f7565b6040517f510fc50a00000000000000000000000000000000000000000000000000000000815273__$61f169726e973bba1227e0c23d2755f88e$__9063510fc50a90611116906001908790879087906004016136e1565b6040517faea7fd0b00000000000000000000000000000000000000000000000000000000815273__$894ce12e79ca3e5683c1b49e363f37fa22$__9063aea7fd0b90610e199060019086908690600401613725565b6000546001600160a01b031633146113015760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610ea3565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f9065599c12c4294d9e2201638226d0d0beb95c228f468c4e7c2bdb8322b6066f910160405180910390a25050565b6040517f3b5d9f2400000000000000000000000000000000000000000000000000000000815273__$a542940934c03bae9a39609192cb25cc3c$__90633b5d9f2490610ff3906001908890889088908890600401613862565b6040517f624526fe00000000000000000000000000000000000000000000000000000000815273__$a542940934c03bae9a39609192cb25cc3c$__9063624526fe9061108490600190899089908990899089906004016138bc565b6000546001600160a01b0316331461146e5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610ea3565b611142600188888888888888612031565b6040517f07f96c4200000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__906307f96c4290611116906001908790879087906004016138ff565b6040517fd079fbb100000000000000000000000000000000000000000000000000000000815273__$0f118c52967a3847a37f0a2ef02ffcee04$__9063d079fbb19061152990600190859060040161392e565b60006040518083038186803b15801561154157600080fd5b505af4158015610f95573d6000803e3d6000fd5b6040517f4afbe4c90000000000000000000000000000000000000000000000000000000081526001600482015260248101849052604481018390526064810182905273__$0f118c52967a3847a37f0a2ef02ffcee04$__90634afbe4c990608401611116565b6040517fc8f7794300000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063c8f779439061161a906001908b908b908b908b908b908b908b90600401613942565b60006040518083038186803b15801561163257600080fd5b505af4158015611646573d6000803e3d6000fd5b5050505050505050505050565b6000546001600160a01b031633146116ad5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610ea3565b610e456001878787878787612401565b6040517fa164de6e00000000000000000000000000000000000000000000000000000000815273__$9935b6ea18e0c526c293569ddd26842c9b$__9063a164de6e90610ff39060019088908890889088906004016135b3565b6117216001826127c8565b50565b6000546001600160a01b0316331461177e5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610ea3565b6001600160a01b0381166117fa5760405162461bcd60e51b815260206004820152602260248201527f4e657720676f7665726e616e636520697320746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610ea3565b61172181612925565b6040517f7333b36900000000000000000000000000000000000000000000000000000000815273__$9935b6ea18e0c526c293569ddd26842c9b$__90637333b3699061108490600190899089908990899089906004016139d2565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101919091526bffffffffffffffffffffffff1982166000908152601a602090815260409182902082516101008101845281548152600182015492810192909252600281015467ffffffffffffffff81169383019390935263ffffffff600160401b840481166060840152600160601b840481166080840152600160801b84041660a0830152909160c083019060ff600160a01b90910416600581111561194257611942613316565b600581111561195357611953613316565b81526020016003820154815250509050919050565b60648311156119df5760405162461bcd60e51b815260206004820152603e60248201527f4672617564206e6f74696669657220726577617264206d756c7469706c69657260448201527f206d75737420626520696e207468652072616e6765205b302c203130305d00006064820152608401610ea3565b60008211611a555760405162461bcd60e51b815260206004820152603860248201527f4672617564206368616c6c656e6765206465666561742074696d656f7574206d60448201527f7573742062652067726561746572207468616e207a65726f00000000000000006064820152608401610ea3565b6010850180546bffffffffffffffffffffffff19166bffffffffffffffffffffffff861690811790915560118601849055601286018390556013860182905560408051918252602082018590528101839052606081018290527f05a00d49ab61707f55232992ae68b57d8ed6e071aa0f9b88f992f19215a5f0869060800160405180910390a15050505050565b60008367ffffffffffffffff1611611b625760405162461bcd60e51b815260206004820152603060248201527f4465706f7369742064757374207468726573686f6c64206d757374206265206760448201527f726561746572207468616e207a65726f000000000000000000000000000000006064820152608401610ea3565b60008267ffffffffffffffff1611611be25760405162461bcd60e51b815260206004820152603660248201527f4465706f736974207472656173757279206665652064697669736f72206d757360448201527f742062652067726561746572207468616e207a65726f000000000000000000006064820152608401610ea3565b60008167ffffffffffffffff1611611c625760405162461bcd60e51b815260206004820152603560248201527f4465706f736974207472616e73616374696f6e206d617820666565206d75737460448201527f2062652067726561746572207468616e207a65726f00000000000000000000006064820152608401610ea3565b6004840180547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff16600160a01b67ffffffffffffffff868116918202929092179092556005860180548583167fffffffffffffffffffffffffffffffff000000000000000000000000000000009091168117600160401b938616938402179091556040805193845260208401919091528201527f1ced468902ca566e746a3c8c9516af81f8de9f1021c365083be9f2625ebfb7b59060600160405180910390a150505050565b60008567ffffffffffffffff1611611daa576040805162461bcd60e51b81526020600482015260248101919091527f4d6f76696e672066756e6473207472616e73616374696f6e206d617820746f7460448201527f616c20666565206d7573742062652067726561746572207468616e207a65726f6064820152608401610ea3565b60008463ffffffff1611611e265760405162461bcd60e51b815260206004820152602e60248201527f4d6f76696e672066756e64732074696d656f7574206d7573742062652067726560448201527f61746572207468616e207a65726f0000000000000000000000000000000000006064820152608401610ea3565b6064821115611ec35760405162461bcd60e51b815260206004820152604d60248201527f4d6f76696e672066756e64732074696d656f7574206e6f74696669657220726560448201527f77617264206d756c7469706c696572206d75737420626520696e20746865207260648201527f616e6765205b302c203130305d00000000000000000000000000000000000000608482015260a401610ea3565b60008167ffffffffffffffff1611611f435760405162461bcd60e51b815260206004820152603560248201527f4d6f76696e672066756e64732064757374207468726573686f6c64206d75737460448201527f2062652067726561746572207468616e207a65726f00000000000000000000006064820152608401610ea3565b6008860180546bffffffffffffffffffffffff8516600160601b81027fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff63ffffffff8916600160401b81026bffffffffffffffffffffffff1990951667ffffffffffffffff8c811691821796909617929092169290921790945560098a01869055600a8a01805493861667ffffffffffffffff19909416841790556040805194855260208501919091528301526060820184905260808201527f3cb08bd9577c9b1e22ab543ef64f01f08ce3e6dea2cd14aeb408747fcae43b7d9060a00160405180910390a1505050505050565b8567ffffffffffffffff168567ffffffffffffffff16116120e05760405162461bcd60e51b815260206004820152605960248201527f57616c6c6574206372656174696f6e206d6178696d756d204254432062616c6160448201527f6e6365206d7573742062652067726561746572207468616e207468652063726560648201527f6174696f6e206d696e696d756d204254432062616c616e636500000000000000608482015260a401610ea3565b60008467ffffffffffffffff16116121605760405162461bcd60e51b815260206004820152603c60248201527f57616c6c657420636c6f73757265206d696e696d756d204254432062616c616e60448201527f6365206d7573742062652067726561746572207468616e207a65726f000000006064820152608401610ea3565b60008267ffffffffffffffff16116121e05760405162461bcd60e51b815260206004820152603560248201527f57616c6c6574206d6178696d756d20425443207472616e73666572206d75737460448201527f2062652067726561746572207468616e207a65726f00000000000000000000006064820152608401610ea3565b60008163ffffffff161161225c5760405162461bcd60e51b815260206004820152602f60248201527f57616c6c657420636c6f73696e6720706572696f64206d75737420626520677260448201527f6561746572207468616e207a65726f00000000000000000000000000000000006064820152608401610ea3565b868860160160006101000a81548163ffffffff021916908363ffffffff160217905550858860160160046101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508488601601600c6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550838860160160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508288601601601c6101000a81548163ffffffff021916908363ffffffff160217905550818860170160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550808860180160006101000a81548163ffffffff021916908363ffffffff1602179055507fc7d3a9af08692aeae771c329fddd95c7237a9f76fec996325f3959eeff07d4ac878787878787876040516123ef979695949392919063ffffffff978816815267ffffffffffffffff968716602082015294861660408601529285166060850152908516608084015290921660a0820152911660c082015260e00190565b60405180910390a15050505050505050565b60008667ffffffffffffffff16116124815760405162461bcd60e51b815260206004820152603360248201527f526564656d7074696f6e2064757374207468726573686f6c64206d757374206260448201527f652067726561746572207468616e207a65726f000000000000000000000000006064820152608401610ea3565b60008567ffffffffffffffff16116125015760405162461bcd60e51b815260206004820152603960248201527f526564656d7074696f6e207472656173757279206665652064697669736f722060448201527f6d7573742062652067726561746572207468616e207a65726f000000000000006064820152608401610ea3565b60008467ffffffffffffffff16116125815760405162461bcd60e51b815260206004820152603860248201527f526564656d7074696f6e207472616e73616374696f6e206d617820666565206d60448201527f7573742062652067726561746572207468616e207a65726f00000000000000006064820152608401610ea3565b600083116125f75760405162461bcd60e51b815260206004820152602c60248201527f526564656d7074696f6e2074696d656f7574206d75737420626520677265617460448201527f6572207468616e207a65726f00000000000000000000000000000000000000006064820152608401610ea3565b60648111156126945760405162461bcd60e51b815260206004820152604b60248201527f526564656d7074696f6e2074696d656f7574206e6f746966696572207265776160448201527f7264206d756c7469706c696572206d75737420626520696e207468652072616e60648201527f6765205b302c203130305d000000000000000000000000000000000000000000608482015260a401610ea3565b600a870180547fffffffffffffffff00000000000000000000000000000000ffffffffffffffff16600160401b67ffffffffffffffff8981169182027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1692909217600160801b8984169081029190911777ffffffffffffffffffffffffffffffffffffffffffffffff16600160c01b93891693840217909355600b8a01869055600c8a0180546bffffffffffffffffffffffff19166bffffffffffffffffffffffff8716908117909155600d8b018590556040805192835260208301949094529281019190915260608101859052608081019190915260a081018290527f944cd06e316cc3da4159300dd41ab23416c89a5136c41fa79d57fe8a34bcc10f9060c00160405180910390a150505050505050565b6bffffffffffffffffffffffff1981166000908152601983016020526040902060036002820154600160a01b900460ff16600581111561280a5761280a613316565b1461287d5760405162461bcd60e51b815260206004820152602560248201527f45434453412077616c6c6574206d75737420626520696e20436c6f73696e672060448201527f73746174650000000000000000000000000000000000000000000000000000006064820152608401610ea3565b601883015460028201546128a19163ffffffff90811691600160801b900416613a2b565b63ffffffff16421161291b5760405162461bcd60e51b815260206004820152602260248201527f436c6f73696e6720706572696f6420686173206e6f7420656c6170736564207960448201527f65740000000000000000000000000000000000000000000000000000000000006064820152608401610ea3565b610f27838361299e565b600080546001600160a01b038381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b6bffffffffffffffffffffffff19811660008181526019840160205260408082206002810180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674040000000000000000000000000000000000000000179055805491519093927f47b159947c3066cb253f60e8f046cfd747411788a545cb189679e3fa1467b28d91a3600283015481546040517f343bb9270000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163343bb92791612a799160040190815260200190565b600060405180830381600087803b158015612a9357600080fd5b505af1158015611142573d6000803e3d6000fd5b600060208284031215612ab957600080fd5b5035919050565b80356bffffffffffffffffffffffff1981168114612add57600080fd5b919050565b600060608284031215612af457600080fd5b50919050565b60008060808385031215612b0d57600080fd5b612b1683612ac0565b9150612b258460208501612ae2565b90509250929050565b80356bffffffffffffffffffffffff81168114612add57600080fd5b60008060008060808587031215612b6057600080fd5b612b6985612b2e565b966020860135965060408601359560600135945092505050565b803567ffffffffffffffff81168114612add57600080fd5b600080600060608486031215612bb057600080fd5b612bb984612b83565b9250612bc760208501612b83565b9150612bd560408501612b83565b90509250925092565b803563ffffffff81168114612add57600080fd5b600080600080600060a08688031215612c0a57600080fd5b612c1386612b83565b9450612c2160208701612bde565b9350612c2f60408701612b2e565b925060608601359150612c4460808701612b83565b90509295509295909350565b600060808284031215612af457600080fd5b60008060008060c08587031215612c7857600080fd5b843567ffffffffffffffff80821115612c9057600080fd5b612c9c88838901612c50565b95506020870135915080821115612cb257600080fd5b50612cbf87828801612ae2565b935050612ccf8660408701612ae2565b9150612cdd60a08601612ac0565b905092959194509250565b60008083601f840112612cfa57600080fd5b50813567ffffffffffffffff811115612d1257600080fd5b6020830191508360208260051b8501011115612d2d57600080fd5b9250929050565b60008083601f840112612d4657600080fd5b50813567ffffffffffffffff811115612d5e57600080fd5b602083019150836020828501011115612d2d57600080fd5b600080600080600060608688031215612d8e57600080fd5b612d9786612ac0565b9450602086013567ffffffffffffffff80821115612db457600080fd5b612dc089838a01612ce8565b90965094506040880135915080821115612dd957600080fd5b50612de688828901612d34565b969995985093965092949392505050565b600080600060608486031215612e0c57600080fd5b505081359360208301359350604090920135919050565b600080600080600060608688031215612e3b57600080fd5b853567ffffffffffffffff80821115612e5357600080fd5b612e5f89838a01612d34565b90975095506020880135915080821115612e7857600080fd5b50612e8588828901612ce8565b96999598509660400135949350505050565b600080600060a08486031215612eac57600080fd5b833567ffffffffffffffff80821115612ec457600080fd5b612ed087838801612c50565b94506020860135915080821115612ee657600080fd5b50612ef386828701612ae2565b925050612bd58560408601612ae2565b600080828403610100811215612f1857600080fd5b833567ffffffffffffffff811115612f2f57600080fd5b612f3b86828701612c50565b93505060e0601f1982011215612f5057600080fd5b506020830190509250929050565b80356001600160a01b0381168114612add57600080fd5b80358015158114612add57600080fd5b60008060408385031215612f9857600080fd5b612fa183612f5e565b9150612b2560208401612f75565b60008060008060a08587031215612fc557600080fd5b843567ffffffffffffffff811115612fdc57600080fd5b612fe887828801612d34565b90955093505060208501359150612cdd8660408701612ae2565b60008060008060006060868803121561301a57600080fd5b853567ffffffffffffffff8082111561303257600080fd5b61303e89838a01612d34565b9097509550602088013591508082111561305757600080fd5b5061306488828901612d34565b9094509250612c44905060408701612f75565b600080600080600080600060e0888a03121561309257600080fd5b61309b88612bde565b96506130a960208901612b83565b95506130b760408901612b83565b94506130c560608901612b83565b93506130d360808901612bde565b92506130e160a08901612b83565b91506130ef60c08901612bde565b905092959891949750929550565b60008060006040848603121561311257600080fd5b61311b84612ac0565b9250602084013567ffffffffffffffff81111561313757600080fd5b61314386828701612ce8565b9497909650939450505050565b60006060828403121561316257600080fd5b61316c8383612ae2565b9392505050565b600080600080600080600060e0888a03121561318e57600080fd5b61319788612ac0565b96506131a68960208a01612ae2565b9550608088013567ffffffffffffffff808211156131c357600080fd5b6131cf8b838c01612ce8565b909750955060a08a0135945060c08a01359150808211156131ef57600080fd5b506131fc8a828b01612ce8565b989b979a50959850939692959293505050565b60008060008060008060c0878903121561322857600080fd5b61323187612b83565b955061323f60208801612b83565b945061324d60408801612b83565b93506060870135925061326260808801612b2e565b915060a087013590509295509295509295565b60006020828403121561328757600080fd5b61316c82612ac0565b6000602082840312156132a257600080fd5b61316c82612f5e565b600080600080600060c086880312156132c357600080fd5b6132cc86612ac0565b94506132db8760208801612ae2565b9350608086013567ffffffffffffffff8111156132f757600080fd5b61330388828901612d34565b9094509250612c44905060a08701612b83565b634e487b7160e01b600052602160045260246000fd5b600061010082019050825182526020830151602083015267ffffffffffffffff6040840151166040830152606083015163ffffffff80821660608501528060808601511660808501528060a08601511660a0850152505060c0830151600681106133a657634e487b7160e01b600052602160045260246000fd5b8060c08401525060e083015160e083015292915050565b8035825263ffffffff6133d260208301612bde565b16602083015267ffffffffffffffff6133ed60408301612b83565b1660408301525050565b8381526bffffffffffffffffffffffff198316602082015260a0810161342060408301846133bd565b949350505050565b80357fffffffff0000000000000000000000000000000000000000000000000000000081168114612add57600080fd5b6000808335601e1984360301811261346f57600080fd5b830160208101925035905067ffffffffffffffff81111561348f57600080fd5b803603831315612d2d57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60007fffffffff00000000000000000000000000000000000000000000000000000000806134f484613428565b1684526135046020840184613458565b6080602087015261351960808701828461349e565b9150506135296040850185613458565b868303604088015261353c83828461349e565b925050508161354d60608601613428565b166060860152809250505092915050565b600061356a8283613458565b6060855261357c60608601828461349e565b915050602083013560208501526135966040840184613458565b85830360408701526135a983828461349e565b9695505050505050565b85815260e0602082015260006135cc60e08301876134c7565b82810360408401526135de818761355e565b9150506135ee60608301856133bd565b6bffffffffffffffffffffffff19831660c08301529695505050505050565b8183526000602080850194508260005b858110156136465763ffffffff61363383612bde565b168752958201959082019060010161361d565b509495945050505050565b8681526bffffffffffffffffffffffff198616602082015260806040820152600061368060808301868861360d565b828103606084015261369381858761349e565b9998505050505050505050565b8681526080602082015260006136ba60808301878961349e565b82810360408401526136cd81868861360d565b915050826060830152979650505050505050565b84815260c0602082015260006136fa60c08301866134c7565b828103604084015261370c818661355e565b91505061371c60608301846133bd565b95945050505050565b600061012085835280602084015261373f818401866134c7565b91505063ffffffff61375084612bde565b1660408301526001600160a01b0361376a60208501612f5e565b16606083015260408301357fffffffffffffffff000000000000000000000000000000000000000000000000811681146137a357600080fd5b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301526137d660608401612ac0565b6bffffffffffffffffffffffff191660a08301526137f660808401612ac0565b6bffffffffffffffffffffffff191660c083015261381660a08401613428565b7fffffffff000000000000000000000000000000000000000000000000000000001660e083015261384960c08401612f5e565b6001600160a01b03811661010084015250949350505050565b85815260c06020820152600061387c60c08301868861349e565b90508360408301528235606083015260208301356080830152604083013560ff81168082146138aa57600080fd5b8060a085015250509695505050505050565b8681526080602082015260006138d660808301878961349e565b82810360408401526138e981868861349e565b9150508215156060830152979650505050505050565b8481526bffffffffffffffffffffffff19841660208201526060604082015260006135a960608301848661360d565b8281526080810161316c60208301846133bd565b60006101008a835260206bffffffffffffffffffffffff19808c168286015261396e604086018c6133bd565b8260a08601526139818386018a8c61360d565b60c0860189905285810360e0870152868152879350820160005b878110156139c057826139ad86612ac0565b168252938301939083019060010161399b565b509d9c50505050505050505050505050565b8681526bffffffffffffffffffffffff19861660208201526139f760408201866133bd565b60e060a08201526000613a0e60e08301858761349e565b905067ffffffffffffffff831660c0830152979650505050505050565b600063ffffffff808316818516808303821115613a5857634e487b7160e01b600052601160045260246000fd5b0194935050505056fea26469706673582212208e978c5077b67ded98e8bc3babeea2eff9d0b3da198340404a84b20bb1c8bc8c64736f6c63430008090033",
2106
- "deployedBytecode": "0x6080604052600436106102d15760003560e01c80636e70ce4111610179578063b2146cd6116100d6578063c8b5d2db1161008a578063ded1d24a11610064578063ded1d24a14610d2d578063e53c0b5514610d5e578063e65e19d514610d9757600080fd5b8063c8b5d2db14610ccd578063d38bfff414610ced578063d6eccdf014610d0d57600080fd5b8063b34b3216116100bb578063b34b321614610bf1578063be05abe314610c11578063c42b64d014610c8157600080fd5b8063b2146cd614610b91578063b216bd3514610bd157600080fd5b8063a145e2d51161012d578063a9de2f3a11610112578063a9de2f3a146109ec578063abaeed8f14610a2c578063b02c43d014610a4c57600080fd5b8063a145e2d5146109ac578063a8fa0f42146109cc57600080fd5b806377145f211161015e57806377145f211461094c578063883d6a111461096c57806392238f321461098c57600080fd5b80636e70ce411461086057806375b922d11461090457600080fd5b806333e957cb116102325780635aa6e675116101e657806361ccf97a116101c057806361ccf97a146107a757806361d027b31461082f5780636d02b43c1461084d57600080fd5b80635aa6e6751461072f5780635c0b48121461076757806360d712fc1461078757600080fd5b80634fb1b4c6116102175780634fb1b4c6146106cf578063575e4279146106ef57806359a9d90a1461070f57600080fd5b806333e957cb146105d05780633dce9812146106af57600080fd5b806324028c11116102895780632bb818c21161026e5780632bb818c2146105725780632f429b641461059057806331a4889a146105b057600080fd5b806324028c111461052057806329e3e74d1461055257600080fd5b80630b6ba19d116102ba5780630b6ba19d1461042257806310760882146104e057806317c964001461050057600080fd5b806303d952f7146102d657806307f7d22314610400575b600080fd5b3480156102e257600080fd5b506103946102f1366004612aa7565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506000908152600f6020908152604091829020825160a08101845281546001600160a01b0381168252600160a01b900467ffffffffffffffff9081169382019390935260019091015480831693820193909352600160401b83049091166060820152600160801b90910463ffffffff16608082015290565b6040516103f79190600060a0820190506001600160a01b038351168252602083015167ffffffffffffffff8082166020850152806040860151166040850152806060860151166060850152505063ffffffff608084015116608083015292915050565b60405180910390f35b34801561040c57600080fd5b5061042061041b366004612afa565b610dc4565b005b34801561042e57600080fd5b5061039461043d366004612aa7565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915250600090815260106020908152604091829020825160a08101845281546001600160a01b0381168252600160a01b900467ffffffffffffffff9081169382019390935260019091015480831693820193909352600160401b83049091166060820152600160801b90910463ffffffff16608082015290565b3480156104ec57600080fd5b506104206104fb366004612b4a565b610e4d565b34801561050c57600080fd5b5061042061051b366004612b9b565b610ec0565b34801561052c57600080fd5b50601854600160a01b900463ffffffff1660405163ffffffff90911681526020016103f7565b34801561055e57600080fd5b5061042061056d366004612bf2565b610f2c565b34801561057e57600080fd5b506004546040519081526020016103f7565b34801561059c57600080fd5b506104206105ab366004612c62565b610f9c565b3480156105bc57600080fd5b506104206105cb366004612d76565b611029565b3480156105dc57600080fd5b5061066b6105eb366004612aa7565b60408051608081018252600080825260208201819052918101829052606081019190915250600090815260156020908152604091829020825160808101845281546001600160a01b031681526001820154928101929092526002015463ffffffff81169282019290925264010000000090910460ff161515606082015290565b6040516103f7919081516001600160a01b031681526020808301519082015260408083015163ffffffff169082015260609182015115159181019190915260800190565b3480156106bb57600080fd5b506104206106ca366004612df7565b6110bb565b3480156106db57600080fd5b506104206106ea366004612e23565b61114b565b3480156106fb57600080fd5b5061042061070a366004612afa565b6111a6565b34801561071b57600080fd5b5061042061072a366004612e97565b6111fb565b34801561073b57600080fd5b5060005461074f906001600160a01b031681565b6040516001600160a01b0390911681526020016103f7565b34801561077357600080fd5b50610420610782366004612f03565b611252565b34801561079357600080fd5b506104206107a2366004612f85565b6112a7565b3480156107b357600080fd5b506017546018546019546040805163ffffffff808616825267ffffffffffffffff640100000000870481166020840152600160601b8704811693830193909352600160a01b860483166060830152600160e01b90950485166080820152600160c01b9093041660a08301529190911660c082015260e0016103f7565b34801561083b57600080fd5b506005546001600160a01b031661074f565b61042061085b366004612faf565b611360565b34801561086c57600080fd5b506108b7600b54600c54600d54600e5467ffffffffffffffff600160401b8504811695600160801b8604821695600160c01b900490911693926bffffffffffffffffffffffff169190565b6040805167ffffffffffffffff97881681529587166020870152939095169284019290925260608301526bffffffffffffffffffffffff16608082015260a081019190915260c0016103f7565b34801561091057600080fd5b50601154601254601354601454604080516bffffffffffffffffffffffff909516855260208501939093529183015260608201526080016103f7565b34801561095857600080fd5b50610420610967366004613002565b6113b9565b34801561097857600080fd5b50610420610987366004613077565b611414565b34801561099857600080fd5b506104206109a73660046130fd565b61147f565b3480156109b857600080fd5b506104206109c7366004613150565b6114d6565b3480156109d857600080fd5b506104206109e7366004612df7565b611555565b3480156109f857600080fd5b50600154600254600354604080516001600160a01b03948516815292841660208401529216918101919091526060016103f7565b348015610a3857600080fd5b50610420610a47366004613173565b6115bb565b348015610a5857600080fd5b50610b1b610a67366004612aa7565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915250600090815260076020908152604091829020825160c08101845281546001600160a01b03808216835267ffffffffffffffff600160a01b80840482169685019690965263ffffffff600160e01b938490048116978501979097526001949094015490811660608401529384049092166080820152910490911660a082015290565b6040516103f79190600060c0820190506001600160a01b03808451168352602084015167ffffffffffffffff80821660208601526040860151915063ffffffff80831660408701528360608801511660608701528160808801511660808701528060a08801511660a08701525050505092915050565b348015610b9d57600080fd5b50610bc1610bac366004612aa7565b60009081526016602052604090205460ff1690565b60405190151581526020016103f7565b348015610bdd57600080fd5b50610420610bec36600461320f565b611653565b348015610bfd57600080fd5b50610420610c0c366004612c62565b6116bd565b348015610c1d57600080fd5b50600954600a54600b546040805167ffffffffffffffff8086168252600160401b860463ffffffff166020830152600160601b9095046bffffffffffffffffffffffff1691810191909152606081019290925291909116608082015260a0016103f7565b348015610c8d57600080fd5b5060055460065460408051600160a01b90930467ffffffffffffffff90811684528083166020850152600160401b909204909116908201526060016103f7565b348015610cd957600080fd5b50610420610ce8366004613275565b611716565b348015610cf957600080fd5b50610420610d08366004613290565b611724565b348015610d1957600080fd5b50610420610d283660046132ab565b611803565b348015610d3957600080fd5b5060185460601b6040516bffffffffffffffffffffffff1990911681526020016103f7565b348015610d6a57600080fd5b50610bc1610d79366004613290565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610da357600080fd5b50610db7610db2366004613275565b61185e565b6040516103f7919061332c565b6040517f260b6cde00000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063260b6cde90610e1990600190869086906004016133f7565b60006040518083038186803b158015610e3157600080fd5b505af4158015610e45573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610eac5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064015b60405180910390fd5b610eba600185858585611968565b50505050565b6000546001600160a01b03163314610f1a5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610ea3565b610f276001848484611ae2565b505050565b6000546001600160a01b03163314610f865760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610ea3565b610f9560018686868686611d28565b5050505050565b6040517e92bac900000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__906292bac990610ff39060019088908890889088906004016135b3565b60006040518083038186803b15801561100b57600080fd5b505af415801561101f573d6000803e3d6000fd5b5050505050505050565b6040517fa76558b300000000000000000000000000000000000000000000000000000000815273__$9935b6ea18e0c526c293569ddd26842c9b$__9063a76558b3906110849060019089908990899089908990600401613651565b60006040518083038186803b15801561109c57600080fd5b505af41580156110b0573d6000803e3d6000fd5b505050505050505050565b6040517fc87de7f400000000000000000000000000000000000000000000000000000000815260016004820152602481018390526044810182905273__$0f118c52967a3847a37f0a2ef02ffcee04$__9063c87de7f4906064015b60006040518083038186803b15801561112e57600080fd5b505af4158015611142573d6000803e3d6000fd5b50505050505050565b6040517f89b43a8600000000000000000000000000000000000000000000000000000000815273__$a542940934c03bae9a39609192cb25cc3c$__906389b43a869061108490600190899089908990899089906004016136a0565b6040517f99b0b84700000000000000000000000000000000000000000000000000000000815273__$0f118c52967a3847a37f0a2ef02ffcee04$__906399b0b84790610e1990600190869086906004016133f7565b6040517f510fc50a00000000000000000000000000000000000000000000000000000000815273__$61f169726e973bba1227e0c23d2755f88e$__9063510fc50a90611116906001908790879087906004016136e1565b6040517faea7fd0b00000000000000000000000000000000000000000000000000000000815273__$894ce12e79ca3e5683c1b49e363f37fa22$__9063aea7fd0b90610e199060019086908690600401613725565b6000546001600160a01b031633146113015760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610ea3565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f9065599c12c4294d9e2201638226d0d0beb95c228f468c4e7c2bdb8322b6066f910160405180910390a25050565b6040517f3b5d9f2400000000000000000000000000000000000000000000000000000000815273__$a542940934c03bae9a39609192cb25cc3c$__90633b5d9f2490610ff3906001908890889088908890600401613862565b6040517f624526fe00000000000000000000000000000000000000000000000000000000815273__$a542940934c03bae9a39609192cb25cc3c$__9063624526fe9061108490600190899089908990899089906004016138bc565b6000546001600160a01b0316331461146e5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610ea3565b611142600188888888888888612031565b6040517f07f96c4200000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__906307f96c4290611116906001908790879087906004016138ff565b6040517fd079fbb100000000000000000000000000000000000000000000000000000000815273__$0f118c52967a3847a37f0a2ef02ffcee04$__9063d079fbb19061152990600190859060040161392e565b60006040518083038186803b15801561154157600080fd5b505af4158015610f95573d6000803e3d6000fd5b6040517f4afbe4c90000000000000000000000000000000000000000000000000000000081526001600482015260248101849052604481018390526064810182905273__$0f118c52967a3847a37f0a2ef02ffcee04$__90634afbe4c990608401611116565b6040517fc8f7794300000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063c8f779439061161a906001908b908b908b908b908b908b908b90600401613942565b60006040518083038186803b15801561163257600080fd5b505af4158015611646573d6000803e3d6000fd5b5050505050505050505050565b6000546001600160a01b031633146116ad5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610ea3565b610e456001878787878787612401565b6040517fa164de6e00000000000000000000000000000000000000000000000000000000815273__$9935b6ea18e0c526c293569ddd26842c9b$__9063a164de6e90610ff39060019088908890889088906004016135b3565b6117216001826127c8565b50565b6000546001600160a01b0316331461177e5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610ea3565b6001600160a01b0381166117fa5760405162461bcd60e51b815260206004820152602260248201527f4e657720676f7665726e616e636520697320746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610ea3565b61172181612925565b6040517f7333b36900000000000000000000000000000000000000000000000000000000815273__$9935b6ea18e0c526c293569ddd26842c9b$__90637333b3699061108490600190899089908990899089906004016139d2565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101919091526bffffffffffffffffffffffff1982166000908152601a602090815260409182902082516101008101845281548152600182015492810192909252600281015467ffffffffffffffff81169383019390935263ffffffff600160401b840481166060840152600160601b840481166080840152600160801b84041660a0830152909160c083019060ff600160a01b90910416600581111561194257611942613316565b600581111561195357611953613316565b81526020016003820154815250509050919050565b60648311156119df5760405162461bcd60e51b815260206004820152603e60248201527f4672617564206e6f74696669657220726577617264206d756c7469706c69657260448201527f206d75737420626520696e207468652072616e6765205b302c203130305d00006064820152608401610ea3565b60008211611a555760405162461bcd60e51b815260206004820152603860248201527f4672617564206368616c6c656e6765206465666561742074696d656f7574206d60448201527f7573742062652067726561746572207468616e207a65726f00000000000000006064820152608401610ea3565b6010850180546bffffffffffffffffffffffff19166bffffffffffffffffffffffff861690811790915560118601849055601286018390556013860182905560408051918252602082018590528101839052606081018290527f05a00d49ab61707f55232992ae68b57d8ed6e071aa0f9b88f992f19215a5f0869060800160405180910390a15050505050565b60008367ffffffffffffffff1611611b625760405162461bcd60e51b815260206004820152603060248201527f4465706f7369742064757374207468726573686f6c64206d757374206265206760448201527f726561746572207468616e207a65726f000000000000000000000000000000006064820152608401610ea3565b60008267ffffffffffffffff1611611be25760405162461bcd60e51b815260206004820152603660248201527f4465706f736974207472656173757279206665652064697669736f72206d757360448201527f742062652067726561746572207468616e207a65726f000000000000000000006064820152608401610ea3565b60008167ffffffffffffffff1611611c625760405162461bcd60e51b815260206004820152603560248201527f4465706f736974207472616e73616374696f6e206d617820666565206d75737460448201527f2062652067726561746572207468616e207a65726f00000000000000000000006064820152608401610ea3565b6004840180547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff16600160a01b67ffffffffffffffff868116918202929092179092556005860180548583167fffffffffffffffffffffffffffffffff000000000000000000000000000000009091168117600160401b938616938402179091556040805193845260208401919091528201527f1ced468902ca566e746a3c8c9516af81f8de9f1021c365083be9f2625ebfb7b59060600160405180910390a150505050565b60008567ffffffffffffffff1611611daa576040805162461bcd60e51b81526020600482015260248101919091527f4d6f76696e672066756e6473207472616e73616374696f6e206d617820746f7460448201527f616c20666565206d7573742062652067726561746572207468616e207a65726f6064820152608401610ea3565b60008463ffffffff1611611e265760405162461bcd60e51b815260206004820152602e60248201527f4d6f76696e672066756e64732074696d656f7574206d7573742062652067726560448201527f61746572207468616e207a65726f0000000000000000000000000000000000006064820152608401610ea3565b6064821115611ec35760405162461bcd60e51b815260206004820152604d60248201527f4d6f76696e672066756e64732074696d656f7574206e6f74696669657220726560448201527f77617264206d756c7469706c696572206d75737420626520696e20746865207260648201527f616e6765205b302c203130305d00000000000000000000000000000000000000608482015260a401610ea3565b60008167ffffffffffffffff1611611f435760405162461bcd60e51b815260206004820152603560248201527f4d6f76696e672066756e64732064757374207468726573686f6c64206d75737460448201527f2062652067726561746572207468616e207a65726f00000000000000000000006064820152608401610ea3565b6008860180546bffffffffffffffffffffffff8516600160601b81027fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff63ffffffff8916600160401b81026bffffffffffffffffffffffff1990951667ffffffffffffffff8c811691821796909617929092169290921790945560098a01869055600a8a01805493861667ffffffffffffffff19909416841790556040805194855260208501919091528301526060820184905260808201527f3cb08bd9577c9b1e22ab543ef64f01f08ce3e6dea2cd14aeb408747fcae43b7d9060a00160405180910390a1505050505050565b8567ffffffffffffffff168567ffffffffffffffff16116120e05760405162461bcd60e51b815260206004820152605960248201527f57616c6c6574206372656174696f6e206d6178696d756d204254432062616c6160448201527f6e6365206d7573742062652067726561746572207468616e207468652063726560648201527f6174696f6e206d696e696d756d204254432062616c616e636500000000000000608482015260a401610ea3565b60008467ffffffffffffffff16116121605760405162461bcd60e51b815260206004820152603c60248201527f57616c6c657420636c6f73757265206d696e696d756d204254432062616c616e60448201527f6365206d7573742062652067726561746572207468616e207a65726f000000006064820152608401610ea3565b60008267ffffffffffffffff16116121e05760405162461bcd60e51b815260206004820152603560248201527f57616c6c6574206d6178696d756d20425443207472616e73666572206d75737460448201527f2062652067726561746572207468616e207a65726f00000000000000000000006064820152608401610ea3565b60008163ffffffff161161225c5760405162461bcd60e51b815260206004820152602f60248201527f57616c6c657420636c6f73696e6720706572696f64206d75737420626520677260448201527f6561746572207468616e207a65726f00000000000000000000000000000000006064820152608401610ea3565b868860160160006101000a81548163ffffffff021916908363ffffffff160217905550858860160160046101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508488601601600c6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550838860160160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508288601601601c6101000a81548163ffffffff021916908363ffffffff160217905550818860170160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550808860180160006101000a81548163ffffffff021916908363ffffffff1602179055507fc7d3a9af08692aeae771c329fddd95c7237a9f76fec996325f3959eeff07d4ac878787878787876040516123ef979695949392919063ffffffff978816815267ffffffffffffffff968716602082015294861660408601529285166060850152908516608084015290921660a0820152911660c082015260e00190565b60405180910390a15050505050505050565b60008667ffffffffffffffff16116124815760405162461bcd60e51b815260206004820152603360248201527f526564656d7074696f6e2064757374207468726573686f6c64206d757374206260448201527f652067726561746572207468616e207a65726f000000000000000000000000006064820152608401610ea3565b60008567ffffffffffffffff16116125015760405162461bcd60e51b815260206004820152603960248201527f526564656d7074696f6e207472656173757279206665652064697669736f722060448201527f6d7573742062652067726561746572207468616e207a65726f000000000000006064820152608401610ea3565b60008467ffffffffffffffff16116125815760405162461bcd60e51b815260206004820152603860248201527f526564656d7074696f6e207472616e73616374696f6e206d617820666565206d60448201527f7573742062652067726561746572207468616e207a65726f00000000000000006064820152608401610ea3565b600083116125f75760405162461bcd60e51b815260206004820152602c60248201527f526564656d7074696f6e2074696d656f7574206d75737420626520677265617460448201527f6572207468616e207a65726f00000000000000000000000000000000000000006064820152608401610ea3565b60648111156126945760405162461bcd60e51b815260206004820152604b60248201527f526564656d7074696f6e2074696d656f7574206e6f746966696572207265776160448201527f7264206d756c7469706c696572206d75737420626520696e207468652072616e60648201527f6765205b302c203130305d000000000000000000000000000000000000000000608482015260a401610ea3565b600a870180547fffffffffffffffff00000000000000000000000000000000ffffffffffffffff16600160401b67ffffffffffffffff8981169182027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1692909217600160801b8984169081029190911777ffffffffffffffffffffffffffffffffffffffffffffffff16600160c01b93891693840217909355600b8a01869055600c8a0180546bffffffffffffffffffffffff19166bffffffffffffffffffffffff8716908117909155600d8b018590556040805192835260208301949094529281019190915260608101859052608081019190915260a081018290527f944cd06e316cc3da4159300dd41ab23416c89a5136c41fa79d57fe8a34bcc10f9060c00160405180910390a150505050505050565b6bffffffffffffffffffffffff1981166000908152601983016020526040902060036002820154600160a01b900460ff16600581111561280a5761280a613316565b1461287d5760405162461bcd60e51b815260206004820152602560248201527f45434453412077616c6c6574206d75737420626520696e20436c6f73696e672060448201527f73746174650000000000000000000000000000000000000000000000000000006064820152608401610ea3565b601883015460028201546128a19163ffffffff90811691600160801b900416613a2b565b63ffffffff16421161291b5760405162461bcd60e51b815260206004820152602260248201527f436c6f73696e6720706572696f6420686173206e6f7420656c6170736564207960448201527f65740000000000000000000000000000000000000000000000000000000000006064820152608401610ea3565b610f27838361299e565b600080546001600160a01b038381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b6bffffffffffffffffffffffff19811660008181526019840160205260408082206002810180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674040000000000000000000000000000000000000000179055805491519093927f47b159947c3066cb253f60e8f046cfd747411788a545cb189679e3fa1467b28d91a3600283015481546040517f343bb9270000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163343bb92791612a799160040190815260200190565b600060405180830381600087803b158015612a9357600080fd5b505af1158015611142573d6000803e3d6000fd5b600060208284031215612ab957600080fd5b5035919050565b80356bffffffffffffffffffffffff1981168114612add57600080fd5b919050565b600060608284031215612af457600080fd5b50919050565b60008060808385031215612b0d57600080fd5b612b1683612ac0565b9150612b258460208501612ae2565b90509250929050565b80356bffffffffffffffffffffffff81168114612add57600080fd5b60008060008060808587031215612b6057600080fd5b612b6985612b2e565b966020860135965060408601359560600135945092505050565b803567ffffffffffffffff81168114612add57600080fd5b600080600060608486031215612bb057600080fd5b612bb984612b83565b9250612bc760208501612b83565b9150612bd560408501612b83565b90509250925092565b803563ffffffff81168114612add57600080fd5b600080600080600060a08688031215612c0a57600080fd5b612c1386612b83565b9450612c2160208701612bde565b9350612c2f60408701612b2e565b925060608601359150612c4460808701612b83565b90509295509295909350565b600060808284031215612af457600080fd5b60008060008060c08587031215612c7857600080fd5b843567ffffffffffffffff80821115612c9057600080fd5b612c9c88838901612c50565b95506020870135915080821115612cb257600080fd5b50612cbf87828801612ae2565b935050612ccf8660408701612ae2565b9150612cdd60a08601612ac0565b905092959194509250565b60008083601f840112612cfa57600080fd5b50813567ffffffffffffffff811115612d1257600080fd5b6020830191508360208260051b8501011115612d2d57600080fd5b9250929050565b60008083601f840112612d4657600080fd5b50813567ffffffffffffffff811115612d5e57600080fd5b602083019150836020828501011115612d2d57600080fd5b600080600080600060608688031215612d8e57600080fd5b612d9786612ac0565b9450602086013567ffffffffffffffff80821115612db457600080fd5b612dc089838a01612ce8565b90965094506040880135915080821115612dd957600080fd5b50612de688828901612d34565b969995985093965092949392505050565b600080600060608486031215612e0c57600080fd5b505081359360208301359350604090920135919050565b600080600080600060608688031215612e3b57600080fd5b853567ffffffffffffffff80821115612e5357600080fd5b612e5f89838a01612d34565b90975095506020880135915080821115612e7857600080fd5b50612e8588828901612ce8565b96999598509660400135949350505050565b600080600060a08486031215612eac57600080fd5b833567ffffffffffffffff80821115612ec457600080fd5b612ed087838801612c50565b94506020860135915080821115612ee657600080fd5b50612ef386828701612ae2565b925050612bd58560408601612ae2565b600080828403610100811215612f1857600080fd5b833567ffffffffffffffff811115612f2f57600080fd5b612f3b86828701612c50565b93505060e0601f1982011215612f5057600080fd5b506020830190509250929050565b80356001600160a01b0381168114612add57600080fd5b80358015158114612add57600080fd5b60008060408385031215612f9857600080fd5b612fa183612f5e565b9150612b2560208401612f75565b60008060008060a08587031215612fc557600080fd5b843567ffffffffffffffff811115612fdc57600080fd5b612fe887828801612d34565b90955093505060208501359150612cdd8660408701612ae2565b60008060008060006060868803121561301a57600080fd5b853567ffffffffffffffff8082111561303257600080fd5b61303e89838a01612d34565b9097509550602088013591508082111561305757600080fd5b5061306488828901612d34565b9094509250612c44905060408701612f75565b600080600080600080600060e0888a03121561309257600080fd5b61309b88612bde565b96506130a960208901612b83565b95506130b760408901612b83565b94506130c560608901612b83565b93506130d360808901612bde565b92506130e160a08901612b83565b91506130ef60c08901612bde565b905092959891949750929550565b60008060006040848603121561311257600080fd5b61311b84612ac0565b9250602084013567ffffffffffffffff81111561313757600080fd5b61314386828701612ce8565b9497909650939450505050565b60006060828403121561316257600080fd5b61316c8383612ae2565b9392505050565b600080600080600080600060e0888a03121561318e57600080fd5b61319788612ac0565b96506131a68960208a01612ae2565b9550608088013567ffffffffffffffff808211156131c357600080fd5b6131cf8b838c01612ce8565b909750955060a08a0135945060c08a01359150808211156131ef57600080fd5b506131fc8a828b01612ce8565b989b979a50959850939692959293505050565b60008060008060008060c0878903121561322857600080fd5b61323187612b83565b955061323f60208801612b83565b945061324d60408801612b83565b93506060870135925061326260808801612b2e565b915060a087013590509295509295509295565b60006020828403121561328757600080fd5b61316c82612ac0565b6000602082840312156132a257600080fd5b61316c82612f5e565b600080600080600060c086880312156132c357600080fd5b6132cc86612ac0565b94506132db8760208801612ae2565b9350608086013567ffffffffffffffff8111156132f757600080fd5b61330388828901612d34565b9094509250612c44905060a08701612b83565b634e487b7160e01b600052602160045260246000fd5b600061010082019050825182526020830151602083015267ffffffffffffffff6040840151166040830152606083015163ffffffff80821660608501528060808601511660808501528060a08601511660a0850152505060c0830151600681106133a657634e487b7160e01b600052602160045260246000fd5b8060c08401525060e083015160e083015292915050565b8035825263ffffffff6133d260208301612bde565b16602083015267ffffffffffffffff6133ed60408301612b83565b1660408301525050565b8381526bffffffffffffffffffffffff198316602082015260a0810161342060408301846133bd565b949350505050565b80357fffffffff0000000000000000000000000000000000000000000000000000000081168114612add57600080fd5b6000808335601e1984360301811261346f57600080fd5b830160208101925035905067ffffffffffffffff81111561348f57600080fd5b803603831315612d2d57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60007fffffffff00000000000000000000000000000000000000000000000000000000806134f484613428565b1684526135046020840184613458565b6080602087015261351960808701828461349e565b9150506135296040850185613458565b868303604088015261353c83828461349e565b925050508161354d60608601613428565b166060860152809250505092915050565b600061356a8283613458565b6060855261357c60608601828461349e565b915050602083013560208501526135966040840184613458565b85830360408701526135a983828461349e565b9695505050505050565b85815260e0602082015260006135cc60e08301876134c7565b82810360408401526135de818761355e565b9150506135ee60608301856133bd565b6bffffffffffffffffffffffff19831660c08301529695505050505050565b8183526000602080850194508260005b858110156136465763ffffffff61363383612bde565b168752958201959082019060010161361d565b509495945050505050565b8681526bffffffffffffffffffffffff198616602082015260806040820152600061368060808301868861360d565b828103606084015261369381858761349e565b9998505050505050505050565b8681526080602082015260006136ba60808301878961349e565b82810360408401526136cd81868861360d565b915050826060830152979650505050505050565b84815260c0602082015260006136fa60c08301866134c7565b828103604084015261370c818661355e565b91505061371c60608301846133bd565b95945050505050565b600061012085835280602084015261373f818401866134c7565b91505063ffffffff61375084612bde565b1660408301526001600160a01b0361376a60208501612f5e565b16606083015260408301357fffffffffffffffff000000000000000000000000000000000000000000000000811681146137a357600080fd5b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301526137d660608401612ac0565b6bffffffffffffffffffffffff191660a08301526137f660808401612ac0565b6bffffffffffffffffffffffff191660c083015261381660a08401613428565b7fffffffff000000000000000000000000000000000000000000000000000000001660e083015261384960c08401612f5e565b6001600160a01b03811661010084015250949350505050565b85815260c06020820152600061387c60c08301868861349e565b90508360408301528235606083015260208301356080830152604083013560ff81168082146138aa57600080fd5b8060a085015250509695505050505050565b8681526080602082015260006138d660808301878961349e565b82810360408401526138e981868861349e565b9150508215156060830152979650505050505050565b8481526bffffffffffffffffffffffff19841660208201526060604082015260006135a960608301848661360d565b8281526080810161316c60208301846133bd565b60006101008a835260206bffffffffffffffffffffffff19808c168286015261396e604086018c6133bd565b8260a08601526139818386018a8c61360d565b60c0860189905285810360e0870152868152879350820160005b878110156139c057826139ad86612ac0565b168252938301939083019060010161399b565b509d9c50505050505050505050505050565b8681526bffffffffffffffffffffffff19861660208201526139f760408201866133bd565b60e060a08201526000613a0e60e08301858761349e565b905067ffffffffffffffff831660c0830152979650505050505050565b600063ffffffff808316818516808303821115613a5857634e487b7160e01b600052601160045260246000fd5b0194935050505056fea26469706673582212208e978c5077b67ded98e8bc3babeea2eff9d0b3da198340404a84b20bb1c8bc8c64736f6c63430008090033",
2265
+ "bytecode": "0x60806040523480156200001157600080fd5b506040516200411f3803806200411f8339810160408190526200003491620003cd565b6001600160a01b038516620000905760405162461bcd60e51b815260206004820152601b60248201527f42616e6b20616464726573732063616e6e6f74206265207a65726f000000000060448201526064015b60405180910390fd5b600180546001600160a01b0319166001600160a01b03878116919091179091558416620001005760405162461bcd60e51b815260206004820152601c60248201527f52656c617920616464726573732063616e6e6f74206265207a65726f00000000604482015260640162000087565b600280546001600160a01b0319166001600160a01b03868116919091179091558216620001855760405162461bcd60e51b815260206004820152602c60248201527f45434453412057616c6c6574205265676973747279206164647265737320636160448201526b6e6e6f74206265207a65726f60a01b606482015260840162000087565b600380546001600160a01b0319166001600160a01b03848116919091179091558316620001f55760405162461bcd60e51b815260206004820152601f60248201527f547265617375727920616464726573732063616e6e6f74206265207a65726f00604482015260640162000087565b6005805460048390556001600160a01b0385166001600160e01b031990911617613d0960a61b179055600680546001600160801b03191669271000000000000007d0179055600d80546001600160c01b03191671271000000000000007d000000000000f42401790556202a300600e55600f805469021e19e0c9bab24000006001600160601b03199182168117909255606460108190557d021e19e0c9bab240000000093a800000000000004e200000000000002710600955600a819055600b80546127106001600160401b0319909116179055671bc16d674ec8000060135562093a806014556015805490921690921790556016557eeff1000000000002faf08000000002540be4000000000005f5e10000093a80601955601a80546001600160c01b0316621dcd6560c91b179055601b80546234bc0063ffffffff1990911617905562000344336200034f565b505050505062000434565b600080546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b80516001600160a01b0381168114620003c857600080fd5b919050565b600080600080600060a08688031215620003e657600080fd5b620003f186620003b0565b94506200040160208701620003b0565b93506200041160408701620003b0565b92506200042160608701620003b0565b9150608086015190509295509295909350565b613cdb80620004446000396000f3fe6080604052600436106102e75760003560e01c8063883d6a1111610184578063b34b3216116100d6578063d38bfff41161008a578063e53c0b5511610064578063e53c0b5514610da1578063e65e19d514610dda578063f18cf1b114610e0757600080fd5b8063d38bfff414610d35578063d6eccdf014610d55578063ded1d24a14610d7557600080fd5b8063be05abe3116100bb578063be05abe314610c4e578063c42b64d014610cc9578063c8b5d2db14610d1557600080fd5b8063b34b321614610c0e578063b7d372a414610c2e57600080fd5b8063a9de2f3a11610138578063b2146cd611610112578063b2146cd614610b8e578063b216bd3514610bce578063b29a604b14610bee57600080fd5b8063a9de2f3a146109e9578063abaeed8f14610a29578063b02c43d014610a4957600080fd5b806392238f321161016957806392238f3214610989578063a145e2d5146109a9578063a8fa0f42146109c957600080fd5b8063883d6a111461094957806391a9fdde1461096957600080fd5b806350bf60201161023d57806361ccf97a116101f15780636e70ce41116101cb5780636e70ce411461083f57806375b922d1146108dd57806377145f211461092957600080fd5b806361ccf97a1461077d57806361d027b31461080e5780636d02b43c1461082c57600080fd5b80635aa6e675116102225780635aa6e675146107055780635c0b48121461073d57806360d712fc1461075d57600080fd5b806350bf6020146106c5578063575e4279146106e557600080fd5b80632bb818c21161029f57806333e957cb1161027957806333e957cb146105a65780633dce9812146106855780634fb1b4c6146106a557600080fd5b80632bb818c2146105485780632f429b641461056657806331a4889a1461058657600080fd5b80630b6ba19d116102d05780630b6ba19d1461043857806317c96400146104f657806324028c111461051657600080fd5b806303d952f7146102ec57806307f7d22314610416575b600080fd5b3480156102f857600080fd5b506103aa610307366004612caf565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915250600090815260116020908152604091829020825160a08101845281546001600160a01b0381168252600160a01b900467ffffffffffffffff9081169382019390935260019091015480831693820193909352600160401b83049091166060820152600160801b90910463ffffffff16608082015290565b60405161040d9190600060a0820190506001600160a01b038351168252602083015167ffffffffffffffff8082166020850152806040860151166040850152806060860151166060850152505063ffffffff608084015116608083015292915050565b60405180910390f35b34801561042257600080fd5b50610436610431366004612cfd565b610efa565b005b34801561044457600080fd5b506103aa610453366004612caf565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915250600090815260126020908152604091829020825160a08101845281546001600160a01b0381168252600160a01b900467ffffffffffffffff9081169382019390935260019091015480831693820193909352600160401b83049091166060820152600160801b90910463ffffffff16608082015290565b34801561050257600080fd5b50610436610511366004612d49565b610f83565b34801561052257600080fd5b50601a54600160a01b900463ffffffff1660405163ffffffff909116815260200161040d565b34801561055457600080fd5b5060045460405190815260200161040d565b34801561057257600080fd5b50610436610581366004612d9e565b610ff4565b34801561059257600080fd5b506104366105a1366004612eb2565b611081565b3480156105b257600080fd5b506106416105c1366004612caf565b60408051608081018252600080825260208201819052918101829052606081019190915250600090815260176020908152604091829020825160808101845281546001600160a01b031681526001820154928101929092526002015463ffffffff81169282019290925264010000000090910460ff161515606082015290565b60405161040d919081516001600160a01b031681526020808301519082015260408083015163ffffffff169082015260609182015115159181019190915260800190565b34801561069157600080fd5b506104366106a0366004612f33565b611113565b3480156106b157600080fd5b506104366106c0366004612f5f565b6111a3565b3480156106d157600080fd5b506104366106e0366004613003565b6111fe565b3480156106f157600080fd5b50610436610700366004612cfd565b611268565b34801561071157600080fd5b50600054610725906001600160a01b031681565b6040516001600160a01b03909116815260200161040d565b34801561074957600080fd5b50610436610758366004613070565b6112bd565b34801561076957600080fd5b506104366107783660046130f2565b611312565b34801561078957600080fd5b50601954601a54601b546040805163ffffffff808616825267ffffffffffffffff6401000000008704811660208401526c010000000000000000000000008704811693830193909352600160a01b860483166060830152600160e01b90950485166080820152600160c01b9093041660a08301529190911660c082015260e00161040d565b34801561081a57600080fd5b506005546001600160a01b0316610725565b61043661083a36600461311c565b6113cb565b34801561084b57600080fd5b50610890600d54600e54600f5460105467ffffffffffffffff80851695600160401b8604821695600160801b900490911693926bffffffffffffffffffffffff169190565b6040805167ffffffffffffffff97881681529587166020870152939095169284019290925260608301526bffffffffffffffffffffffff16608082015260a081019190915260c00161040d565b3480156108e957600080fd5b506013546014546015546016546040805194855260208501939093526bffffffffffffffffffffffff90911691830191909152606082015260800161040d565b34801561093557600080fd5b5061043661094436600461316f565b611424565b34801561095557600080fd5b506104366109643660046131f0565b61147f565b34801561097557600080fd5b50610436610984366004613276565b6114ea565b34801561099557600080fd5b506104366109a43660046132e2565b611541565b3480156109b557600080fd5b506104366109c4366004613335565b611598565b3480156109d557600080fd5b506104366109e4366004612f33565b61161e565b3480156109f557600080fd5b50600154600254600354604080516001600160a01b039485168152928416602084015292169181019190915260600161040d565b348015610a3557600080fd5b50610436610a44366004613358565b611684565b348015610a5557600080fd5b50610b18610a64366004612caf565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915250600090815260076020908152604091829020825160c08101845281546001600160a01b03808216835267ffffffffffffffff600160a01b80840482169685019690965263ffffffff600160e01b938490048116978501979097526001949094015490811660608401529384049092166080820152910490911660a082015290565b60405161040d9190600060c0820190506001600160a01b03808451168352602084015167ffffffffffffffff80821660208601526040860151915063ffffffff80831660408701528360608801511660608701528160808801511660808701528060a08801511660a08701525050505092915050565b348015610b9a57600080fd5b50610bbe610ba9366004612caf565b60009081526018602052604090205460ff1690565b604051901515815260200161040d565b348015610bda57600080fd5b50610436610be93660046133f4565b61171c565b348015610bfa57600080fd5b50610436610c0936600461345a565b611786565b348015610c1a57600080fd5b50610436610c29366004612d9e565b6117f4565b348015610c3a57600080fd5b50610436610c49366004613276565b61184d565b348015610c5a57600080fd5b50600954600a54600b546040805167ffffffffffffffff8086168252600160401b860481166020830152600160801b860463ffffffff1692820192909252600160a01b9094046bffffffffffffffffffffffff16606085015260808401929092521660a082015260c00161040d565b348015610cd557600080fd5b5060055460065460408051600160a01b90930467ffffffffffffffff90811684528083166020850152600160401b9092049091169082015260600161040d565b348015610d2157600080fd5b50610436610d30366004613497565b6118a4565b348015610d4157600080fd5b50610436610d503660046134b2565b6118b2565b348015610d6157600080fd5b50610436610d703660046134cd565b611991565b348015610d8157600080fd5b50601a5460601b6040516001600160601b0319909116815260200161040d565b348015610dad57600080fd5b50610bbe610dbc3660046134b2565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610de657600080fd5b50610dfa610df5366004613497565b6119ec565b60405161040d9190613570565b348015610e1357600080fd5b50610ea9610e22366004612caf565b6040805160808082018352600080835260208084018290528385018290526060938401829052948152600c855283902083519182018452805480841b6001600160601b0319168352600160a01b810467ffffffffffffffff1695830195909552600160e01b90940463ffffffff908116938201939093526001909301549091169082015290565b6040805182516001600160601b031916815260208084015167ffffffffffffffff16908201528282015163ffffffff908116928201929092526060928301519091169181019190915260800161040d565b6040517f260b6cde00000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063260b6cde90610f4f906001908690869060040161364f565b60006040518083038186803b158015610f6757600080fd5b505af4158015610f7b573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610fe25760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064015b60405180910390fd5b610fef6001848484611b10565b505050565b6040517e92bac900000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__906292bac99061104b906001908890889088908890600401613806565b60006040518083038186803b15801561106357600080fd5b505af4158015611077573d6000803e3d6000fd5b5050505050505050565b6040517fa76558b300000000000000000000000000000000000000000000000000000000815273__$9935b6ea18e0c526c293569ddd26842c9b$__9063a76558b3906110dc90600190899089908990899089906004016138a4565b60006040518083038186803b1580156110f457600080fd5b505af4158015611108573d6000803e3d6000fd5b505050505050505050565b6040517fc87de7f400000000000000000000000000000000000000000000000000000000815260016004820152602481018390526044810182905273__$0f118c52967a3847a37f0a2ef02ffcee04$__9063c87de7f4906064015b60006040518083038186803b15801561118657600080fd5b505af415801561119a573d6000803e3d6000fd5b50505050505050565b6040517f89b43a8600000000000000000000000000000000000000000000000000000000815273__$a542940934c03bae9a39609192cb25cc3c$__906389b43a86906110dc90600190899089908990899089906004016138f3565b6000546001600160a01b031633146112585760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610fd9565b610f7b6001878787878787611d47565b6040517f99b0b84700000000000000000000000000000000000000000000000000000000815273__$0f118c52967a3847a37f0a2ef02ffcee04$__906399b0b84790610f4f906001908690869060040161364f565b6040517faea7fd0b00000000000000000000000000000000000000000000000000000000815273__$894ce12e79ca3e5683c1b49e363f37fa22$__9063aea7fd0b90610f4f9060019086908690600401613934565b6000546001600160a01b0316331461136c5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610fd9565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f9065599c12c4294d9e2201638226d0d0beb95c228f468c4e7c2bdb8322b6066f910160405180910390a25050565b6040517f3b5d9f2400000000000000000000000000000000000000000000000000000000815273__$a542940934c03bae9a39609192cb25cc3c$__90633b5d9f249061104b906001908890889088908890600401613a67565b6040517f624526fe00000000000000000000000000000000000000000000000000000000815273__$a542940934c03bae9a39609192cb25cc3c$__9063624526fe906110dc9060019089908990899089908990600401613ac1565b6000546001600160a01b031633146114d95760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610fd9565b61119a60018888888888888861210d565b6040517f2fcc8fb100000000000000000000000000000000000000000000000000000000815273__$24f7e155a6d011c1bf9032506ba9b1954c$__90632fcc8fb19061116e90600190879087908790600401613b04565b6040517f07f96c4200000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__906307f96c429061116e90600190879087908790600401613b48565b6040517fd079fbb100000000000000000000000000000000000000000000000000000000815273__$0f118c52967a3847a37f0a2ef02ffcee04$__9063d079fbb1906115eb906001908590600401613b77565b60006040518083038186803b15801561160357600080fd5b505af4158015611617573d6000803e3d6000fd5b5050505050565b6040517f4afbe4c90000000000000000000000000000000000000000000000000000000081526001600482015260248101849052604481018390526064810182905273__$0f118c52967a3847a37f0a2ef02ffcee04$__90634afbe4c99060840161116e565b6040517fc8f7794300000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063c8f77943906116e3906001908b908b908b908b908b908b908b90600401613b8b565b60006040518083038186803b1580156116fb57600080fd5b505af415801561170f573d6000803e3d6000fd5b5050505050505050505050565b6000546001600160a01b031633146117765760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610fd9565b610f7b60018787878787876124dd565b6000546001600160a01b031633146117e05760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610fd9565b6117ee60018585858561285f565b50505050565b6040517fa164de6e00000000000000000000000000000000000000000000000000000000815273__$9935b6ea18e0c526c293569ddd26842c9b$__9063a164de6e9061104b906001908890889088908890600401613806565b6040517fb79a972500000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063b79a97259061116e90600190879087908790600401613b04565b6118af6001826129d6565b50565b6000546001600160a01b0316331461190c5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610fd9565b6001600160a01b0381166119885760405162461bcd60e51b815260206004820152602260248201527f4e657720676f7665726e616e636520697320746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610fd9565b6118af81612b2e565b6040517f7333b36900000000000000000000000000000000000000000000000000000000815273__$9935b6ea18e0c526c293569ddd26842c9b$__90637333b369906110dc9060019089908990899089908990600401613c1b565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101919091526001600160601b031982166000908152601c602090815260409182902082516101208101845281548152600182015492810192909252600281015467ffffffffffffffff81169383019390935263ffffffff600160401b8404811660608401526c01000000000000000000000000840481166080840152600160801b8404811660a0840152600160a01b84041660c0830152909160e083019060ff600160c01b909104166005811115611aea57611aea613538565b6005811115611afb57611afb613538565b81526020016003820154815250509050919050565b60008367ffffffffffffffff1611611b905760405162461bcd60e51b815260206004820152603060248201527f4465706f7369742064757374207468726573686f6c64206d757374206265206760448201527f726561746572207468616e207a65726f000000000000000000000000000000006064820152608401610fd9565b60008267ffffffffffffffff1611611c105760405162461bcd60e51b815260206004820152603660248201527f4465706f736974207472656173757279206665652064697669736f72206d757360448201527f742062652067726561746572207468616e207a65726f000000000000000000006064820152608401610fd9565b60008167ffffffffffffffff1611611c905760405162461bcd60e51b815260206004820152603560248201527f4465706f736974207472616e73616374696f6e206d617820666565206d75737460448201527f2062652067726561746572207468616e207a65726f00000000000000000000006064820152608401610fd9565b6004840180547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff16600160a01b67ffffffffffffffff868116918202929092179092556005860180548583166fffffffffffffffffffffffffffffffff199091168117600160401b938616938402179091556040805193845260208401919091528201527f1ced468902ca566e746a3c8c9516af81f8de9f1021c365083be9f2625ebfb7b59060600160405180910390a150505050565b60008667ffffffffffffffff1611611dc9576040805162461bcd60e51b81526020600482015260248101919091527f4d6f76696e672066756e6473207472616e73616374696f6e206d617820746f7460448201527f616c20666565206d7573742062652067726561746572207468616e207a65726f6064820152608401610fd9565b60008567ffffffffffffffff1611611e495760405162461bcd60e51b815260206004820152603560248201527f4d6f76696e672066756e64732064757374207468726573686f6c64206d75737460448201527f2062652067726561746572207468616e207a65726f00000000000000000000006064820152608401610fd9565b60008463ffffffff1611611ec55760405162461bcd60e51b815260206004820152602e60248201527f4d6f76696e672066756e64732074696d656f7574206d7573742062652067726560448201527f61746572207468616e207a65726f0000000000000000000000000000000000006064820152608401610fd9565b6064821115611f625760405162461bcd60e51b815260206004820152604d60248201527f4d6f76696e672066756e64732074696d656f7574206e6f74696669657220726560448201527f77617264206d756c7469706c696572206d75737420626520696e20746865207260648201527f616e6765205b302c203130305d00000000000000000000000000000000000000608482015260a401610fd9565b60008167ffffffffffffffff16116120085760405162461bcd60e51b815260206004820152604560248201527f4d6f7665642066756e6473207377656570207472616e73616374696f6e206d6160448201527f7820746f74616c20666565206d7573742062652067726561746572207468616e60648201527f207a65726f000000000000000000000000000000000000000000000000000000608482015260a401610fd9565b60088701805467ffffffffffffffff8881166fffffffffffffffffffffffffffffffff199092168217600160401b898316908102919091176fffffffffffffffffffffffffffffffff16600160801b63ffffffff8a169081026001600160a01b031691909117600160a01b6bffffffffffffffffffffffff8a169081029190911790955560098c01879055600a8c01805467ffffffffffffffff191693871693841790556040805194855260208501929092529083015260608201929092526080810184905260a08101919091527f52ccbbed9d26b67ca026d54f8fe61cca76c333edad9725d266a2ac667659c73f9060c0015b60405180910390a150505050505050565b8567ffffffffffffffff168567ffffffffffffffff16116121bc5760405162461bcd60e51b815260206004820152605960248201527f57616c6c6574206372656174696f6e206d6178696d756d204254432062616c6160448201527f6e6365206d7573742062652067726561746572207468616e207468652063726560648201527f6174696f6e206d696e696d756d204254432062616c616e636500000000000000608482015260a401610fd9565b60008467ffffffffffffffff161161223c5760405162461bcd60e51b815260206004820152603c60248201527f57616c6c657420636c6f73757265206d696e696d756d204254432062616c616e60448201527f6365206d7573742062652067726561746572207468616e207a65726f000000006064820152608401610fd9565b60008267ffffffffffffffff16116122bc5760405162461bcd60e51b815260206004820152603560248201527f57616c6c6574206d6178696d756d20425443207472616e73666572206d75737460448201527f2062652067726561746572207468616e207a65726f00000000000000000000006064820152608401610fd9565b60008163ffffffff16116123385760405162461bcd60e51b815260206004820152602f60248201527f57616c6c657420636c6f73696e6720706572696f64206d75737420626520677260448201527f6561746572207468616e207a65726f00000000000000000000000000000000006064820152608401610fd9565b868860180160006101000a81548163ffffffff021916908363ffffffff160217905550858860180160046101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508488601801600c6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550838860180160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508288601801601c6101000a81548163ffffffff021916908363ffffffff160217905550818860190160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508088601a0160006101000a81548163ffffffff021916908363ffffffff1602179055507fc7d3a9af08692aeae771c329fddd95c7237a9f76fec996325f3959eeff07d4ac878787878787876040516124cb979695949392919063ffffffff978816815267ffffffffffffffff968716602082015294861660408601529285166060850152908516608084015290921660a0820152911660c082015260e00190565b60405180910390a15050505050505050565b60008667ffffffffffffffff161161255d5760405162461bcd60e51b815260206004820152603360248201527f526564656d7074696f6e2064757374207468726573686f6c64206d757374206260448201527f652067726561746572207468616e207a65726f000000000000000000000000006064820152608401610fd9565b60008567ffffffffffffffff16116125dd5760405162461bcd60e51b815260206004820152603960248201527f526564656d7074696f6e207472656173757279206665652064697669736f722060448201527f6d7573742062652067726561746572207468616e207a65726f000000000000006064820152608401610fd9565b60008467ffffffffffffffff161161265d5760405162461bcd60e51b815260206004820152603860248201527f526564656d7074696f6e207472616e73616374696f6e206d617820666565206d60448201527f7573742062652067726561746572207468616e207a65726f00000000000000006064820152608401610fd9565b600083116126d35760405162461bcd60e51b815260206004820152602c60248201527f526564656d7074696f6e2074696d656f7574206d75737420626520677265617460448201527f6572207468616e207a65726f00000000000000000000000000000000000000006064820152608401610fd9565b60648111156127705760405162461bcd60e51b815260206004820152604b60248201527f526564656d7074696f6e2074696d656f7574206e6f746966696572207265776160448201527f7264206d756c7469706c696572206d75737420626520696e207468652072616e60648201527f6765205b302c203130305d000000000000000000000000000000000000000000608482015260a401610fd9565b600c8701805467ffffffffffffffff8881166fffffffffffffffffffffffffffffffff199092168217600160401b898316908102919091177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16600160801b92891692830217909355600d8a01869055600e8a0180546001600160601b0319166bffffffffffffffffffffffff8716908117909155600f8b018590556040805193845260208401949094529282015260608101859052608081019190915260a081018290527f944cd06e316cc3da4159300dd41ab23416c89a5136c41fa79d57fe8a34bcc10f9060c0016120fc565b600083116128d55760405162461bcd60e51b815260206004820152603860248201527f4672617564206368616c6c656e6765206465666561742074696d656f7574206d60448201527f7573742062652067726561746572207468616e207a65726f00000000000000006064820152608401610fd9565b606481111561294c5760405162461bcd60e51b815260206004820152603e60248201527f4672617564206e6f74696669657220726577617264206d756c7469706c69657260448201527f206d75737420626520696e207468652072616e6765205b302c203130305d00006064820152608401610fd9565b60128501849055601385018390556014850180546001600160601b0319166bffffffffffffffffffffffff841690811790915560158601829055604080518681526020810186905290810191909152606081018290527fd0d6d92441fbb139a023c9c62586dbd767824f37869c45da6443fc3aef64194f9060800160405180910390a15050505050565b6001600160601b031981166000908152601b83016020526040902060036002820154600160c01b900460ff166005811115612a1357612a13613538565b14612a865760405162461bcd60e51b815260206004820152602560248201527f45434453412077616c6c6574206d75737420626520696e20436c6f73696e672060448201527f73746174650000000000000000000000000000000000000000000000000000006064820152608401610fd9565b601a8301546002820154612aaa9163ffffffff90811691600160801b900416613c6f565b63ffffffff164211612b245760405162461bcd60e51b815260206004820152602260248201527f436c6f73696e6720706572696f6420686173206e6f7420656c6170736564207960448201527f65740000000000000000000000000000000000000000000000000000000000006064820152608401610fd9565b610fef8383612ba7565b600080546001600160a01b038381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b6001600160601b031981166000818152601b840160205260408082206002810180547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff167804000000000000000000000000000000000000000000000000179055805491519093927f47b159947c3066cb253f60e8f046cfd747411788a545cb189679e3fa1467b28d91a3600283015481546040517f343bb9270000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163343bb92791612c819160040190815260200190565b600060405180830381600087803b158015612c9b57600080fd5b505af115801561119a573d6000803e3d6000fd5b600060208284031215612cc157600080fd5b5035919050565b80356001600160601b031981168114612ce057600080fd5b919050565b600060608284031215612cf757600080fd5b50919050565b60008060808385031215612d1057600080fd5b612d1983612cc8565b9150612d288460208501612ce5565b90509250929050565b803567ffffffffffffffff81168114612ce057600080fd5b600080600060608486031215612d5e57600080fd5b612d6784612d31565b9250612d7560208501612d31565b9150612d8360408501612d31565b90509250925092565b600060808284031215612cf757600080fd5b60008060008060c08587031215612db457600080fd5b843567ffffffffffffffff80821115612dcc57600080fd5b612dd888838901612d8c565b95506020870135915080821115612dee57600080fd5b50612dfb87828801612ce5565b935050612e0b8660408701612ce5565b9150612e1960a08601612cc8565b905092959194509250565b60008083601f840112612e3657600080fd5b50813567ffffffffffffffff811115612e4e57600080fd5b6020830191508360208260051b8501011115612e6957600080fd5b9250929050565b60008083601f840112612e8257600080fd5b50813567ffffffffffffffff811115612e9a57600080fd5b602083019150836020828501011115612e6957600080fd5b600080600080600060608688031215612eca57600080fd5b612ed386612cc8565b9450602086013567ffffffffffffffff80821115612ef057600080fd5b612efc89838a01612e24565b90965094506040880135915080821115612f1557600080fd5b50612f2288828901612e70565b969995985093965092949392505050565b600080600060608486031215612f4857600080fd5b505081359360208301359350604090920135919050565b600080600080600060608688031215612f7757600080fd5b853567ffffffffffffffff80821115612f8f57600080fd5b612f9b89838a01612e70565b90975095506020880135915080821115612fb457600080fd5b50612fc188828901612e24565b96999598509660400135949350505050565b803563ffffffff81168114612ce057600080fd5b80356bffffffffffffffffffffffff81168114612ce057600080fd5b60008060008060008060c0878903121561301c57600080fd5b61302587612d31565b955061303360208801612d31565b945061304160408801612fd3565b935061304f60608801612fe7565b92506080870135915061306460a08801612d31565b90509295509295509295565b60008082840361010081121561308557600080fd5b833567ffffffffffffffff81111561309c57600080fd5b6130a886828701612d8c565b93505060e0601f19820112156130bd57600080fd5b506020830190509250929050565b80356001600160a01b0381168114612ce057600080fd5b80358015158114612ce057600080fd5b6000806040838503121561310557600080fd5b61310e836130cb565b9150612d28602084016130e2565b60008060008060a0858703121561313257600080fd5b843567ffffffffffffffff81111561314957600080fd5b61315587828801612e70565b90955093505060208501359150612e198660408701612ce5565b60008060008060006060868803121561318757600080fd5b853567ffffffffffffffff8082111561319f57600080fd5b6131ab89838a01612e70565b909750955060208801359150808211156131c457600080fd5b506131d188828901612e70565b90945092506131e49050604087016130e2565b90509295509295909350565b600080600080600080600060e0888a03121561320b57600080fd5b61321488612fd3565b965061322260208901612d31565b955061323060408901612d31565b945061323e60608901612d31565b935061324c60808901612fd3565b925061325a60a08901612d31565b915061326860c08901612fd3565b905092959891949750929550565b600080600060a0848603121561328b57600080fd5b833567ffffffffffffffff808211156132a357600080fd5b6132af87838801612d8c565b945060208601359150808211156132c557600080fd5b506132d286828701612ce5565b925050612d838560408601612ce5565b6000806000604084860312156132f757600080fd5b61330084612cc8565b9250602084013567ffffffffffffffff81111561331c57600080fd5b61332886828701612e24565b9497909650939450505050565b60006060828403121561334757600080fd5b6133518383612ce5565b9392505050565b600080600080600080600060e0888a03121561337357600080fd5b61337c88612cc8565b965061338b8960208a01612ce5565b9550608088013567ffffffffffffffff808211156133a857600080fd5b6133b48b838c01612e24565b909750955060a08a0135945060c08a01359150808211156133d457600080fd5b506133e18a828b01612e24565b989b979a50959850939692959293505050565b60008060008060008060c0878903121561340d57600080fd5b61341687612d31565b955061342460208801612d31565b945061343260408801612d31565b93506060870135925061344760808801612fe7565b915060a087013590509295509295509295565b6000806000806080858703121561347057600080fd5b843593506020850135925061348760408601612fe7565b9396929550929360600135925050565b6000602082840312156134a957600080fd5b61335182612cc8565b6000602082840312156134c457600080fd5b613351826130cb565b600080600080600060c086880312156134e557600080fd5b6134ee86612cc8565b94506134fd8760208801612ce5565b9350608086013567ffffffffffffffff81111561351957600080fd5b61352588828901612e70565b90945092506131e4905060a08701612d31565b634e487b7160e01b600052602160045260246000fd5b6006811061356c57634e487b7160e01b600052602160045260246000fd5b9052565b600061012082019050825182526020830151602083015267ffffffffffffffff604084015116604083015263ffffffff606084015116606083015260808301516135c2608084018263ffffffff169052565b5060a08301516135da60a084018263ffffffff169052565b5060c08301516135f260c084018263ffffffff169052565b5060e083015161360560e084018261354e565b5061010092830151919092015290565b8035825263ffffffff61362a60208301612fd3565b16602083015267ffffffffffffffff61364560408301612d31565b1660408301525050565b8381526001600160601b03198316602082015260a081016136736040830184613615565b949350505050565b80357fffffffff0000000000000000000000000000000000000000000000000000000081168114612ce057600080fd5b6000808335601e198436030181126136c257600080fd5b830160208101925035905067ffffffffffffffff8111156136e257600080fd5b803603831315612e6957600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60007fffffffff00000000000000000000000000000000000000000000000000000000806137478461367b565b16845261375760208401846136ab565b6080602087015261376c6080870182846136f1565b91505061377c60408501856136ab565b868303604088015261378f8382846136f1565b92505050816137a06060860161367b565b166060860152809250505092915050565b60006137bd82836136ab565b606085526137cf6060860182846136f1565b915050602083013560208501526137e960408401846136ab565b85830360408701526137fc8382846136f1565b9695505050505050565b85815260e06020820152600061381f60e083018761371a565b828103604084015261383181876137b1565b9150506138416060830185613615565b6bffffffffffffffffffffffff19831660c08301529695505050505050565b8183526000602080850194508260005b858110156138995763ffffffff61388683612fd3565b1687529582019590820190600101613870565b509495945050505050565b8681526bffffffffffffffffffffffff19861660208201526080604082015260006138d3608083018688613860565b82810360608401526138e68185876136f1565b9998505050505050505050565b86815260806020820152600061390d6080830187896136f1565b8281036040840152613920818688613860565b915050826060830152979650505050505050565b600061012085835280602084015261394e8184018661371a565b91505063ffffffff61395f84612fd3565b1660408301526001600160a01b03613979602085016130cb565b16606083015260408301357fffffffffffffffff000000000000000000000000000000000000000000000000811681146139b257600080fd5b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301526139e560608401612cc8565b6001600160601b03191660a0830152613a0060808401612cc8565b6001600160601b03191660c0830152613a1b60a0840161367b565b7fffffffff000000000000000000000000000000000000000000000000000000001660e0830152613a4e60c084016130cb565b6001600160a01b03811661010084015250949350505050565b85815260c060208201526000613a8160c0830186886136f1565b90508360408301528235606083015260208301356080830152604083013560ff8116808214613aaf57600080fd5b8060a085015250509695505050505050565b868152608060208201526000613adb6080830187896136f1565b8281036040840152613aee8186886136f1565b9150508215156060830152979650505050505050565b84815260c060208201526000613b1d60c083018661371a565b8281036040840152613b2f81866137b1565b915050613b3f6060830184613615565b95945050505050565b8481526bffffffffffffffffffffffff19841660208201526060604082015260006137fc606083018486613860565b828152608081016133516020830184613615565b60006101008a835260206bffffffffffffffffffffffff19808c1682860152613bb7604086018c613615565b8260a0860152613bca8386018a8c613860565b60c0860189905285810360e0870152868152879350820160005b87811015613c095782613bf686612cc8565b1682529383019390830190600101613be4565b509d9c50505050505050505050505050565b8681526001600160601b031986166020820152613c3b6040820186613615565b60e060a08201526000613c5260e0830185876136f1565b905067ffffffffffffffff831660c0830152979650505050505050565b600063ffffffff808316818516808303821115613c9c57634e487b7160e01b600052601160045260246000fd5b0194935050505056fea2646970667358221220bc72de4200b7cc7a0fea34470d58ea8b624eef0f054fdff0477c5af8db5e77c464736f6c63430008090033",
2266
+ "deployedBytecode": "0x6080604052600436106102e75760003560e01c8063883d6a1111610184578063b34b3216116100d6578063d38bfff41161008a578063e53c0b5511610064578063e53c0b5514610da1578063e65e19d514610dda578063f18cf1b114610e0757600080fd5b8063d38bfff414610d35578063d6eccdf014610d55578063ded1d24a14610d7557600080fd5b8063be05abe3116100bb578063be05abe314610c4e578063c42b64d014610cc9578063c8b5d2db14610d1557600080fd5b8063b34b321614610c0e578063b7d372a414610c2e57600080fd5b8063a9de2f3a11610138578063b2146cd611610112578063b2146cd614610b8e578063b216bd3514610bce578063b29a604b14610bee57600080fd5b8063a9de2f3a146109e9578063abaeed8f14610a29578063b02c43d014610a4957600080fd5b806392238f321161016957806392238f3214610989578063a145e2d5146109a9578063a8fa0f42146109c957600080fd5b8063883d6a111461094957806391a9fdde1461096957600080fd5b806350bf60201161023d57806361ccf97a116101f15780636e70ce41116101cb5780636e70ce411461083f57806375b922d1146108dd57806377145f211461092957600080fd5b806361ccf97a1461077d57806361d027b31461080e5780636d02b43c1461082c57600080fd5b80635aa6e675116102225780635aa6e675146107055780635c0b48121461073d57806360d712fc1461075d57600080fd5b806350bf6020146106c5578063575e4279146106e557600080fd5b80632bb818c21161029f57806333e957cb1161027957806333e957cb146105a65780633dce9812146106855780634fb1b4c6146106a557600080fd5b80632bb818c2146105485780632f429b641461056657806331a4889a1461058657600080fd5b80630b6ba19d116102d05780630b6ba19d1461043857806317c96400146104f657806324028c111461051657600080fd5b806303d952f7146102ec57806307f7d22314610416575b600080fd5b3480156102f857600080fd5b506103aa610307366004612caf565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915250600090815260116020908152604091829020825160a08101845281546001600160a01b0381168252600160a01b900467ffffffffffffffff9081169382019390935260019091015480831693820193909352600160401b83049091166060820152600160801b90910463ffffffff16608082015290565b60405161040d9190600060a0820190506001600160a01b038351168252602083015167ffffffffffffffff8082166020850152806040860151166040850152806060860151166060850152505063ffffffff608084015116608083015292915050565b60405180910390f35b34801561042257600080fd5b50610436610431366004612cfd565b610efa565b005b34801561044457600080fd5b506103aa610453366004612caf565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915250600090815260126020908152604091829020825160a08101845281546001600160a01b0381168252600160a01b900467ffffffffffffffff9081169382019390935260019091015480831693820193909352600160401b83049091166060820152600160801b90910463ffffffff16608082015290565b34801561050257600080fd5b50610436610511366004612d49565b610f83565b34801561052257600080fd5b50601a54600160a01b900463ffffffff1660405163ffffffff909116815260200161040d565b34801561055457600080fd5b5060045460405190815260200161040d565b34801561057257600080fd5b50610436610581366004612d9e565b610ff4565b34801561059257600080fd5b506104366105a1366004612eb2565b611081565b3480156105b257600080fd5b506106416105c1366004612caf565b60408051608081018252600080825260208201819052918101829052606081019190915250600090815260176020908152604091829020825160808101845281546001600160a01b031681526001820154928101929092526002015463ffffffff81169282019290925264010000000090910460ff161515606082015290565b60405161040d919081516001600160a01b031681526020808301519082015260408083015163ffffffff169082015260609182015115159181019190915260800190565b34801561069157600080fd5b506104366106a0366004612f33565b611113565b3480156106b157600080fd5b506104366106c0366004612f5f565b6111a3565b3480156106d157600080fd5b506104366106e0366004613003565b6111fe565b3480156106f157600080fd5b50610436610700366004612cfd565b611268565b34801561071157600080fd5b50600054610725906001600160a01b031681565b6040516001600160a01b03909116815260200161040d565b34801561074957600080fd5b50610436610758366004613070565b6112bd565b34801561076957600080fd5b506104366107783660046130f2565b611312565b34801561078957600080fd5b50601954601a54601b546040805163ffffffff808616825267ffffffffffffffff6401000000008704811660208401526c010000000000000000000000008704811693830193909352600160a01b860483166060830152600160e01b90950485166080820152600160c01b9093041660a08301529190911660c082015260e00161040d565b34801561081a57600080fd5b506005546001600160a01b0316610725565b61043661083a36600461311c565b6113cb565b34801561084b57600080fd5b50610890600d54600e54600f5460105467ffffffffffffffff80851695600160401b8604821695600160801b900490911693926bffffffffffffffffffffffff169190565b6040805167ffffffffffffffff97881681529587166020870152939095169284019290925260608301526bffffffffffffffffffffffff16608082015260a081019190915260c00161040d565b3480156108e957600080fd5b506013546014546015546016546040805194855260208501939093526bffffffffffffffffffffffff90911691830191909152606082015260800161040d565b34801561093557600080fd5b5061043661094436600461316f565b611424565b34801561095557600080fd5b506104366109643660046131f0565b61147f565b34801561097557600080fd5b50610436610984366004613276565b6114ea565b34801561099557600080fd5b506104366109a43660046132e2565b611541565b3480156109b557600080fd5b506104366109c4366004613335565b611598565b3480156109d557600080fd5b506104366109e4366004612f33565b61161e565b3480156109f557600080fd5b50600154600254600354604080516001600160a01b039485168152928416602084015292169181019190915260600161040d565b348015610a3557600080fd5b50610436610a44366004613358565b611684565b348015610a5557600080fd5b50610b18610a64366004612caf565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915250600090815260076020908152604091829020825160c08101845281546001600160a01b03808216835267ffffffffffffffff600160a01b80840482169685019690965263ffffffff600160e01b938490048116978501979097526001949094015490811660608401529384049092166080820152910490911660a082015290565b60405161040d9190600060c0820190506001600160a01b03808451168352602084015167ffffffffffffffff80821660208601526040860151915063ffffffff80831660408701528360608801511660608701528160808801511660808701528060a08801511660a08701525050505092915050565b348015610b9a57600080fd5b50610bbe610ba9366004612caf565b60009081526018602052604090205460ff1690565b604051901515815260200161040d565b348015610bda57600080fd5b50610436610be93660046133f4565b61171c565b348015610bfa57600080fd5b50610436610c0936600461345a565b611786565b348015610c1a57600080fd5b50610436610c29366004612d9e565b6117f4565b348015610c3a57600080fd5b50610436610c49366004613276565b61184d565b348015610c5a57600080fd5b50600954600a54600b546040805167ffffffffffffffff8086168252600160401b860481166020830152600160801b860463ffffffff1692820192909252600160a01b9094046bffffffffffffffffffffffff16606085015260808401929092521660a082015260c00161040d565b348015610cd557600080fd5b5060055460065460408051600160a01b90930467ffffffffffffffff90811684528083166020850152600160401b9092049091169082015260600161040d565b348015610d2157600080fd5b50610436610d30366004613497565b6118a4565b348015610d4157600080fd5b50610436610d503660046134b2565b6118b2565b348015610d6157600080fd5b50610436610d703660046134cd565b611991565b348015610d8157600080fd5b50601a5460601b6040516001600160601b0319909116815260200161040d565b348015610dad57600080fd5b50610bbe610dbc3660046134b2565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610de657600080fd5b50610dfa610df5366004613497565b6119ec565b60405161040d9190613570565b348015610e1357600080fd5b50610ea9610e22366004612caf565b6040805160808082018352600080835260208084018290528385018290526060938401829052948152600c855283902083519182018452805480841b6001600160601b0319168352600160a01b810467ffffffffffffffff1695830195909552600160e01b90940463ffffffff908116938201939093526001909301549091169082015290565b6040805182516001600160601b031916815260208084015167ffffffffffffffff16908201528282015163ffffffff908116928201929092526060928301519091169181019190915260800161040d565b6040517f260b6cde00000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063260b6cde90610f4f906001908690869060040161364f565b60006040518083038186803b158015610f6757600080fd5b505af4158015610f7b573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610fe25760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064015b60405180910390fd5b610fef6001848484611b10565b505050565b6040517e92bac900000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__906292bac99061104b906001908890889088908890600401613806565b60006040518083038186803b15801561106357600080fd5b505af4158015611077573d6000803e3d6000fd5b5050505050505050565b6040517fa76558b300000000000000000000000000000000000000000000000000000000815273__$9935b6ea18e0c526c293569ddd26842c9b$__9063a76558b3906110dc90600190899089908990899089906004016138a4565b60006040518083038186803b1580156110f457600080fd5b505af4158015611108573d6000803e3d6000fd5b505050505050505050565b6040517fc87de7f400000000000000000000000000000000000000000000000000000000815260016004820152602481018390526044810182905273__$0f118c52967a3847a37f0a2ef02ffcee04$__9063c87de7f4906064015b60006040518083038186803b15801561118657600080fd5b505af415801561119a573d6000803e3d6000fd5b50505050505050565b6040517f89b43a8600000000000000000000000000000000000000000000000000000000815273__$a542940934c03bae9a39609192cb25cc3c$__906389b43a86906110dc90600190899089908990899089906004016138f3565b6000546001600160a01b031633146112585760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610fd9565b610f7b6001878787878787611d47565b6040517f99b0b84700000000000000000000000000000000000000000000000000000000815273__$0f118c52967a3847a37f0a2ef02ffcee04$__906399b0b84790610f4f906001908690869060040161364f565b6040517faea7fd0b00000000000000000000000000000000000000000000000000000000815273__$894ce12e79ca3e5683c1b49e363f37fa22$__9063aea7fd0b90610f4f9060019086908690600401613934565b6000546001600160a01b0316331461136c5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610fd9565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f9065599c12c4294d9e2201638226d0d0beb95c228f468c4e7c2bdb8322b6066f910160405180910390a25050565b6040517f3b5d9f2400000000000000000000000000000000000000000000000000000000815273__$a542940934c03bae9a39609192cb25cc3c$__90633b5d9f249061104b906001908890889088908890600401613a67565b6040517f624526fe00000000000000000000000000000000000000000000000000000000815273__$a542940934c03bae9a39609192cb25cc3c$__9063624526fe906110dc9060019089908990899089908990600401613ac1565b6000546001600160a01b031633146114d95760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610fd9565b61119a60018888888888888861210d565b6040517f2fcc8fb100000000000000000000000000000000000000000000000000000000815273__$24f7e155a6d011c1bf9032506ba9b1954c$__90632fcc8fb19061116e90600190879087908790600401613b04565b6040517f07f96c4200000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__906307f96c429061116e90600190879087908790600401613b48565b6040517fd079fbb100000000000000000000000000000000000000000000000000000000815273__$0f118c52967a3847a37f0a2ef02ffcee04$__9063d079fbb1906115eb906001908590600401613b77565b60006040518083038186803b15801561160357600080fd5b505af4158015611617573d6000803e3d6000fd5b5050505050565b6040517f4afbe4c90000000000000000000000000000000000000000000000000000000081526001600482015260248101849052604481018390526064810182905273__$0f118c52967a3847a37f0a2ef02ffcee04$__90634afbe4c99060840161116e565b6040517fc8f7794300000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063c8f77943906116e3906001908b908b908b908b908b908b908b90600401613b8b565b60006040518083038186803b1580156116fb57600080fd5b505af415801561170f573d6000803e3d6000fd5b5050505050505050505050565b6000546001600160a01b031633146117765760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610fd9565b610f7b60018787878787876124dd565b6000546001600160a01b031633146117e05760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610fd9565b6117ee60018585858561285f565b50505050565b6040517fa164de6e00000000000000000000000000000000000000000000000000000000815273__$9935b6ea18e0c526c293569ddd26842c9b$__9063a164de6e9061104b906001908890889088908890600401613806565b6040517fb79a972500000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063b79a97259061116e90600190879087908790600401613b04565b6118af6001826129d6565b50565b6000546001600160a01b0316331461190c5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610fd9565b6001600160a01b0381166119885760405162461bcd60e51b815260206004820152602260248201527f4e657720676f7665726e616e636520697320746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610fd9565b6118af81612b2e565b6040517f7333b36900000000000000000000000000000000000000000000000000000000815273__$9935b6ea18e0c526c293569ddd26842c9b$__90637333b369906110dc9060019089908990899089908990600401613c1b565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101919091526001600160601b031982166000908152601c602090815260409182902082516101208101845281548152600182015492810192909252600281015467ffffffffffffffff81169383019390935263ffffffff600160401b8404811660608401526c01000000000000000000000000840481166080840152600160801b8404811660a0840152600160a01b84041660c0830152909160e083019060ff600160c01b909104166005811115611aea57611aea613538565b6005811115611afb57611afb613538565b81526020016003820154815250509050919050565b60008367ffffffffffffffff1611611b905760405162461bcd60e51b815260206004820152603060248201527f4465706f7369742064757374207468726573686f6c64206d757374206265206760448201527f726561746572207468616e207a65726f000000000000000000000000000000006064820152608401610fd9565b60008267ffffffffffffffff1611611c105760405162461bcd60e51b815260206004820152603660248201527f4465706f736974207472656173757279206665652064697669736f72206d757360448201527f742062652067726561746572207468616e207a65726f000000000000000000006064820152608401610fd9565b60008167ffffffffffffffff1611611c905760405162461bcd60e51b815260206004820152603560248201527f4465706f736974207472616e73616374696f6e206d617820666565206d75737460448201527f2062652067726561746572207468616e207a65726f00000000000000000000006064820152608401610fd9565b6004840180547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff16600160a01b67ffffffffffffffff868116918202929092179092556005860180548583166fffffffffffffffffffffffffffffffff199091168117600160401b938616938402179091556040805193845260208401919091528201527f1ced468902ca566e746a3c8c9516af81f8de9f1021c365083be9f2625ebfb7b59060600160405180910390a150505050565b60008667ffffffffffffffff1611611dc9576040805162461bcd60e51b81526020600482015260248101919091527f4d6f76696e672066756e6473207472616e73616374696f6e206d617820746f7460448201527f616c20666565206d7573742062652067726561746572207468616e207a65726f6064820152608401610fd9565b60008567ffffffffffffffff1611611e495760405162461bcd60e51b815260206004820152603560248201527f4d6f76696e672066756e64732064757374207468726573686f6c64206d75737460448201527f2062652067726561746572207468616e207a65726f00000000000000000000006064820152608401610fd9565b60008463ffffffff1611611ec55760405162461bcd60e51b815260206004820152602e60248201527f4d6f76696e672066756e64732074696d656f7574206d7573742062652067726560448201527f61746572207468616e207a65726f0000000000000000000000000000000000006064820152608401610fd9565b6064821115611f625760405162461bcd60e51b815260206004820152604d60248201527f4d6f76696e672066756e64732074696d656f7574206e6f74696669657220726560448201527f77617264206d756c7469706c696572206d75737420626520696e20746865207260648201527f616e6765205b302c203130305d00000000000000000000000000000000000000608482015260a401610fd9565b60008167ffffffffffffffff16116120085760405162461bcd60e51b815260206004820152604560248201527f4d6f7665642066756e6473207377656570207472616e73616374696f6e206d6160448201527f7820746f74616c20666565206d7573742062652067726561746572207468616e60648201527f207a65726f000000000000000000000000000000000000000000000000000000608482015260a401610fd9565b60088701805467ffffffffffffffff8881166fffffffffffffffffffffffffffffffff199092168217600160401b898316908102919091176fffffffffffffffffffffffffffffffff16600160801b63ffffffff8a169081026001600160a01b031691909117600160a01b6bffffffffffffffffffffffff8a169081029190911790955560098c01879055600a8c01805467ffffffffffffffff191693871693841790556040805194855260208501929092529083015260608201929092526080810184905260a08101919091527f52ccbbed9d26b67ca026d54f8fe61cca76c333edad9725d266a2ac667659c73f9060c0015b60405180910390a150505050505050565b8567ffffffffffffffff168567ffffffffffffffff16116121bc5760405162461bcd60e51b815260206004820152605960248201527f57616c6c6574206372656174696f6e206d6178696d756d204254432062616c6160448201527f6e6365206d7573742062652067726561746572207468616e207468652063726560648201527f6174696f6e206d696e696d756d204254432062616c616e636500000000000000608482015260a401610fd9565b60008467ffffffffffffffff161161223c5760405162461bcd60e51b815260206004820152603c60248201527f57616c6c657420636c6f73757265206d696e696d756d204254432062616c616e60448201527f6365206d7573742062652067726561746572207468616e207a65726f000000006064820152608401610fd9565b60008267ffffffffffffffff16116122bc5760405162461bcd60e51b815260206004820152603560248201527f57616c6c6574206d6178696d756d20425443207472616e73666572206d75737460448201527f2062652067726561746572207468616e207a65726f00000000000000000000006064820152608401610fd9565b60008163ffffffff16116123385760405162461bcd60e51b815260206004820152602f60248201527f57616c6c657420636c6f73696e6720706572696f64206d75737420626520677260448201527f6561746572207468616e207a65726f00000000000000000000000000000000006064820152608401610fd9565b868860180160006101000a81548163ffffffff021916908363ffffffff160217905550858860180160046101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508488601801600c6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550838860180160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508288601801601c6101000a81548163ffffffff021916908363ffffffff160217905550818860190160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508088601a0160006101000a81548163ffffffff021916908363ffffffff1602179055507fc7d3a9af08692aeae771c329fddd95c7237a9f76fec996325f3959eeff07d4ac878787878787876040516124cb979695949392919063ffffffff978816815267ffffffffffffffff968716602082015294861660408601529285166060850152908516608084015290921660a0820152911660c082015260e00190565b60405180910390a15050505050505050565b60008667ffffffffffffffff161161255d5760405162461bcd60e51b815260206004820152603360248201527f526564656d7074696f6e2064757374207468726573686f6c64206d757374206260448201527f652067726561746572207468616e207a65726f000000000000000000000000006064820152608401610fd9565b60008567ffffffffffffffff16116125dd5760405162461bcd60e51b815260206004820152603960248201527f526564656d7074696f6e207472656173757279206665652064697669736f722060448201527f6d7573742062652067726561746572207468616e207a65726f000000000000006064820152608401610fd9565b60008467ffffffffffffffff161161265d5760405162461bcd60e51b815260206004820152603860248201527f526564656d7074696f6e207472616e73616374696f6e206d617820666565206d60448201527f7573742062652067726561746572207468616e207a65726f00000000000000006064820152608401610fd9565b600083116126d35760405162461bcd60e51b815260206004820152602c60248201527f526564656d7074696f6e2074696d656f7574206d75737420626520677265617460448201527f6572207468616e207a65726f00000000000000000000000000000000000000006064820152608401610fd9565b60648111156127705760405162461bcd60e51b815260206004820152604b60248201527f526564656d7074696f6e2074696d656f7574206e6f746966696572207265776160448201527f7264206d756c7469706c696572206d75737420626520696e207468652072616e60648201527f6765205b302c203130305d000000000000000000000000000000000000000000608482015260a401610fd9565b600c8701805467ffffffffffffffff8881166fffffffffffffffffffffffffffffffff199092168217600160401b898316908102919091177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16600160801b92891692830217909355600d8a01869055600e8a0180546001600160601b0319166bffffffffffffffffffffffff8716908117909155600f8b018590556040805193845260208401949094529282015260608101859052608081019190915260a081018290527f944cd06e316cc3da4159300dd41ab23416c89a5136c41fa79d57fe8a34bcc10f9060c0016120fc565b600083116128d55760405162461bcd60e51b815260206004820152603860248201527f4672617564206368616c6c656e6765206465666561742074696d656f7574206d60448201527f7573742062652067726561746572207468616e207a65726f00000000000000006064820152608401610fd9565b606481111561294c5760405162461bcd60e51b815260206004820152603e60248201527f4672617564206e6f74696669657220726577617264206d756c7469706c69657260448201527f206d75737420626520696e207468652072616e6765205b302c203130305d00006064820152608401610fd9565b60128501849055601385018390556014850180546001600160601b0319166bffffffffffffffffffffffff841690811790915560158601829055604080518681526020810186905290810191909152606081018290527fd0d6d92441fbb139a023c9c62586dbd767824f37869c45da6443fc3aef64194f9060800160405180910390a15050505050565b6001600160601b031981166000908152601b83016020526040902060036002820154600160c01b900460ff166005811115612a1357612a13613538565b14612a865760405162461bcd60e51b815260206004820152602560248201527f45434453412077616c6c6574206d75737420626520696e20436c6f73696e672060448201527f73746174650000000000000000000000000000000000000000000000000000006064820152608401610fd9565b601a8301546002820154612aaa9163ffffffff90811691600160801b900416613c6f565b63ffffffff164211612b245760405162461bcd60e51b815260206004820152602260248201527f436c6f73696e6720706572696f6420686173206e6f7420656c6170736564207960448201527f65740000000000000000000000000000000000000000000000000000000000006064820152608401610fd9565b610fef8383612ba7565b600080546001600160a01b038381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b6001600160601b031981166000818152601b840160205260408082206002810180547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff167804000000000000000000000000000000000000000000000000179055805491519093927f47b159947c3066cb253f60e8f046cfd747411788a545cb189679e3fa1467b28d91a3600283015481546040517f343bb9270000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163343bb92791612c819160040190815260200190565b600060405180830381600087803b158015612c9b57600080fd5b505af115801561119a573d6000803e3d6000fd5b600060208284031215612cc157600080fd5b5035919050565b80356001600160601b031981168114612ce057600080fd5b919050565b600060608284031215612cf757600080fd5b50919050565b60008060808385031215612d1057600080fd5b612d1983612cc8565b9150612d288460208501612ce5565b90509250929050565b803567ffffffffffffffff81168114612ce057600080fd5b600080600060608486031215612d5e57600080fd5b612d6784612d31565b9250612d7560208501612d31565b9150612d8360408501612d31565b90509250925092565b600060808284031215612cf757600080fd5b60008060008060c08587031215612db457600080fd5b843567ffffffffffffffff80821115612dcc57600080fd5b612dd888838901612d8c565b95506020870135915080821115612dee57600080fd5b50612dfb87828801612ce5565b935050612e0b8660408701612ce5565b9150612e1960a08601612cc8565b905092959194509250565b60008083601f840112612e3657600080fd5b50813567ffffffffffffffff811115612e4e57600080fd5b6020830191508360208260051b8501011115612e6957600080fd5b9250929050565b60008083601f840112612e8257600080fd5b50813567ffffffffffffffff811115612e9a57600080fd5b602083019150836020828501011115612e6957600080fd5b600080600080600060608688031215612eca57600080fd5b612ed386612cc8565b9450602086013567ffffffffffffffff80821115612ef057600080fd5b612efc89838a01612e24565b90965094506040880135915080821115612f1557600080fd5b50612f2288828901612e70565b969995985093965092949392505050565b600080600060608486031215612f4857600080fd5b505081359360208301359350604090920135919050565b600080600080600060608688031215612f7757600080fd5b853567ffffffffffffffff80821115612f8f57600080fd5b612f9b89838a01612e70565b90975095506020880135915080821115612fb457600080fd5b50612fc188828901612e24565b96999598509660400135949350505050565b803563ffffffff81168114612ce057600080fd5b80356bffffffffffffffffffffffff81168114612ce057600080fd5b60008060008060008060c0878903121561301c57600080fd5b61302587612d31565b955061303360208801612d31565b945061304160408801612fd3565b935061304f60608801612fe7565b92506080870135915061306460a08801612d31565b90509295509295509295565b60008082840361010081121561308557600080fd5b833567ffffffffffffffff81111561309c57600080fd5b6130a886828701612d8c565b93505060e0601f19820112156130bd57600080fd5b506020830190509250929050565b80356001600160a01b0381168114612ce057600080fd5b80358015158114612ce057600080fd5b6000806040838503121561310557600080fd5b61310e836130cb565b9150612d28602084016130e2565b60008060008060a0858703121561313257600080fd5b843567ffffffffffffffff81111561314957600080fd5b61315587828801612e70565b90955093505060208501359150612e198660408701612ce5565b60008060008060006060868803121561318757600080fd5b853567ffffffffffffffff8082111561319f57600080fd5b6131ab89838a01612e70565b909750955060208801359150808211156131c457600080fd5b506131d188828901612e70565b90945092506131e49050604087016130e2565b90509295509295909350565b600080600080600080600060e0888a03121561320b57600080fd5b61321488612fd3565b965061322260208901612d31565b955061323060408901612d31565b945061323e60608901612d31565b935061324c60808901612fd3565b925061325a60a08901612d31565b915061326860c08901612fd3565b905092959891949750929550565b600080600060a0848603121561328b57600080fd5b833567ffffffffffffffff808211156132a357600080fd5b6132af87838801612d8c565b945060208601359150808211156132c557600080fd5b506132d286828701612ce5565b925050612d838560408601612ce5565b6000806000604084860312156132f757600080fd5b61330084612cc8565b9250602084013567ffffffffffffffff81111561331c57600080fd5b61332886828701612e24565b9497909650939450505050565b60006060828403121561334757600080fd5b6133518383612ce5565b9392505050565b600080600080600080600060e0888a03121561337357600080fd5b61337c88612cc8565b965061338b8960208a01612ce5565b9550608088013567ffffffffffffffff808211156133a857600080fd5b6133b48b838c01612e24565b909750955060a08a0135945060c08a01359150808211156133d457600080fd5b506133e18a828b01612e24565b989b979a50959850939692959293505050565b60008060008060008060c0878903121561340d57600080fd5b61341687612d31565b955061342460208801612d31565b945061343260408801612d31565b93506060870135925061344760808801612fe7565b915060a087013590509295509295509295565b6000806000806080858703121561347057600080fd5b843593506020850135925061348760408601612fe7565b9396929550929360600135925050565b6000602082840312156134a957600080fd5b61335182612cc8565b6000602082840312156134c457600080fd5b613351826130cb565b600080600080600060c086880312156134e557600080fd5b6134ee86612cc8565b94506134fd8760208801612ce5565b9350608086013567ffffffffffffffff81111561351957600080fd5b61352588828901612e70565b90945092506131e4905060a08701612d31565b634e487b7160e01b600052602160045260246000fd5b6006811061356c57634e487b7160e01b600052602160045260246000fd5b9052565b600061012082019050825182526020830151602083015267ffffffffffffffff604084015116604083015263ffffffff606084015116606083015260808301516135c2608084018263ffffffff169052565b5060a08301516135da60a084018263ffffffff169052565b5060c08301516135f260c084018263ffffffff169052565b5060e083015161360560e084018261354e565b5061010092830151919092015290565b8035825263ffffffff61362a60208301612fd3565b16602083015267ffffffffffffffff61364560408301612d31565b1660408301525050565b8381526001600160601b03198316602082015260a081016136736040830184613615565b949350505050565b80357fffffffff0000000000000000000000000000000000000000000000000000000081168114612ce057600080fd5b6000808335601e198436030181126136c257600080fd5b830160208101925035905067ffffffffffffffff8111156136e257600080fd5b803603831315612e6957600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60007fffffffff00000000000000000000000000000000000000000000000000000000806137478461367b565b16845261375760208401846136ab565b6080602087015261376c6080870182846136f1565b91505061377c60408501856136ab565b868303604088015261378f8382846136f1565b92505050816137a06060860161367b565b166060860152809250505092915050565b60006137bd82836136ab565b606085526137cf6060860182846136f1565b915050602083013560208501526137e960408401846136ab565b85830360408701526137fc8382846136f1565b9695505050505050565b85815260e06020820152600061381f60e083018761371a565b828103604084015261383181876137b1565b9150506138416060830185613615565b6bffffffffffffffffffffffff19831660c08301529695505050505050565b8183526000602080850194508260005b858110156138995763ffffffff61388683612fd3565b1687529582019590820190600101613870565b509495945050505050565b8681526bffffffffffffffffffffffff19861660208201526080604082015260006138d3608083018688613860565b82810360608401526138e68185876136f1565b9998505050505050505050565b86815260806020820152600061390d6080830187896136f1565b8281036040840152613920818688613860565b915050826060830152979650505050505050565b600061012085835280602084015261394e8184018661371a565b91505063ffffffff61395f84612fd3565b1660408301526001600160a01b03613979602085016130cb565b16606083015260408301357fffffffffffffffff000000000000000000000000000000000000000000000000811681146139b257600080fd5b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301526139e560608401612cc8565b6001600160601b03191660a0830152613a0060808401612cc8565b6001600160601b03191660c0830152613a1b60a0840161367b565b7fffffffff000000000000000000000000000000000000000000000000000000001660e0830152613a4e60c084016130cb565b6001600160a01b03811661010084015250949350505050565b85815260c060208201526000613a8160c0830186886136f1565b90508360408301528235606083015260208301356080830152604083013560ff8116808214613aaf57600080fd5b8060a085015250509695505050505050565b868152608060208201526000613adb6080830187896136f1565b8281036040840152613aee8186886136f1565b9150508215156060830152979650505050505050565b84815260c060208201526000613b1d60c083018661371a565b8281036040840152613b2f81866137b1565b915050613b3f6060830184613615565b95945050505050565b8481526bffffffffffffffffffffffff19841660208201526060604082015260006137fc606083018486613860565b828152608081016133516020830184613615565b60006101008a835260206bffffffffffffffffffffffff19808c1682860152613bb7604086018c613615565b8260a0860152613bca8386018a8c613860565b60c0860189905285810360e0870152868152879350820160005b87811015613c095782613bf686612cc8565b1682529383019390830190600101613be4565b509d9c50505050505050505050505050565b8681526001600160601b031986166020820152613c3b6040820186613615565b60e060a08201526000613c5260e0830185876136f1565b905067ffffffffffffffff831660c0830152979650505050505050565b600063ffffffff808316818516808303821115613c9c57634e487b7160e01b600052601160045260246000fd5b0194935050505056fea2646970667358221220bc72de4200b7cc7a0fea34470d58ea8b624eef0f054fdff0477c5af8db5e77c464736f6c63430008090033",
2107
2267
  "linkReferences": {
2108
2268
  "contracts/bridge/Deposit.sol": {
2109
2269
  "Deposit": [
2110
2270
  {
2111
2271
  "length": 20,
2112
- "start": 5800
2272
+ "start": 5929
2273
+ }
2274
+ ]
2275
+ },
2276
+ "contracts/bridge/DepositSweep.sol": {
2277
+ "DepositSweep": [
2278
+ {
2279
+ "length": 20,
2280
+ "start": 6486
2113
2281
  }
2114
2282
  ]
2115
2283
  },
@@ -2117,15 +2285,15 @@
2117
2285
  "Fraud": [
2118
2286
  {
2119
2287
  "length": 20,
2120
- "start": 5537
2288
+ "start": 5647
2121
2289
  },
2122
2290
  {
2123
2291
  "length": 20,
2124
- "start": 6070
2292
+ "start": 6199
2125
2293
  },
2126
2294
  {
2127
2295
  "length": 20,
2128
- "start": 6159
2296
+ "start": 6288
2129
2297
  }
2130
2298
  ]
2131
2299
  },
@@ -2133,19 +2301,23 @@
2133
2301
  "MovingFunds": [
2134
2302
  {
2135
2303
  "length": 20,
2136
- "start": 4634
2304
+ "start": 4966
2137
2305
  },
2138
2306
  {
2139
2307
  "length": 20,
2140
- "start": 5105
2308
+ "start": 5215
2141
2309
  },
2142
2310
  {
2143
2311
  "length": 20,
2144
- "start": 6357
2312
+ "start": 6573
2145
2313
  },
2146
2314
  {
2147
2315
  "length": 20,
2148
- "start": 6673
2316
+ "start": 6896
2317
+ },
2318
+ {
2319
+ "length": 20,
2320
+ "start": 7353
2149
2321
  }
2150
2322
  ]
2151
2323
  },
@@ -2153,23 +2325,15 @@
2153
2325
  "Redemption": [
2154
2326
  {
2155
2327
  "length": 20,
2156
- "start": 5247
2328
+ "start": 5357
2157
2329
  },
2158
2330
  {
2159
2331
  "length": 20,
2160
- "start": 6931
2332
+ "start": 7264
2161
2333
  },
2162
2334
  {
2163
2335
  "length": 20,
2164
- "start": 7257
2165
- }
2166
- ]
2167
- },
2168
- "contracts/bridge/Sweep.sol": {
2169
- "Sweep": [
2170
- {
2171
- "length": 20,
2172
- "start": 5713
2336
+ "start": 7677
2173
2337
  }
2174
2338
  ]
2175
2339
  },
@@ -2177,19 +2341,19 @@
2177
2341
  "Wallets": [
2178
2342
  {
2179
2343
  "length": 20,
2180
- "start": 5414
2344
+ "start": 5524
2181
2345
  },
2182
2346
  {
2183
2347
  "length": 20,
2184
- "start": 5628
2348
+ "start": 5844
2185
2349
  },
2186
2350
  {
2187
2351
  "length": 20,
2188
- "start": 6444
2352
+ "start": 6660
2189
2353
  },
2190
2354
  {
2191
2355
  "length": 20,
2192
- "start": 6599
2356
+ "start": 6822
2193
2357
  }
2194
2358
  ]
2195
2359
  }
@@ -2199,7 +2363,15 @@
2199
2363
  "Deposit": [
2200
2364
  {
2201
2365
  "length": 20,
2202
- "start": 4730
2366
+ "start": 4837
2367
+ }
2368
+ ]
2369
+ },
2370
+ "contracts/bridge/DepositSweep.sol": {
2371
+ "DepositSweep": [
2372
+ {
2373
+ "length": 20,
2374
+ "start": 5394
2203
2375
  }
2204
2376
  ]
2205
2377
  },
@@ -2207,15 +2379,15 @@
2207
2379
  "Fraud": [
2208
2380
  {
2209
2381
  "length": 20,
2210
- "start": 4467
2382
+ "start": 4555
2211
2383
  },
2212
2384
  {
2213
2385
  "length": 20,
2214
- "start": 5000
2386
+ "start": 5107
2215
2387
  },
2216
2388
  {
2217
2389
  "length": 20,
2218
- "start": 5089
2390
+ "start": 5196
2219
2391
  }
2220
2392
  ]
2221
2393
  },
@@ -2223,19 +2395,23 @@
2223
2395
  "MovingFunds": [
2224
2396
  {
2225
2397
  "length": 20,
2226
- "start": 3564
2398
+ "start": 3874
2399
+ },
2400
+ {
2401
+ "length": 20,
2402
+ "start": 4123
2227
2403
  },
2228
2404
  {
2229
2405
  "length": 20,
2230
- "start": 4035
2406
+ "start": 5481
2231
2407
  },
2232
2408
  {
2233
2409
  "length": 20,
2234
- "start": 5287
2410
+ "start": 5804
2235
2411
  },
2236
2412
  {
2237
2413
  "length": 20,
2238
- "start": 5603
2414
+ "start": 6261
2239
2415
  }
2240
2416
  ]
2241
2417
  },
@@ -2243,23 +2419,15 @@
2243
2419
  "Redemption": [
2244
2420
  {
2245
2421
  "length": 20,
2246
- "start": 4177
2422
+ "start": 4265
2247
2423
  },
2248
2424
  {
2249
2425
  "length": 20,
2250
- "start": 5861
2426
+ "start": 6172
2251
2427
  },
2252
2428
  {
2253
2429
  "length": 20,
2254
- "start": 6187
2255
- }
2256
- ]
2257
- },
2258
- "contracts/bridge/Sweep.sol": {
2259
- "Sweep": [
2260
- {
2261
- "length": 20,
2262
- "start": 4643
2430
+ "start": 6585
2263
2431
  }
2264
2432
  ]
2265
2433
  },
@@ -2267,19 +2435,19 @@
2267
2435
  "Wallets": [
2268
2436
  {
2269
2437
  "length": 20,
2270
- "start": 4344
2438
+ "start": 4432
2271
2439
  },
2272
2440
  {
2273
2441
  "length": 20,
2274
- "start": 4558
2442
+ "start": 4752
2275
2443
  },
2276
2444
  {
2277
2445
  "length": 20,
2278
- "start": 5374
2446
+ "start": 5568
2279
2447
  },
2280
2448
  {
2281
2449
  "length": 20,
2282
- "start": 5529
2450
+ "start": 5730
2283
2451
  }
2284
2452
  ]
2285
2453
  }