@layerzerolabs/lz-evm-sdk-v2 2.0.16 → 2.0.17

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 (107) hide show
  1. package/artifacts/contracts/Executor.sol/Executor.json +2 -2
  2. package/artifacts/contracts/ExecutorFeeLib.sol/ExecutorFeeLib.json +2 -7
  3. package/artifacts/contracts/interfaces/IExecutorFeeLib.sol/IExecutorFeeLib.json +0 -5
  4. package/deployments/avalanche-testnet/AxelarDVNAdapterFeeLib.json +10 -10
  5. package/deployments/avalanche-testnet/AxelarDVNAdapterFeeLib_Implementation.json +40 -40
  6. package/deployments/blast-testnet/DVN.json +1929 -0
  7. package/deployments/blast-testnet/DVNFeeLib.json +387 -0
  8. package/deployments/blast-testnet/EndpointV2.json +3000 -0
  9. package/deployments/blast-testnet/Executor.json +1532 -0
  10. package/deployments/blast-testnet/ExecutorFeeLib.json +407 -0
  11. package/deployments/blast-testnet/ExecutorProxyAdmin.json +283 -0
  12. package/deployments/blast-testnet/Executor_Implementation.json +1591 -0
  13. package/deployments/{ethereum-sandbox-local/ReceiveUln301View.json → blast-testnet/Executor_Proxy.json} +189 -178
  14. package/deployments/{polygon-sandbox-local/LzExecutor.json → blast-testnet/PriceFeed.json} +408 -275
  15. package/deployments/blast-testnet/PriceFeedProxyAdmin.json +283 -0
  16. package/deployments/blast-testnet/PriceFeed_Implementation.json +912 -0
  17. package/deployments/{ethereum-sandbox-local/LzExecutor_Proxy.json → blast-testnet/PriceFeed_Proxy.json} +37 -37
  18. package/deployments/blast-testnet/ReceiveUln301.json +1292 -0
  19. package/deployments/blast-testnet/ReceiveUln302.json +1006 -0
  20. package/deployments/blast-testnet/SendUln301.json +1569 -0
  21. package/deployments/blast-testnet/SendUln302.json +1527 -0
  22. package/deployments/blast-testnet/Treasury.json +412 -0
  23. package/deployments/blast-testnet/TreasuryFeeHandler.json +125 -0
  24. package/deployments/ethereum-sandbox-local/DVN.json +76 -76
  25. package/deployments/ethereum-sandbox-local/DVNFeeLib.json +23 -23
  26. package/deployments/ethereum-sandbox-local/EndpointV2.json +150 -141
  27. package/deployments/ethereum-sandbox-local/Executor.json +86 -86
  28. package/deployments/ethereum-sandbox-local/ExecutorFeeLib.json +33 -38
  29. package/deployments/ethereum-sandbox-local/ExecutorProxyAdmin.json +17 -17
  30. package/deployments/ethereum-sandbox-local/Executor_Implementation.json +61 -61
  31. package/deployments/ethereum-sandbox-local/Executor_Proxy.json +66 -66
  32. package/deployments/ethereum-sandbox-local/NonceContractMock.json +6 -6
  33. package/deployments/ethereum-sandbox-local/PriceFeed.json +18 -18
  34. package/deployments/ethereum-sandbox-local/PriceFeedProxyAdmin.json +5 -5
  35. package/deployments/ethereum-sandbox-local/PriceFeed_Implementation.json +44 -44
  36. package/deployments/ethereum-sandbox-local/PriceFeed_Proxy.json +5 -5
  37. package/deployments/ethereum-sandbox-local/ReceiveUln301.json +98 -126
  38. package/deployments/ethereum-sandbox-local/ReceiveUln302.json +62 -114
  39. package/deployments/ethereum-sandbox-local/SendUln301.json +112 -112
  40. package/deployments/ethereum-sandbox-local/SendUln302.json +109 -109
  41. package/deployments/ethereum-sandbox-local/SimpleMessageLib.json +23 -23
  42. package/deployments/ethereum-sandbox-local/Treasury.json +21 -21
  43. package/deployments/ethereum-sandbox-local/TreasuryFeeHandler.json +12 -12
  44. package/deployments/{ethereum-sandbox-local/LzExecutor.json → joc-testnet/PriceFeed.json} +408 -275
  45. package/deployments/joc-testnet/PriceFeedProxyAdmin.json +283 -0
  46. package/deployments/joc-testnet/PriceFeed_Implementation.json +912 -0
  47. package/deployments/{polygon-sandbox-local/LzExecutor_Proxy.json → joc-testnet/PriceFeed_Proxy.json} +37 -37
  48. package/deployments/polygon-sandbox-local/DVN.json +76 -76
  49. package/deployments/polygon-sandbox-local/DVNFeeLib.json +23 -23
  50. package/deployments/polygon-sandbox-local/EndpointV2.json +150 -141
  51. package/deployments/polygon-sandbox-local/Executor.json +86 -86
  52. package/deployments/polygon-sandbox-local/ExecutorFeeLib.json +33 -38
  53. package/deployments/polygon-sandbox-local/ExecutorProxyAdmin.json +17 -17
  54. package/deployments/polygon-sandbox-local/Executor_Implementation.json +61 -61
  55. package/deployments/polygon-sandbox-local/Executor_Proxy.json +66 -66
  56. package/deployments/polygon-sandbox-local/NonceContractMock.json +6 -6
  57. package/deployments/polygon-sandbox-local/PriceFeed.json +18 -18
  58. package/deployments/polygon-sandbox-local/PriceFeedProxyAdmin.json +5 -5
  59. package/deployments/polygon-sandbox-local/PriceFeed_Implementation.json +44 -44
  60. package/deployments/polygon-sandbox-local/PriceFeed_Proxy.json +5 -5
  61. package/deployments/polygon-sandbox-local/ReceiveUln301.json +98 -126
  62. package/deployments/polygon-sandbox-local/ReceiveUln302.json +62 -114
  63. package/deployments/polygon-sandbox-local/SendUln301.json +112 -112
  64. package/deployments/polygon-sandbox-local/SendUln302.json +109 -109
  65. package/deployments/polygon-sandbox-local/SimpleMessageLib.json +23 -23
  66. package/deployments/polygon-sandbox-local/Treasury.json +21 -21
  67. package/deployments/polygon-sandbox-local/TreasuryFeeHandler.json +12 -12
  68. package/deployments/rarible-mainnet/PriceFeed.json +891 -0
  69. package/deployments/rarible-mainnet/PriceFeedProxyAdmin.json +284 -0
  70. package/deployments/rarible-mainnet/PriceFeed_Implementation.json +913 -0
  71. package/deployments/rarible-mainnet/PriceFeed_Proxy.json +245 -0
  72. package/dist/{index-3seuukWJ.d.mts → index-htDjTX1I.d.mts} +2 -10
  73. package/dist/{index-3seuukWJ.d.ts → index-htDjTX1I.d.ts} +2 -10
  74. package/dist/index.browser.cjs +2 -12
  75. package/dist/index.browser.cjs.map +1 -1
  76. package/dist/index.browser.d.mts +1 -1
  77. package/dist/index.browser.d.ts +1 -1
  78. package/dist/index.browser.mjs +2 -12
  79. package/dist/index.browser.mjs.map +1 -1
  80. package/dist/index.cjs +2 -12
  81. package/dist/index.cjs.map +1 -1
  82. package/dist/index.d.mts +1 -1
  83. package/dist/index.d.ts +1 -1
  84. package/dist/index.mjs +2 -12
  85. package/dist/index.mjs.map +1 -1
  86. package/package.json +8 -8
  87. package/deployments/ethereum-sandbox-local/DefaultProxyAdmin.json +0 -258
  88. package/deployments/ethereum-sandbox-local/EndpointV2View.json +0 -435
  89. package/deployments/ethereum-sandbox-local/EndpointV2View_Implementation.json +0 -313
  90. package/deployments/ethereum-sandbox-local/EndpointV2View_Proxy.json +0 -230
  91. package/deployments/ethereum-sandbox-local/LzExecutor_Implementation.json +0 -703
  92. package/deployments/ethereum-sandbox-local/ReceiveUln301View_Implementation.json +0 -231
  93. package/deployments/ethereum-sandbox-local/ReceiveUln301View_Proxy.json +0 -230
  94. package/deployments/ethereum-sandbox-local/ReceiveUln302View.json +0 -478
  95. package/deployments/ethereum-sandbox-local/ReceiveUln302View_Implementation.json +0 -384
  96. package/deployments/ethereum-sandbox-local/ReceiveUln302View_Proxy.json +0 -230
  97. package/deployments/polygon-sandbox-local/DefaultProxyAdmin.json +0 -258
  98. package/deployments/polygon-sandbox-local/EndpointV2View.json +0 -435
  99. package/deployments/polygon-sandbox-local/EndpointV2View_Implementation.json +0 -313
  100. package/deployments/polygon-sandbox-local/EndpointV2View_Proxy.json +0 -230
  101. package/deployments/polygon-sandbox-local/LzExecutor_Implementation.json +0 -703
  102. package/deployments/polygon-sandbox-local/ReceiveUln301View.json +0 -354
  103. package/deployments/polygon-sandbox-local/ReceiveUln301View_Implementation.json +0 -231
  104. package/deployments/polygon-sandbox-local/ReceiveUln301View_Proxy.json +0 -230
  105. package/deployments/polygon-sandbox-local/ReceiveUln302View.json +0 -478
  106. package/deployments/polygon-sandbox-local/ReceiveUln302View_Implementation.json +0 -384
  107. package/deployments/polygon-sandbox-local/ReceiveUln302View_Proxy.json +0 -230
@@ -19,88 +19,88 @@
19
19
  },
20
20
  {
21
21
  "inputs": [],
22
- "name": "AddressCast_InvalidSizeForAddress",
22
+ "name": "AddressSizeAlreadySet",
23
23
  "type": "error"
24
24
  },
25
25
  {
26
26
  "inputs": [],
27
- "name": "AddressSizeConfig_AddressSizeAlreadySet",
27
+ "name": "AtLeastOneDVN",
28
28
  "type": "error"
29
29
  },
30
30
  {
31
31
  "inputs": [],
32
- "name": "AddressSizeConfig_InvalidAddressSize",
32
+ "name": "InvalidAddressSize",
33
33
  "type": "error"
34
34
  },
35
35
  {
36
- "inputs": [],
37
- "name": "LZ_MessageLib_InvalidExecutor",
36
+ "inputs": [
37
+ {
38
+ "internalType": "uint256",
39
+ "name": "configType",
40
+ "type": "uint256"
41
+ }
42
+ ],
43
+ "name": "InvalidConfigType",
38
44
  "type": "error"
39
45
  },
40
46
  {
41
47
  "inputs": [],
42
- "name": "LZ_MessageLib_OnlyEndpoint",
48
+ "name": "InvalidConfirmations",
43
49
  "type": "error"
44
50
  },
45
51
  {
46
52
  "inputs": [],
47
- "name": "LZ_MessageLib_OnlyExecutor",
53
+ "name": "InvalidEid",
48
54
  "type": "error"
49
55
  },
50
56
  {
51
57
  "inputs": [],
52
- "name": "LZ_ULN_AtLeastOneDVN",
58
+ "name": "InvalidExecutor",
53
59
  "type": "error"
54
60
  },
55
61
  {
56
- "inputs": [
57
- {
58
- "internalType": "uint256",
59
- "name": "configType",
60
- "type": "uint256"
61
- }
62
- ],
63
- "name": "LZ_ULN_InvalidConfigType",
62
+ "inputs": [],
63
+ "name": "InvalidOptionalDVNCount",
64
64
  "type": "error"
65
65
  },
66
66
  {
67
67
  "inputs": [],
68
- "name": "LZ_ULN_InvalidConfirmations",
68
+ "name": "InvalidOptionalDVNThreshold",
69
69
  "type": "error"
70
70
  },
71
71
  {
72
72
  "inputs": [],
73
- "name": "LZ_ULN_InvalidEid",
73
+ "name": "InvalidPacketHeader",
74
74
  "type": "error"
75
75
  },
76
76
  {
77
77
  "inputs": [],
78
- "name": "LZ_ULN_InvalidOptionalDVNCount",
78
+ "name": "InvalidPacketVersion",
79
79
  "type": "error"
80
80
  },
81
81
  {
82
82
  "inputs": [],
83
- "name": "LZ_ULN_InvalidOptionalDVNThreshold",
83
+ "name": "InvalidRequiredDVNCount",
84
84
  "type": "error"
85
85
  },
86
86
  {
87
87
  "inputs": [],
88
- "name": "LZ_ULN_InvalidPacketHeader",
88
+ "name": "InvalidSizeForAddress",
89
89
  "type": "error"
90
90
  },
91
91
  {
92
92
  "inputs": [],
93
- "name": "LZ_ULN_InvalidPacketVersion",
93
+ "name": "OnlyEndpoint",
94
94
  "type": "error"
95
95
  },
96
96
  {
97
97
  "inputs": [],
98
- "name": "LZ_ULN_InvalidRequiredDVNCount",
98
+ "name": "OnlyExecutor",
99
99
  "type": "error"
100
100
  },
101
101
  {
102
102
  "inputs": [],
103
- "name": "LZ_ULN_Unsorted",
103
+ "name": "Unsorted",
104
104
  "type": "error"
105
105
  },
106
106
  {
@@ -111,12 +111,12 @@
111
111
  "type": "uint32"
112
112
  }
113
113
  ],
114
- "name": "LZ_ULN_UnsupportedEid",
114
+ "name": "UnsupportedEid",
115
115
  "type": "error"
116
116
  },
117
117
  {
118
118
  "inputs": [],
119
- "name": "LZ_ULN_Verifying",
119
+ "name": "Verifying",
120
120
  "type": "error"
121
121
  },
122
122
  {
@@ -444,24 +444,6 @@
444
444
  "stateMutability": "view",
445
445
  "type": "function"
446
446
  },
447
- {
448
- "inputs": [
449
- {
450
- "internalType": "bytes",
451
- "name": "_packetHeader",
452
- "type": "bytes"
453
- },
454
- {
455
- "internalType": "uint32",
456
- "name": "_localEid",
457
- "type": "uint32"
458
- }
459
- ],
460
- "name": "assertHeader",
461
- "outputs": [],
462
- "stateMutability": "pure",
463
- "type": "function"
464
- },
465
447
  {
466
448
  "inputs": [
467
449
  {
@@ -499,6 +481,30 @@
499
481
  "stateMutability": "view",
500
482
  "type": "function"
501
483
  },
484
+ {
485
+ "inputs": [
486
+ {
487
+ "internalType": "bytes",
488
+ "name": "_packetHeader",
489
+ "type": "bytes"
490
+ },
491
+ {
492
+ "internalType": "bytes32",
493
+ "name": "_payloadHash",
494
+ "type": "bytes32"
495
+ }
496
+ ],
497
+ "name": "executable",
498
+ "outputs": [
499
+ {
500
+ "internalType": "enum ExecutionState",
501
+ "name": "",
502
+ "type": "uint8"
503
+ }
504
+ ],
505
+ "stateMutability": "view",
506
+ "type": "function"
507
+ },
502
508
  {
503
509
  "inputs": [
504
510
  {
@@ -886,46 +892,9 @@
886
892
  {
887
893
  "inputs": [
888
894
  {
889
- "components": [
890
- {
891
- "internalType": "uint64",
892
- "name": "confirmations",
893
- "type": "uint64"
894
- },
895
- {
896
- "internalType": "uint8",
897
- "name": "requiredDVNCount",
898
- "type": "uint8"
899
- },
900
- {
901
- "internalType": "uint8",
902
- "name": "optionalDVNCount",
903
- "type": "uint8"
904
- },
905
- {
906
- "internalType": "uint8",
907
- "name": "optionalDVNThreshold",
908
- "type": "uint8"
909
- },
910
- {
911
- "internalType": "address[]",
912
- "name": "requiredDVNs",
913
- "type": "address[]"
914
- },
915
- {
916
- "internalType": "address[]",
917
- "name": "optionalDVNs",
918
- "type": "address[]"
919
- }
920
- ],
921
- "internalType": "struct UlnConfig",
922
- "name": "_config",
923
- "type": "tuple"
924
- },
925
- {
926
- "internalType": "bytes32",
927
- "name": "_headerHash",
928
- "type": "bytes32"
895
+ "internalType": "bytes",
896
+ "name": "_packetHeader",
897
+ "type": "bytes"
929
898
  },
930
899
  {
931
900
  "internalType": "bytes32",
@@ -936,9 +905,9 @@
936
905
  "name": "verifiable",
937
906
  "outputs": [
938
907
  {
939
- "internalType": "bool",
908
+ "internalType": "enum VerificationState",
940
909
  "name": "",
941
- "type": "bool"
910
+ "type": "uint8"
942
911
  }
943
912
  ],
944
913
  "stateMutability": "view",
@@ -991,21 +960,21 @@
991
960
  "type": "function"
992
961
  }
993
962
  ],
994
- "transactionHash": "0x4fc32cd71e053cf9661cba9da3703fb578e26d2a6bf3a5af43448afc46e60de7",
963
+ "transactionHash": "0x33f99156f8ae4fd9069087c0a3d3e717e7144462142b6b93cf2da4f4a3333b5a",
995
964
  "receipt": {
996
965
  "to": null,
997
966
  "from": "0x70997970C51812dc3A010C7d01b50e0d17dc79C8",
998
967
  "contractAddress": "0x381445710b5e73d34aF196c53A3D5cDa58EDBf7A",
999
968
  "transactionIndex": 0,
1000
- "gasUsed": "2870534",
969
+ "gasUsed": "2987436",
1001
970
  "logsBloom": "0x00000000000000000002000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000001000000000000000000000000000000000800020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000001000000000000000000000000000000",
1002
- "blockHash": "0x12c4de08c659601decbaf6d2bb61af93caaf9caab74f17d4962305d936ec92d5",
1003
- "transactionHash": "0x4fc32cd71e053cf9661cba9da3703fb578e26d2a6bf3a5af43448afc46e60de7",
971
+ "blockHash": "0x6d99cb8e5a2ad6c5aa44d4687dd55a17d0d9ae992c7f9d6d89ad2f6c778fc2d8",
972
+ "transactionHash": "0x33f99156f8ae4fd9069087c0a3d3e717e7144462142b6b93cf2da4f4a3333b5a",
1004
973
  "logs": [
1005
974
  {
1006
975
  "transactionIndex": 0,
1007
- "blockNumber": 46,
1008
- "transactionHash": "0x4fc32cd71e053cf9661cba9da3703fb578e26d2a6bf3a5af43448afc46e60de7",
976
+ "blockNumber": 43,
977
+ "transactionHash": "0x33f99156f8ae4fd9069087c0a3d3e717e7144462142b6b93cf2da4f4a3333b5a",
1009
978
  "address": "0x381445710b5e73d34aF196c53A3D5cDa58EDBf7A",
1010
979
  "topics": [
1011
980
  "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
@@ -1014,11 +983,11 @@
1014
983
  ],
1015
984
  "data": "0x",
1016
985
  "logIndex": 0,
1017
- "blockHash": "0x12c4de08c659601decbaf6d2bb61af93caaf9caab74f17d4962305d936ec92d5"
986
+ "blockHash": "0x6d99cb8e5a2ad6c5aa44d4687dd55a17d0d9ae992c7f9d6d89ad2f6c778fc2d8"
1018
987
  }
1019
988
  ],
1020
- "blockNumber": 46,
1021
- "cumulativeGasUsed": "2870534",
989
+ "blockNumber": 43,
990
+ "cumulativeGasUsed": "2987436",
1022
991
  "status": 1,
1023
992
  "byzantium": true
1024
993
  },
@@ -1027,9 +996,9 @@
1027
996
  20109
1028
997
  ],
1029
998
  "numDeployments": 1,
1030
- "solcInputHash": "206c0dde26401fe2fb94e875b1b843ad",
1031
- "bytecode": "0x60c06040523480156200001157600080fd5b50604051620033ea380380620033ea8339810160408190526200003491620000b2565b6001600160a01b03821660805263ffffffff811660a0528181620000583362000062565b5050505062000104565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008060408385031215620000c657600080fd5b82516001600160a01b0381168114620000de57600080fd5b602084015190925063ffffffff81168114620000f957600080fd5b809150509250929050565b60805160a0516132b9620001316000396000610f110152600081816110be0152611e3c01526132b96000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80636d26e5d0116100cd578063c40ff83511610081578063e65106f811610066578063e65106f8146103d5578063f2fde38b146103e8578063f8e1734c146103fb57600080fd5b8063c40ff8351461039f578063e084d952146103b257600080fd5b80638da5cb5b116100b25780638da5cb5b1461032d5780639653a7041461034b57806398678a111461035e57600080fd5b80636d26e5d014610312578063715018a61461032557600080fd5b806339e928a81161012457806343ea4fa91161010957806343ea4fa9146102bf57806352d2871f146102d257806354fd4d50146102f257600080fd5b806339e928a8146102475780633c782a521461025a57600080fd5b806329460b0b1161015557806329460b0b146101b95780632fed39ae146101cc57806339e3f9381461022757600080fd5b80630223536e146101715780630f8355c014610186575b600080fd5b61018461017f3660046123f7565b61040e565b005b6101a6610194366004612468565b60036020526000908152604090205481565b6040519081526020015b60405180910390f35b6101846101c7366004612483565b610420565b6102026101da366004612468565b60056020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b0565b61023a61023536600461251a565b610605565b6040516101b09190612613565b610184610255366004612626565b6107a7565b61029f610268366004612689565b600260209081526000938452604080852082529284528284209052825290205460ff811690610100900467ffffffffffffffff1682565b60408051921515835267ffffffffffffffff9091166020830152016101b0565b61023a6102cd36600461251a565b610902565b6102e56102e03660046126d4565b610cbc565b6040516101b09190612781565b6040805160038152600060208201526001918101919091526060016101b0565b610184610320366004612794565b610d74565b610184610e4d565b60005473ffffffffffffffffffffffffffffffffffffffff16610202565b61020261035936600461251a565b610e61565b61020261036c36600461251a565b600460209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff1681565b6101846103ad3660046127be565b610edc565b6103c56103c03660046129f3565b610eec565b60405190151581526020016101b0565b6101846103e3366004612a41565b610ef9565b6101846103f6366004612a8d565b611005565b610184610409366004612aaa565b6110bc565b61041a848484846111bd565b50505050565b6104286112d1565b60005b818110156105c7573683838381811061044657610446612b1b565b90506020028101906104589190612b4a565b905060ff6104696020830183612b88565b61047a906040810190602001612bbc565b60ff16036104b4576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff6104c36020830183612b88565b6104d4906060810190604001612bbc565b60ff160361050e576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff6105246020830183612b88565b610532906020810190612bd7565b67ffffffffffffffff1603610573576040517f503667ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105916105836020830183612b88565b61058c90612bf2565b611352565b6105be60006105a36020840184612468565b6105b06020850185612b88565b6105b990612bf2565b6113a3565b5060010161042b565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b56082826040516105f9929190612cb0565b60405180910390a15050565b6040805160c0810182526000808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff8316600090815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a0100000000000000000000909104166060820152928101805485518185028101850190965280865293949193608086019383018282801561072657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116106fb575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561079557602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161076a575b50505050508152505090505b92915050565b6107af6112d1565b60005b818110156108d057368383838181106107cd576107cd612b1b565b9050604002019050600073ffffffffffffffffffffffffffffffffffffffff168160200160208101906108009190612a8d565b73ffffffffffffffffffffffffffffffffffffffff160361084d576040517f20e9d05a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61085d6040820160208301612a8d565b6005600061086e6020850185612468565b63ffffffff168152602081019190915260400160002080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055506001016107b2565b507f2a2676897ce6724d11fb8016f9bcdfe9fe564bc3524411d5df7914aac78aeeb382826040516105f9929190612e4d565b6040805160c0810182526000808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff16806109b257825467ffffffffffffffff1684526109d1565b67ffffffffffffffff818116146109d15767ffffffffffffffff811684525b815468010000000000000000900460ff16610a8757825468010000000000000000900460ff1615610a825782600101805480602002602001604051908101604052809291908181526020018280548015610a6157602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610a36575b50505050506080850152825468010000000000000000900460ff1660208501525b610b25565b815468010000000000000000900460ff90811614610b255781600101805480602002602001604051908101604052809291908181526020018280548015610b0457602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610ad9575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff16610bf45782546901000000000000000000900460ff1615610bef5782600201805480602002602001604051908101604052809291908181526020018280548015610bb757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610b8c575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610caa565b81546901000000000000000000900460ff90811614610caa5781600201805480602002602001604051908101604052809291908181526020018280548015610c7257602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610c47575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610cb384611352565b50505092915050565b606060018203610d0d57610cd4838561ffff16610e61565b6040805173ffffffffffffffffffffffffffffffffffffffff9092166020830152015b6040516020818303038152906040529050610d6d565b60028203610d3357610d23838561ffff16610902565b604051602001610cf79190612613565b6040517f0c509b5b000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b9392505050565b610d7c6112d1565b6020811115610db7576040517f6f85e1b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff821660009081526003602052604090205415610e02576040517fe4df7bef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff8216600081815260036020908152604091829020849055815192835282018390527ee9ab3709e58edd0db46318d63673d8ae4681fa3e51d9f9dc07cde5109ff74891016105f9565b610e556112d1565b610e5f6000611737565b565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260046020908152604080832063ffffffff8616845290915281205490911680610ed25763ffffffff831660009081526005602052604090205473ffffffffffffffffffffffffffffffffffffffff16610ed4565b805b949350505050565b610ee78383836117ac565b505050565b6000610ed484848461187a565b366000610f068585611983565b91509150610f3582827f00000000000000000000000000000000000000000000000000000000000000006117ac565b6000610f41868661199f565b90506000610f5d610f5288886119b1565b63ffffffff166119d4565b90506000610f6f838361ffff16610902565b9050610f9c818686604051610f85929190612ec0565b6040518091039020610f978b8b611a6c565b611a96565b610ffb82610faa8a8a611c45565b85610fb58c8c611c5e565b610fbf8d8d611c81565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508e9250611c91915050565b5050505050505050565b61100d6112d1565b73ffffffffffffffffffffffffffffffffffffffff81166110b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610d64565b6110b981611737565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461112b576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111388561ffff16611f44565b6001830361115f5761115a61ffff86168561115584860186612a8d565b611f8b565b6111b6565b600283036111815761115a61ffff86168561117c84860186612ed0565b612036565b6040517f0c509b5b00000000000000000000000000000000000000000000000000000000815260048101849052602401610d64565b5050505050565b6040805180820182526001815267ffffffffffffffff8316602082015290516002906000906111ef9088908890612ec0565b6040805191829003909120825260208083019390935290810160009081208682528352818120338083529084529082902084518154959094015167ffffffffffffffff16610100027fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909516949094179290921790925590517f2cb0eed7538baeae4c6fde038c0fd0384d27de0dd55a228c65847bda6aa1ab56916112c3918790879086908890612f05565b60405180910390a150505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d64565b602081015160ff1615801561136c5750606081015160ff16155b156110b9576040517fce2c375100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff90811614806113be5750602081015160ff16155b156114055760808101515115611400576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611484565b806020015160ff1681608001515114158061144057506002611429600160ff612fb9565b6114339190612fd2565b60ff16816020015160ff16115b15611477576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611484816080015161207f565b604081015160ff908116148061149f5750604081015160ff16155b156115255760a081015151156114e1576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615611520576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115fc565b806040015160ff168160a001515114158061156057506002611549600160ff612fb9565b6115539190612fd2565b60ff16816040015160ff16115b15611597576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615806115b85750806040015160ff16816060015160ff16115b156115ef576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115fc8160a0015161207f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a010000000000000000000095909116949094029390931783556080840151805185949361171393908501920190612302565b5060a0820151805161172f916002840191602090910190612302565b505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b605182146117e6576040517fc9bf37b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016117f28484612119565b60ff161461182c576040517f3a9ae7b900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8063ffffffff1661183d848461213b565b63ffffffff1614610ee7576040517f42d2c97e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602083015160009060ff16156118fd5760005b846020015160ff168160ff1610156118e5576118cf85608001518260ff16815181106118bb576118bb612b1b565b60200260200101518585886000015161214b565b6118dd576000915050610d6d565b60010161188d565b50836040015160ff166000036118fd57506001610d6d565b606084015160005b856040015160ff168160ff161015611977576119478660a001518260ff168151811061193357611933612b1b565b60200260200101518686896000015161214b565b1561196f57816119568161301b565b9250508160ff1660000361196f57600192505050610d6d565b600101611905565b50600095945050505050565b3660006119936051828587613056565b915091505b9250929050565b6000610d6d6119ae84846121da565b90565b60006119c1600d60098486613056565b6119ca91613080565b60e01c9392505050565b600061ffff821115611a68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f36206269747300000000000000000000000000000000000000000000000000006064820152608401610d64565b5090565b6000611a7883836121ea565b604051611a86929190612ec0565b6040518091039020905092915050565b611aa183838361187a565b611ad7576040517f4c3118d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602083015160ff1615611b8f5760005b836020015160ff168160ff161015611b8d57600083815260026020908152604080832085845290915281206080860151805191929160ff8516908110611b2f57611b2f612b1b565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000169055600101611ae7565b505b604083015160ff1615610ee75760005b836040015160ff168160ff16101561041a576000838152600260209081526040808320858452909152812060a0860151805191929160ff8516908110611be757611be7612b1b565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000169055600101611b9f565b6000611c55602d600d8486613056565b610d6d916130c8565b6000611c6e600960018486613056565b611c7791613104565b60c01c9392505050565b3660006119938360718187613056565b611c9f848761ffff16610e61565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d03576040517fb7386d3200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163b600003611da0578373ffffffffffffffffffffffffffffffffffffffff168661ffff167feca5e9e3d49c3ee9d9362efa82baa91c668a7f032b3a403638ae65e27368013687868680519060200120604051611d939392919092835267ffffffffffffffff919091166020830152604082015260600190565b60405180910390a361172f565b61ffff8616600090815260036020526040812054611dbf9087906121fa565b85604051602001611dd192919061314a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fc2fa4813000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c2fa481390611e7b908a9085908a908a9089908b90600401613194565b600060405180830381600087803b158015611e9557600080fd5b505af1158015611ea9573d6000803e3d6000fd5b5050604080516060808201835261ffff8c1680835260208084018d815267ffffffffffffffff8c8116868801908152875194855291519284019290925251169381019390935273ffffffffffffffffffffffffffffffffffffffff8a169083015292507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca04915060800160405180910390a15050505050505050565b611f4d8161229b565b6110b9576040517ff0c10d0400000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610d64565b73ffffffffffffffffffffffffffffffffffffffff828116600081815260046020908152604080832063ffffffff89168085529083529281902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001695871695861790558051938452908301919091528101919091527f2bef5fe6b6383925f8e9893d464521c5fcd4f9d4dc14d32d900849c5ae0af710906060015b60405180910390a1505050565b6120418284836113a3565b61204b8284610902565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f508182848360405161202993929190613202565b6000805b8251811015610ee75760008382815181106120a0576120a0612b1b565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161161210f576040517f447516e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150600101612083565b60006121286001828486613056565b6121319161323d565b60f81c9392505050565b60006119c16031602d8486613056565b6000838152600260209081526040808320858452825280832073ffffffffffffffffffffffffffffffffffffffff88168452825280832081518083019092525460ff811615801580845261010090920467ffffffffffffffff169383019390935290916121d057508267ffffffffffffffff16816020015167ffffffffffffffff1610155b9695505050505050565b6000611c55605160318486613056565b3660006119938360518187613056565b60608115806122095750602082115b15612240576040517f18456c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8167ffffffffffffffff81111561225957612259612812565b6040519080825280601f01601f191660200182016040528015612283576020820181803683370190505b506008909202610100039290921b6020820152919050565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff16151580610d6d5750546a0100000000000000000000900460ff16151592915050565b82805482825590600052602060002090810192821561237c579160200282015b8281111561237c57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190612322565b50611a689291505b80821115611a685760008155600101612384565b60008083601f8401126123aa57600080fd5b50813567ffffffffffffffff8111156123c257600080fd5b60208301915083602082850101111561199857600080fd5b803567ffffffffffffffff811681146123f257600080fd5b919050565b6000806000806060858703121561240d57600080fd5b843567ffffffffffffffff81111561242457600080fd5b61243087828801612398565b90955093505060208501359150612449604086016123da565b905092959194509250565b803563ffffffff811681146123f257600080fd5b60006020828403121561247a57600080fd5b610d6d82612454565b6000806020838503121561249657600080fd5b823567ffffffffffffffff808211156124ae57600080fd5b818501915085601f8301126124c257600080fd5b8135818111156124d157600080fd5b8660208260051b85010111156124e657600080fd5b60209290920196919550909350505050565b73ffffffffffffffffffffffffffffffffffffffff811681146110b957600080fd5b6000806040838503121561252d57600080fd5b8235612538816124f8565b915061254660208401612454565b90509250929050565b60008151808452602080850194506020840160005b8381101561259657815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101612564565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c060808501526125f160c085018261254f565b905060a083015184820360a086015261260a828261254f565b95945050505050565b602081526000610d6d60208301846125a1565b6000806020838503121561263957600080fd5b823567ffffffffffffffff8082111561265157600080fd5b818501915085601f83011261266557600080fd5b81358181111561267457600080fd5b8660208260061b85010111156124e657600080fd5b60008060006060848603121561269e57600080fd5b833592506020840135915060408401356126b7816124f8565b809150509250925092565b803561ffff811681146123f257600080fd5b6000806000606084860312156126e957600080fd5b6126f2846126c2565b92506020840135612702816124f8565b929592945050506040919091013590565b60005b8381101561272e578181015183820152602001612716565b50506000910152565b6000815180845261274f816020860160208601612713565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610d6d6020830184612737565b600080604083850312156127a757600080fd5b6127b0836126c2565b946020939093013593505050565b6000806000604084860312156127d357600080fd5b833567ffffffffffffffff8111156127ea57600080fd5b6127f686828701612398565b9094509250612809905060208501612454565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff8111828210171561286457612864612812565b60405290565b803560ff811681146123f257600080fd5b600082601f83011261288c57600080fd5b8135602067ffffffffffffffff808311156128a9576128a9612812565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156128ec576128ec612812565b604052938452602081870181019490810192508785111561290c57600080fd5b6020870191505b84821015612935578135612926816124f8565b83529183019190830190612913565b979650505050505050565b600060c0828403121561295257600080fd5b61295a612841565b9050612965826123da565b81526129736020830161286a565b60208201526129846040830161286a565b60408201526129956060830161286a565b6060820152608082013567ffffffffffffffff808211156129b557600080fd5b6129c18583860161287b565b608084015260a08401359150808211156129da57600080fd5b506129e78482850161287b565b60a08301525092915050565b600080600060608486031215612a0857600080fd5b833567ffffffffffffffff811115612a1f57600080fd5b612a2b86828701612940565b9660208601359650604090950135949350505050565b600080600060408486031215612a5657600080fd5b833567ffffffffffffffff811115612a6d57600080fd5b612a7986828701612398565b909790965060209590950135949350505050565b600060208284031215612a9f57600080fd5b8135610ed2816124f8565b600080600080600060808688031215612ac257600080fd5b612acb866126c2565b94506020860135612adb816124f8565b935060408601359250606086013567ffffffffffffffff811115612afe57600080fd5b612b0a88828901612398565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112612b7e57600080fd5b9190910192915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112612b7e57600080fd5b600060208284031215612bce57600080fd5b610d6d8261286a565b600060208284031215612be957600080fd5b610d6d826123da565b60006107a13683612940565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612c3357600080fd5b830160208101925035905067ffffffffffffffff811115612c5357600080fd5b8060051b360382131561199857600080fd5b8183526000602080850194508260005b85811015612596578135612c88816124f8565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101612c75565b60208082528181018390526000906040808401600586901b8501820187855b88811015612e3f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c3603018112612d3157600080fd5b8b0163ffffffff612d4182612454565b168552878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41823603018112612d7857600080fd5b8589018890520167ffffffffffffffff612d91826123da565b1687860152612da188820161286a565b606060ff80831682890152612db78a850161286a565b92506080818416818a0152612dcd83860161286a565b935060a09250818416838a0152612de681860186612bfe565b60c08b81015294509150612e01905061010089018483612c65565b925050612e1081840184612bfe565b93509050838783030160e0880152612e29828483612c65565b978a019796505050928701925050600101612ccf565b509098975050505050505050565b6020808252818101839052600090604080840186845b87811015612eb35763ffffffff612e7983612454565b16835284820135612e89816124f8565b73ffffffffffffffffffffffffffffffffffffffff16838601529183019190830190600101612e63565b5090979650505050505050565b8183823760009101908152919050565b600060208284031215612ee257600080fd5b813567ffffffffffffffff811115612ef957600080fd5b610ed484828501612940565b73ffffffffffffffffffffffffffffffffffffffff8616815260806020820152836080820152838560a0830137600060a08583010152600060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f870116830101905067ffffffffffffffff841660408301528260608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff82811682821603908111156107a1576107a1612f8a565b600060ff83168061300c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b8060ff84160491505092915050565b600060ff82168061302e5761302e612f8a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b6000808585111561306657600080fd5b8386111561307357600080fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156130c05780818660040360031b1b83161692505b505092915050565b803560208310156107a1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156130c05760089490940360031b84901b1690921692915050565b6000835161315c818460208801612713565b60609390931b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190920190815260140192915050565b61ffff8716815260c0602082015260006131b160c0830188612737565b73ffffffffffffffffffffffffffffffffffffffff8716604084015267ffffffffffffffff8616606084015284608084015282810360a08401526131f58185612737565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600061260a60608301846125a1565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156130c05760019490940360031b84901b169092169291505056fea2646970667358221220da1239d4ad10b7e9dd1d6b1a3f8c2b3e73f9ad36ba2a18f553a8a9d0044b8f5a64736f6c63430008160033",
1032
- "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061016c5760003560e01c80636d26e5d0116100cd578063c40ff83511610081578063e65106f811610066578063e65106f8146103d5578063f2fde38b146103e8578063f8e1734c146103fb57600080fd5b8063c40ff8351461039f578063e084d952146103b257600080fd5b80638da5cb5b116100b25780638da5cb5b1461032d5780639653a7041461034b57806398678a111461035e57600080fd5b80636d26e5d014610312578063715018a61461032557600080fd5b806339e928a81161012457806343ea4fa91161010957806343ea4fa9146102bf57806352d2871f146102d257806354fd4d50146102f257600080fd5b806339e928a8146102475780633c782a521461025a57600080fd5b806329460b0b1161015557806329460b0b146101b95780632fed39ae146101cc57806339e3f9381461022757600080fd5b80630223536e146101715780630f8355c014610186575b600080fd5b61018461017f3660046123f7565b61040e565b005b6101a6610194366004612468565b60036020526000908152604090205481565b6040519081526020015b60405180910390f35b6101846101c7366004612483565b610420565b6102026101da366004612468565b60056020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b0565b61023a61023536600461251a565b610605565b6040516101b09190612613565b610184610255366004612626565b6107a7565b61029f610268366004612689565b600260209081526000938452604080852082529284528284209052825290205460ff811690610100900467ffffffffffffffff1682565b60408051921515835267ffffffffffffffff9091166020830152016101b0565b61023a6102cd36600461251a565b610902565b6102e56102e03660046126d4565b610cbc565b6040516101b09190612781565b6040805160038152600060208201526001918101919091526060016101b0565b610184610320366004612794565b610d74565b610184610e4d565b60005473ffffffffffffffffffffffffffffffffffffffff16610202565b61020261035936600461251a565b610e61565b61020261036c36600461251a565b600460209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff1681565b6101846103ad3660046127be565b610edc565b6103c56103c03660046129f3565b610eec565b60405190151581526020016101b0565b6101846103e3366004612a41565b610ef9565b6101846103f6366004612a8d565b611005565b610184610409366004612aaa565b6110bc565b61041a848484846111bd565b50505050565b6104286112d1565b60005b818110156105c7573683838381811061044657610446612b1b565b90506020028101906104589190612b4a565b905060ff6104696020830183612b88565b61047a906040810190602001612bbc565b60ff16036104b4576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff6104c36020830183612b88565b6104d4906060810190604001612bbc565b60ff160361050e576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff6105246020830183612b88565b610532906020810190612bd7565b67ffffffffffffffff1603610573576040517f503667ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105916105836020830183612b88565b61058c90612bf2565b611352565b6105be60006105a36020840184612468565b6105b06020850185612b88565b6105b990612bf2565b6113a3565b5060010161042b565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b56082826040516105f9929190612cb0565b60405180910390a15050565b6040805160c0810182526000808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff8316600090815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a0100000000000000000000909104166060820152928101805485518185028101850190965280865293949193608086019383018282801561072657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116106fb575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561079557602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161076a575b50505050508152505090505b92915050565b6107af6112d1565b60005b818110156108d057368383838181106107cd576107cd612b1b565b9050604002019050600073ffffffffffffffffffffffffffffffffffffffff168160200160208101906108009190612a8d565b73ffffffffffffffffffffffffffffffffffffffff160361084d576040517f20e9d05a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61085d6040820160208301612a8d565b6005600061086e6020850185612468565b63ffffffff168152602081019190915260400160002080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055506001016107b2565b507f2a2676897ce6724d11fb8016f9bcdfe9fe564bc3524411d5df7914aac78aeeb382826040516105f9929190612e4d565b6040805160c0810182526000808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff16806109b257825467ffffffffffffffff1684526109d1565b67ffffffffffffffff818116146109d15767ffffffffffffffff811684525b815468010000000000000000900460ff16610a8757825468010000000000000000900460ff1615610a825782600101805480602002602001604051908101604052809291908181526020018280548015610a6157602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610a36575b50505050506080850152825468010000000000000000900460ff1660208501525b610b25565b815468010000000000000000900460ff90811614610b255781600101805480602002602001604051908101604052809291908181526020018280548015610b0457602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610ad9575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff16610bf45782546901000000000000000000900460ff1615610bef5782600201805480602002602001604051908101604052809291908181526020018280548015610bb757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610b8c575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610caa565b81546901000000000000000000900460ff90811614610caa5781600201805480602002602001604051908101604052809291908181526020018280548015610c7257602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610c47575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610cb384611352565b50505092915050565b606060018203610d0d57610cd4838561ffff16610e61565b6040805173ffffffffffffffffffffffffffffffffffffffff9092166020830152015b6040516020818303038152906040529050610d6d565b60028203610d3357610d23838561ffff16610902565b604051602001610cf79190612613565b6040517f0c509b5b000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b9392505050565b610d7c6112d1565b6020811115610db7576040517f6f85e1b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff821660009081526003602052604090205415610e02576040517fe4df7bef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff8216600081815260036020908152604091829020849055815192835282018390527ee9ab3709e58edd0db46318d63673d8ae4681fa3e51d9f9dc07cde5109ff74891016105f9565b610e556112d1565b610e5f6000611737565b565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260046020908152604080832063ffffffff8616845290915281205490911680610ed25763ffffffff831660009081526005602052604090205473ffffffffffffffffffffffffffffffffffffffff16610ed4565b805b949350505050565b610ee78383836117ac565b505050565b6000610ed484848461187a565b366000610f068585611983565b91509150610f3582827f00000000000000000000000000000000000000000000000000000000000000006117ac565b6000610f41868661199f565b90506000610f5d610f5288886119b1565b63ffffffff166119d4565b90506000610f6f838361ffff16610902565b9050610f9c818686604051610f85929190612ec0565b6040518091039020610f978b8b611a6c565b611a96565b610ffb82610faa8a8a611c45565b85610fb58c8c611c5e565b610fbf8d8d611c81565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508e9250611c91915050565b5050505050505050565b61100d6112d1565b73ffffffffffffffffffffffffffffffffffffffff81166110b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610d64565b6110b981611737565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461112b576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111388561ffff16611f44565b6001830361115f5761115a61ffff86168561115584860186612a8d565b611f8b565b6111b6565b600283036111815761115a61ffff86168561117c84860186612ed0565b612036565b6040517f0c509b5b00000000000000000000000000000000000000000000000000000000815260048101849052602401610d64565b5050505050565b6040805180820182526001815267ffffffffffffffff8316602082015290516002906000906111ef9088908890612ec0565b6040805191829003909120825260208083019390935290810160009081208682528352818120338083529084529082902084518154959094015167ffffffffffffffff16610100027fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909516949094179290921790925590517f2cb0eed7538baeae4c6fde038c0fd0384d27de0dd55a228c65847bda6aa1ab56916112c3918790879086908890612f05565b60405180910390a150505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d64565b602081015160ff1615801561136c5750606081015160ff16155b156110b9576040517fce2c375100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff90811614806113be5750602081015160ff16155b156114055760808101515115611400576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611484565b806020015160ff1681608001515114158061144057506002611429600160ff612fb9565b6114339190612fd2565b60ff16816020015160ff16115b15611477576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611484816080015161207f565b604081015160ff908116148061149f5750604081015160ff16155b156115255760a081015151156114e1576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615611520576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115fc565b806040015160ff168160a001515114158061156057506002611549600160ff612fb9565b6115539190612fd2565b60ff16816040015160ff16115b15611597576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615806115b85750806040015160ff16816060015160ff16115b156115ef576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115fc8160a0015161207f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a010000000000000000000095909116949094029390931783556080840151805185949361171393908501920190612302565b5060a0820151805161172f916002840191602090910190612302565b505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b605182146117e6576040517fc9bf37b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016117f28484612119565b60ff161461182c576040517f3a9ae7b900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8063ffffffff1661183d848461213b565b63ffffffff1614610ee7576040517f42d2c97e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602083015160009060ff16156118fd5760005b846020015160ff168160ff1610156118e5576118cf85608001518260ff16815181106118bb576118bb612b1b565b60200260200101518585886000015161214b565b6118dd576000915050610d6d565b60010161188d565b50836040015160ff166000036118fd57506001610d6d565b606084015160005b856040015160ff168160ff161015611977576119478660a001518260ff168151811061193357611933612b1b565b60200260200101518686896000015161214b565b1561196f57816119568161301b565b9250508160ff1660000361196f57600192505050610d6d565b600101611905565b50600095945050505050565b3660006119936051828587613056565b915091505b9250929050565b6000610d6d6119ae84846121da565b90565b60006119c1600d60098486613056565b6119ca91613080565b60e01c9392505050565b600061ffff821115611a68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f36206269747300000000000000000000000000000000000000000000000000006064820152608401610d64565b5090565b6000611a7883836121ea565b604051611a86929190612ec0565b6040518091039020905092915050565b611aa183838361187a565b611ad7576040517f4c3118d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602083015160ff1615611b8f5760005b836020015160ff168160ff161015611b8d57600083815260026020908152604080832085845290915281206080860151805191929160ff8516908110611b2f57611b2f612b1b565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000169055600101611ae7565b505b604083015160ff1615610ee75760005b836040015160ff168160ff16101561041a576000838152600260209081526040808320858452909152812060a0860151805191929160ff8516908110611be757611be7612b1b565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000169055600101611b9f565b6000611c55602d600d8486613056565b610d6d916130c8565b6000611c6e600960018486613056565b611c7791613104565b60c01c9392505050565b3660006119938360718187613056565b611c9f848761ffff16610e61565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d03576040517fb7386d3200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163b600003611da0578373ffffffffffffffffffffffffffffffffffffffff168661ffff167feca5e9e3d49c3ee9d9362efa82baa91c668a7f032b3a403638ae65e27368013687868680519060200120604051611d939392919092835267ffffffffffffffff919091166020830152604082015260600190565b60405180910390a361172f565b61ffff8616600090815260036020526040812054611dbf9087906121fa565b85604051602001611dd192919061314a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fc2fa4813000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c2fa481390611e7b908a9085908a908a9089908b90600401613194565b600060405180830381600087803b158015611e9557600080fd5b505af1158015611ea9573d6000803e3d6000fd5b5050604080516060808201835261ffff8c1680835260208084018d815267ffffffffffffffff8c8116868801908152875194855291519284019290925251169381019390935273ffffffffffffffffffffffffffffffffffffffff8a169083015292507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca04915060800160405180910390a15050505050505050565b611f4d8161229b565b6110b9576040517ff0c10d0400000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610d64565b73ffffffffffffffffffffffffffffffffffffffff828116600081815260046020908152604080832063ffffffff89168085529083529281902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001695871695861790558051938452908301919091528101919091527f2bef5fe6b6383925f8e9893d464521c5fcd4f9d4dc14d32d900849c5ae0af710906060015b60405180910390a1505050565b6120418284836113a3565b61204b8284610902565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f508182848360405161202993929190613202565b6000805b8251811015610ee75760008382815181106120a0576120a0612b1b565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161161210f576040517f447516e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150600101612083565b60006121286001828486613056565b6121319161323d565b60f81c9392505050565b60006119c16031602d8486613056565b6000838152600260209081526040808320858452825280832073ffffffffffffffffffffffffffffffffffffffff88168452825280832081518083019092525460ff811615801580845261010090920467ffffffffffffffff169383019390935290916121d057508267ffffffffffffffff16816020015167ffffffffffffffff1610155b9695505050505050565b6000611c55605160318486613056565b3660006119938360518187613056565b60608115806122095750602082115b15612240576040517f18456c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8167ffffffffffffffff81111561225957612259612812565b6040519080825280601f01601f191660200182016040528015612283576020820181803683370190505b506008909202610100039290921b6020820152919050565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff16151580610d6d5750546a0100000000000000000000900460ff16151592915050565b82805482825590600052602060002090810192821561237c579160200282015b8281111561237c57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190612322565b50611a689291505b80821115611a685760008155600101612384565b60008083601f8401126123aa57600080fd5b50813567ffffffffffffffff8111156123c257600080fd5b60208301915083602082850101111561199857600080fd5b803567ffffffffffffffff811681146123f257600080fd5b919050565b6000806000806060858703121561240d57600080fd5b843567ffffffffffffffff81111561242457600080fd5b61243087828801612398565b90955093505060208501359150612449604086016123da565b905092959194509250565b803563ffffffff811681146123f257600080fd5b60006020828403121561247a57600080fd5b610d6d82612454565b6000806020838503121561249657600080fd5b823567ffffffffffffffff808211156124ae57600080fd5b818501915085601f8301126124c257600080fd5b8135818111156124d157600080fd5b8660208260051b85010111156124e657600080fd5b60209290920196919550909350505050565b73ffffffffffffffffffffffffffffffffffffffff811681146110b957600080fd5b6000806040838503121561252d57600080fd5b8235612538816124f8565b915061254660208401612454565b90509250929050565b60008151808452602080850194506020840160005b8381101561259657815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101612564565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c060808501526125f160c085018261254f565b905060a083015184820360a086015261260a828261254f565b95945050505050565b602081526000610d6d60208301846125a1565b6000806020838503121561263957600080fd5b823567ffffffffffffffff8082111561265157600080fd5b818501915085601f83011261266557600080fd5b81358181111561267457600080fd5b8660208260061b85010111156124e657600080fd5b60008060006060848603121561269e57600080fd5b833592506020840135915060408401356126b7816124f8565b809150509250925092565b803561ffff811681146123f257600080fd5b6000806000606084860312156126e957600080fd5b6126f2846126c2565b92506020840135612702816124f8565b929592945050506040919091013590565b60005b8381101561272e578181015183820152602001612716565b50506000910152565b6000815180845261274f816020860160208601612713565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610d6d6020830184612737565b600080604083850312156127a757600080fd5b6127b0836126c2565b946020939093013593505050565b6000806000604084860312156127d357600080fd5b833567ffffffffffffffff8111156127ea57600080fd5b6127f686828701612398565b9094509250612809905060208501612454565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff8111828210171561286457612864612812565b60405290565b803560ff811681146123f257600080fd5b600082601f83011261288c57600080fd5b8135602067ffffffffffffffff808311156128a9576128a9612812565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156128ec576128ec612812565b604052938452602081870181019490810192508785111561290c57600080fd5b6020870191505b84821015612935578135612926816124f8565b83529183019190830190612913565b979650505050505050565b600060c0828403121561295257600080fd5b61295a612841565b9050612965826123da565b81526129736020830161286a565b60208201526129846040830161286a565b60408201526129956060830161286a565b6060820152608082013567ffffffffffffffff808211156129b557600080fd5b6129c18583860161287b565b608084015260a08401359150808211156129da57600080fd5b506129e78482850161287b565b60a08301525092915050565b600080600060608486031215612a0857600080fd5b833567ffffffffffffffff811115612a1f57600080fd5b612a2b86828701612940565b9660208601359650604090950135949350505050565b600080600060408486031215612a5657600080fd5b833567ffffffffffffffff811115612a6d57600080fd5b612a7986828701612398565b909790965060209590950135949350505050565b600060208284031215612a9f57600080fd5b8135610ed2816124f8565b600080600080600060808688031215612ac257600080fd5b612acb866126c2565b94506020860135612adb816124f8565b935060408601359250606086013567ffffffffffffffff811115612afe57600080fd5b612b0a88828901612398565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112612b7e57600080fd5b9190910192915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112612b7e57600080fd5b600060208284031215612bce57600080fd5b610d6d8261286a565b600060208284031215612be957600080fd5b610d6d826123da565b60006107a13683612940565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612c3357600080fd5b830160208101925035905067ffffffffffffffff811115612c5357600080fd5b8060051b360382131561199857600080fd5b8183526000602080850194508260005b85811015612596578135612c88816124f8565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101612c75565b60208082528181018390526000906040808401600586901b8501820187855b88811015612e3f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c3603018112612d3157600080fd5b8b0163ffffffff612d4182612454565b168552878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41823603018112612d7857600080fd5b8589018890520167ffffffffffffffff612d91826123da565b1687860152612da188820161286a565b606060ff80831682890152612db78a850161286a565b92506080818416818a0152612dcd83860161286a565b935060a09250818416838a0152612de681860186612bfe565b60c08b81015294509150612e01905061010089018483612c65565b925050612e1081840184612bfe565b93509050838783030160e0880152612e29828483612c65565b978a019796505050928701925050600101612ccf565b509098975050505050505050565b6020808252818101839052600090604080840186845b87811015612eb35763ffffffff612e7983612454565b16835284820135612e89816124f8565b73ffffffffffffffffffffffffffffffffffffffff16838601529183019190830190600101612e63565b5090979650505050505050565b8183823760009101908152919050565b600060208284031215612ee257600080fd5b813567ffffffffffffffff811115612ef957600080fd5b610ed484828501612940565b73ffffffffffffffffffffffffffffffffffffffff8616815260806020820152836080820152838560a0830137600060a08583010152600060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f870116830101905067ffffffffffffffff841660408301528260608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff82811682821603908111156107a1576107a1612f8a565b600060ff83168061300c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b8060ff84160491505092915050565b600060ff82168061302e5761302e612f8a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b6000808585111561306657600080fd5b8386111561307357600080fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156130c05780818660040360031b1b83161692505b505092915050565b803560208310156107a1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156130c05760089490940360031b84901b1690921692915050565b6000835161315c818460208801612713565b60609390931b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190920190815260140192915050565b61ffff8716815260c0602082015260006131b160c0830188612737565b73ffffffffffffffffffffffffffffffffffffffff8716604084015267ffffffffffffffff8616606084015284608084015282810360a08401526131f58185612737565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600061260a60608301846125a1565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156130c05760019490940360031b84901b169092169291505056fea2646970667358221220da1239d4ad10b7e9dd1d6b1a3f8c2b3e73f9ad36ba2a18f553a8a9d0044b8f5a64736f6c63430008160033",
999
+ "solcInputHash": "9a77f541806fd95ff35b8613e526dae5",
1000
+ "bytecode": "0x60c06040523480156200001157600080fd5b506040516200361c3803806200361c8339810160408190526200003491620000b2565b6001600160a01b03821660805263ffffffff811660a0528181620000583362000062565b5050505062000104565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008060408385031215620000c657600080fd5b82516001600160a01b0381168114620000de57600080fd5b602084015190925063ffffffff81168114620000f957600080fd5b809150509250929050565b60805160a0516134dd6200013f60003960008181610e97015261111b015260008181610f9a015281816112bd01526120e101526134dd6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806354fd4d50116100cd5780639653a70411610081578063e65106f811610066578063e65106f8146103d2578063f2fde38b146103e5578063f8e1734c146103f857600080fd5b80639653a7041461037e57806398678a111461039157600080fd5b8063715018a6116100b2578063715018a6146103455780637401fccc1461034d5780638da5cb5b1461036057600080fd5b806354fd4d50146103125780636d26e5d01461033257600080fd5b806339e3f938116101245780633c782a52116101095780633c782a521461027a57806343ea4fa9146102df57806352d2871f146102f257600080fd5b806339e3f9381461024757806339e928a81461026757600080fd5b806327d12cd91161015557806327d12cd9146101b957806329460b0b146101d95780632fed39ae146101ec57600080fd5b80630223536e146101715780630f8355c014610186575b600080fd5b61018461017f366004612604565b61040b565b005b6101a6610194366004612677565b60036020526000908152604090205481565b6040519081526020015b60405180910390f35b6101cc6101c7366004612692565b61041d565b6040516101b09190612744565b6101846101e7366004612757565b610454565b6102226101fa366004612677565b60056020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b0565b61025a6102553660046127ee565b610639565b6040516101b091906128e7565b6101846102753660046128fa565b6107db565b6102bf61028836600461295d565b600260209081526000938452604080852082529284528284209052825290205460ff811690610100900467ffffffffffffffff1682565b60408051921515835267ffffffffffffffff9091166020830152016101b0565b61025a6102ed3660046127ee565b610936565b6103056103003660046129a8565b610cf0565b6040516101b09190612a55565b6040805160038152600060208201526001918101919091526060016101b0565b610184610340366004612a68565b610da1565b610184610e7a565b6101cc61035b366004612692565b610e8e565b60005473ffffffffffffffffffffffffffffffffffffffff16610222565b61022261038c3660046127ee565b611088565b61022261039f3660046127ee565b600460209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff1681565b6101846103e0366004612692565b611103565b6101846103f3366004612a92565b611204565b610184610406366004612aaf565b6112bb565b610417848484846113bc565b50505050565b60008061042b858585610e8e565b600281111561043c5761043c6126de565b036104495750600061044d565b5060025b9392505050565b61045c6114d0565b60005b818110156105fb573683838381811061047a5761047a612b20565b905060200281019061048c9190612b4f565b905060ff61049d6020830183612b8d565b6104ae906040810190602001612bd2565b60ff16036104e8576040517f1b66804100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff6104f76020830183612b8d565b610508906060810190604001612bd2565b60ff1603610542576040517f05f7ab6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff6105586020830183612b8d565b610566906020810190612bed565b67ffffffffffffffff16036105a7576040517f8f6ae8f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105c56105b76020830183612b8d565b6105c090612dda565b611551565b6105f260006105d76020840184612677565b6105e46020850185612b8d565b6105ed90612dda565b6115a2565b5060010161045f565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b560828260405161062d929190612e98565b60405180910390a15050565b6040805160c0810182526000808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff8316600090815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a0100000000000000000000909104166060820152928101805485518185028101850190965280865293949193608086019383018282801561075a57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161072f575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156107c957602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161079e575b50505050508152505090505b92915050565b6107e36114d0565b60005b81811015610904573683838381811061080157610801612b20565b9050604002019050600073ffffffffffffffffffffffffffffffffffffffff168160200160208101906108349190612a92565b73ffffffffffffffffffffffffffffffffffffffff1603610881576040517f710c949700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108916040820160208301612a92565b600560006108a26020850185612677565b63ffffffff168152602081019190915260400160002080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055506001016107e6565b507f2a2676897ce6724d11fb8016f9bcdfe9fe564bc3524411d5df7914aac78aeeb3828260405161062d929190613037565b6040805160c0810182526000808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff16806109e657825467ffffffffffffffff168452610a05565b67ffffffffffffffff81811614610a055767ffffffffffffffff811684525b815468010000000000000000900460ff16610abb57825468010000000000000000900460ff1615610ab65782600101805480602002602001604051908101604052809291908181526020018280548015610a9557602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610a6a575b50505050506080850152825468010000000000000000900460ff1660208501525b610b59565b815468010000000000000000900460ff90811614610b595781600101805480602002602001604051908101604052809291908181526020018280548015610b3857602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610b0d575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff16610c285782546901000000000000000000900460ff1615610c235782600201805480602002602001604051908101604052809291908181526020018280548015610beb57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610bc0575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610cde565b81546901000000000000000000900460ff90811614610cde5781600201805480602002602001604051908101604052809291908181526020018280548015610ca657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610c7b575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610ce784611551565b50505092915050565b606060018203610d4157610d08838561ffff16611088565b6040805173ffffffffffffffffffffffffffffffffffffffff9092166020830152015b604051602081830303815290604052905061044d565b60028203610d6757610d57838561ffff16610936565b604051602001610d2b91906128e7565b6040517f961a995f000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b610da96114d0565b6020811115610de4576040517fbcfcf59e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff821660009081526003602052604090205415610e2f576040517f831ad0ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff8216600081815260036020908152604091829020849055815192835282018390527ee9ab3709e58edd0db46318d63673d8ae4681fa3e51d9f9dc07cde5109ff748910161062d565b610e826114d0565b610e8c6000611936565b565b6000610ebb84847f00000000000000000000000000000000000000000000000000000000000000006119ab565b6000610ec78585611a7e565b90506000610ee3610ed88787611a90565b63ffffffff16611ab3565b90506000610ef18787611b4b565b61ffff831660009081526003602052604081205491925090610f1d90610f178a8a611b6e565b90611b87565b84604051602001610f2f9291906130aa565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527ffdc07c70000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063fdc07c7090610fd190869085906004016130f4565b602060405180830381865afa158015610fee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110129190613111565b67ffffffffffffffff168267ffffffffffffffff161161103957600294505050505061044d565b61106861104a858561ffff16610936565b898960405161105a92919061312e565b604051809103902088611c28565b1561107a57600194505050505061044d565b506000979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260046020908152604080832063ffffffff86168452909152812054909116806110f95763ffffffff831660009081526005602052604090205473ffffffffffffffffffffffffffffffffffffffff166110fb565b805b949350505050565b3660006111108585611d31565b9150915061113f82827f00000000000000000000000000000000000000000000000000000000000000006119ab565b600061114b8686611a7e565b9050600061115c610ed88888611a90565b9050600061116e838361ffff16610936565b905061119b81868660405161118492919061312e565b60405180910390206111968b8b611d4d565b611d77565b6111fa826111a98a8a611b6e565b856111b48c8c611b4b565b6111be8d8d611f26565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508e9250611f36915050565b5050505050505050565b61120c6114d0565b73ffffffffffffffffffffffffffffffffffffffff81166112af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610d98565b6112b881611936565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461132a576040517f7eb966c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113378561ffff166121e9565b6001830361135e5761135961ffff86168561135484860186612a92565b612230565b6113b5565b600283036113805761135961ffff86168561137b8486018661313e565b6122db565b6040517f961a995f00000000000000000000000000000000000000000000000000000000815260048101849052602401610d98565b5050505050565b6040805180820182526001815267ffffffffffffffff8316602082015290516002906000906113ee908890889061312e565b6040805191829003909120825260208083019390935290810160009081208682528352818120338083529084529082902084518154959094015167ffffffffffffffff16610100027fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909516949094179290921790925590517f2cb0eed7538baeae4c6fde038c0fd0384d27de0dd55a228c65847bda6aa1ab56916114c2918790879086908890613173565b60405180910390a150505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d98565b602081015160ff1615801561156b5750606081015160ff16155b156112b8576040517f7e36c28400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff90811614806115bd5750602081015160ff16155b1561160457608081015151156115ff576040517f1b66804100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611683565b806020015160ff1681608001515114158061163f57506002611628600160ff613227565b6116329190613240565b60ff16816020015160ff16115b15611676576040517f1b66804100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116838160800151612324565b604081015160ff908116148061169e5750604081015160ff16155b156117245760a081015151156116e0576040517f05f7ab6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff161561171f576040517f81da67ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117fb565b806040015160ff168160a001515114158061175f57506002611748600160ff613227565b6117529190613240565b60ff16816040015160ff16115b15611796576040517f05f7ab6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615806117b75750806040015160ff16816060015160ff16115b156117ee576040517f81da67ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117fb8160a00151612324565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a010000000000000000000095909116949094029390931783556080840151805185949361191293908501920190612506565b5060a0820151805161192e916002840191602090910190612506565b505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b605182146119e5576040517f0666bafd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016119f184846123be565b60ff1614611a2b576040517f28fac06600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8063ffffffff16611a3c84846123e0565b63ffffffff1614611a79576040517f9a61cd2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b600061044d611a8d84846123f0565b90565b6000611aa0600d60098486613289565b611aa9916132b3565b60e01c9392505050565b600061ffff821115611b47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f36206269747300000000000000000000000000000000000000000000000000006064820152608401610d98565b5090565b6000611b5b600960018486613289565b611b64916132fb565b60c01c9392505050565b6000611b7e602d600d8486613289565b61044d91613341565b6060811580611b965750602082115b15611bcd576040517f59baef1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8167ffffffffffffffff811115611be657611be6612c0a565b6040519080825280601f01601f191660200182016040528015611c10576020820181803683370190505b506008909202610100039290921b6020820152919050565b602083015160009060ff1615611cab5760005b846020015160ff168160ff161015611c9357611c7d85608001518260ff1681518110611c6957611c69612b20565b602002602001015185858860000151612400565b611c8b57600091505061044d565b600101611c3b565b50836040015160ff16600003611cab5750600161044d565b606084015160005b856040015160ff168160ff161015611d2557611cf58660a001518260ff1681518110611ce157611ce1612b20565b602002602001015186868960000151612400565b15611d1d5781611d048161337d565b9250508160ff16600003611d1d5760019250505061044d565b600101611cb3565b50600095945050505050565b366000611d416051828587613289565b915091505b9250929050565b6000611d59838361248f565b604051611d6792919061312e565b6040518091039020905092915050565b611d82838383611c28565b611db8576040517f692c93cb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602083015160ff1615611e705760005b836020015160ff168160ff161015611e6e57600083815260026020908152604080832085845290915281206080860151805191929160ff8516908110611e1057611e10612b20565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000169055600101611dc8565b505b604083015160ff1615611a795760005b836040015160ff168160ff161015610417576000838152600260209081526040808320858452909152812060a0860151805191929160ff8516908110611ec857611ec8612b20565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000169055600101611e80565b366000611d418360718187613289565b611f44848761ffff16611088565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fa8576040517f7fb6be0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163b600003612045578373ffffffffffffffffffffffffffffffffffffffff168661ffff167feca5e9e3d49c3ee9d9362efa82baa91c668a7f032b3a403638ae65e273680136878686805190602001206040516120389392919092835267ffffffffffffffff919091166020830152604082015260600190565b60405180910390a361192e565b61ffff8616600090815260036020526040812054612064908790611b87565b856040516020016120769291906130aa565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fc2fa4813000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c2fa481390612120908a9085908a908a9089908b906004016133b8565b600060405180830381600087803b15801561213a57600080fd5b505af115801561214e573d6000803e3d6000fd5b5050604080516060808201835261ffff8c1680835260208084018d815267ffffffffffffffff8c8116868801908152875194855291519284019290925251169381019390935273ffffffffffffffffffffffffffffffffffffffff8a169083015292507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca04915060800160405180910390a15050505050505050565b6121f28161249f565b6112b8576040517f2146a07a00000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610d98565b73ffffffffffffffffffffffffffffffffffffffff828116600081815260046020908152604080832063ffffffff89168085529083529281902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001695871695861790558051938452908301919091528101919091527f2bef5fe6b6383925f8e9893d464521c5fcd4f9d4dc14d32d900849c5ae0af710906060015b60405180910390a1505050565b6122e68284836115a2565b6122f08284610936565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f50818284836040516122ce93929190613426565b6000805b8251811015611a7957600083828151811061234557612345612b20565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16116123b4576040517fa228a30b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150600101612328565b60006123cd6001828486613289565b6123d691613461565b60f81c9392505050565b6000611aa06031602d8486613289565b6000611b7e605160318486613289565b6000838152600260209081526040808320858452825280832073ffffffffffffffffffffffffffffffffffffffff88168452825280832081518083019092525460ff811615801580845261010090920467ffffffffffffffff1693830193909352909161248557508267ffffffffffffffff16816020015167ffffffffffffffff1610155b9695505050505050565b366000611d418360518187613289565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff1615158061044d5750546a0100000000000000000000900460ff16151592915050565b828054828255906000526020600020908101928215612580579160200282015b8281111561258057825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190612526565b50611b479291505b80821115611b475760008155600101612588565b60008083601f8401126125ae57600080fd5b50813567ffffffffffffffff8111156125c657600080fd5b602083019150836020828501011115611d4657600080fd5b67ffffffffffffffff811681146112b857600080fd5b80356125ff816125de565b919050565b6000806000806060858703121561261a57600080fd5b843567ffffffffffffffff81111561263157600080fd5b61263d8782880161259c565b909550935050602085013591506040850135612658816125de565b939692955090935050565b803563ffffffff811681146125ff57600080fd5b60006020828403121561268957600080fd5b61044d82612663565b6000806000604084860312156126a757600080fd5b833567ffffffffffffffff8111156126be57600080fd5b6126ca8682870161259c565b909790965060209590950135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381106112b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016127518361270d565b91905290565b6000806020838503121561276a57600080fd5b823567ffffffffffffffff8082111561278257600080fd5b818501915085601f83011261279657600080fd5b8135818111156127a557600080fd5b8660208260051b85010111156127ba57600080fd5b60209290920196919550909350505050565b73ffffffffffffffffffffffffffffffffffffffff811681146112b857600080fd5b6000806040838503121561280157600080fd5b823561280c816127cc565b915061281a60208401612663565b90509250929050565b60008151808452602080850194506020840160005b8381101561286a57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101612838565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c060808501526128c560c0850182612823565b905060a083015184820360a08601526128de8282612823565b95945050505050565b60208152600061044d6020830184612875565b6000806020838503121561290d57600080fd5b823567ffffffffffffffff8082111561292557600080fd5b818501915085601f83011261293957600080fd5b81358181111561294857600080fd5b8660208260061b85010111156127ba57600080fd5b60008060006060848603121561297257600080fd5b8335925060208401359150604084013561298b816127cc565b809150509250925092565b803561ffff811681146125ff57600080fd5b6000806000606084860312156129bd57600080fd5b6129c684612996565b925060208401356129d6816127cc565b929592945050506040919091013590565b60005b83811015612a025781810151838201526020016129ea565b50506000910152565b60008151808452612a238160208601602086016129e7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061044d6020830184612a0b565b60008060408385031215612a7b57600080fd5b612a8483612996565b946020939093013593505050565b600060208284031215612aa457600080fd5b81356110f9816127cc565b600080600080600060808688031215612ac757600080fd5b612ad086612996565b94506020860135612ae0816127cc565b935060408601359250606086013567ffffffffffffffff811115612b0357600080fd5b612b0f8882890161259c565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112612b8357600080fd5b9190910192915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112612b8357600080fd5b803560ff811681146125ff57600080fd5b600060208284031215612be457600080fd5b61044d82612bc1565b600060208284031215612bff57600080fd5b81356110f9816125de565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715612c5c57612c5c612c0a565b60405290565b600082601f830112612c7357600080fd5b8135602067ffffffffffffffff80831115612c9057612c90612c0a565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715612cd357612cd3612c0a565b6040529384526020818701810194908101925087851115612cf357600080fd5b6020870191505b84821015612d1c578135612d0d816127cc565b83529183019190830190612cfa565b979650505050505050565b600060c08284031215612d3957600080fd5b612d41612c39565b9050612d4c826125f4565b8152612d5a60208301612bc1565b6020820152612d6b60408301612bc1565b6040820152612d7c60608301612bc1565b6060820152608082013567ffffffffffffffff80821115612d9c57600080fd5b612da885838601612c62565b608084015260a0840135915080821115612dc157600080fd5b50612dce84828501612c62565b60a08301525092915050565b60006107d53683612d27565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612e1b57600080fd5b830160208101925035905067ffffffffffffffff811115612e3b57600080fd5b8060051b3603821315611d4657600080fd5b8183526000602080850194508260005b8581101561286a578135612e70816127cc565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101612e5d565b60208082528181018390526000906040808401600586901b8501820187855b88811015613029577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c3603018112612f1957600080fd5b8b0163ffffffff612f2982612663565b168552878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41823603018112612f6057600080fd5b858901889052018035612f72816125de565b67ffffffffffffffff1685880152612f8b818901612bc1565b606060ff80831682890152612fa18a8501612bc1565b92506080818416818a0152612fb7838601612bc1565b935060a09250818416838a0152612fd081860186612de6565b60c08b81015294509150612feb905061010089018483612e4d565b925050612ffa81840184612de6565b93509050838783030160e0880152613013828483612e4d565b978a019796505050928701925050600101612eb7565b509098975050505050505050565b6020808252818101839052600090604080840186845b8781101561309d5763ffffffff61306383612663565b16835284820135613073816127cc565b73ffffffffffffffffffffffffffffffffffffffff1683860152918301919083019060010161304d565b5090979650505050505050565b600083516130bc8184602088016129e7565b60609390931b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190920190815260140192915050565b61ffff831681526040602082015260006110fb6040830184612a0b565b60006020828403121561312357600080fd5b81516110f9816125de565b8183823760009101908152919050565b60006020828403121561315057600080fd5b813567ffffffffffffffff81111561316757600080fd5b6110fb84828501612d27565b73ffffffffffffffffffffffffffffffffffffffff8616815260806020820152836080820152838560a0830137600060a08583010152600060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f870116830101905067ffffffffffffffff841660408301528260608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff82811682821603908111156107d5576107d56131f8565b600060ff83168061327a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b8060ff84160491505092915050565b6000808585111561329957600080fd5b838611156132a657600080fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156132f35780818660040360031b1b83161692505b505092915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156132f35760089490940360031b84901b1690921692915050565b803560208310156107d5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b600060ff821680613390576133906131f8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b61ffff8716815260c0602082015260006133d560c0830188612a0b565b73ffffffffffffffffffffffffffffffffffffffff8716604084015267ffffffffffffffff8616606084015284608084015282810360a08401526134198185612a0b565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526060604082015260006128de6060830184612875565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156132f35760019490940360031b84901b169092169291505056fea264697066735822122016ab2a1b86b2d496018d630e2accfc9427a51856284c4ab0d6b61e232d3575c664736f6c63430008160033",
1001
+ "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061016c5760003560e01c806354fd4d50116100cd5780639653a70411610081578063e65106f811610066578063e65106f8146103d2578063f2fde38b146103e5578063f8e1734c146103f857600080fd5b80639653a7041461037e57806398678a111461039157600080fd5b8063715018a6116100b2578063715018a6146103455780637401fccc1461034d5780638da5cb5b1461036057600080fd5b806354fd4d50146103125780636d26e5d01461033257600080fd5b806339e3f938116101245780633c782a52116101095780633c782a521461027a57806343ea4fa9146102df57806352d2871f146102f257600080fd5b806339e3f9381461024757806339e928a81461026757600080fd5b806327d12cd91161015557806327d12cd9146101b957806329460b0b146101d95780632fed39ae146101ec57600080fd5b80630223536e146101715780630f8355c014610186575b600080fd5b61018461017f366004612604565b61040b565b005b6101a6610194366004612677565b60036020526000908152604090205481565b6040519081526020015b60405180910390f35b6101cc6101c7366004612692565b61041d565b6040516101b09190612744565b6101846101e7366004612757565b610454565b6102226101fa366004612677565b60056020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b0565b61025a6102553660046127ee565b610639565b6040516101b091906128e7565b6101846102753660046128fa565b6107db565b6102bf61028836600461295d565b600260209081526000938452604080852082529284528284209052825290205460ff811690610100900467ffffffffffffffff1682565b60408051921515835267ffffffffffffffff9091166020830152016101b0565b61025a6102ed3660046127ee565b610936565b6103056103003660046129a8565b610cf0565b6040516101b09190612a55565b6040805160038152600060208201526001918101919091526060016101b0565b610184610340366004612a68565b610da1565b610184610e7a565b6101cc61035b366004612692565b610e8e565b60005473ffffffffffffffffffffffffffffffffffffffff16610222565b61022261038c3660046127ee565b611088565b61022261039f3660046127ee565b600460209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff1681565b6101846103e0366004612692565b611103565b6101846103f3366004612a92565b611204565b610184610406366004612aaf565b6112bb565b610417848484846113bc565b50505050565b60008061042b858585610e8e565b600281111561043c5761043c6126de565b036104495750600061044d565b5060025b9392505050565b61045c6114d0565b60005b818110156105fb573683838381811061047a5761047a612b20565b905060200281019061048c9190612b4f565b905060ff61049d6020830183612b8d565b6104ae906040810190602001612bd2565b60ff16036104e8576040517f1b66804100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff6104f76020830183612b8d565b610508906060810190604001612bd2565b60ff1603610542576040517f05f7ab6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff6105586020830183612b8d565b610566906020810190612bed565b67ffffffffffffffff16036105a7576040517f8f6ae8f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105c56105b76020830183612b8d565b6105c090612dda565b611551565b6105f260006105d76020840184612677565b6105e46020850185612b8d565b6105ed90612dda565b6115a2565b5060010161045f565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b560828260405161062d929190612e98565b60405180910390a15050565b6040805160c0810182526000808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff8316600090815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a0100000000000000000000909104166060820152928101805485518185028101850190965280865293949193608086019383018282801561075a57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161072f575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156107c957602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161079e575b50505050508152505090505b92915050565b6107e36114d0565b60005b81811015610904573683838381811061080157610801612b20565b9050604002019050600073ffffffffffffffffffffffffffffffffffffffff168160200160208101906108349190612a92565b73ffffffffffffffffffffffffffffffffffffffff1603610881576040517f710c949700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108916040820160208301612a92565b600560006108a26020850185612677565b63ffffffff168152602081019190915260400160002080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055506001016107e6565b507f2a2676897ce6724d11fb8016f9bcdfe9fe564bc3524411d5df7914aac78aeeb3828260405161062d929190613037565b6040805160c0810182526000808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff16806109e657825467ffffffffffffffff168452610a05565b67ffffffffffffffff81811614610a055767ffffffffffffffff811684525b815468010000000000000000900460ff16610abb57825468010000000000000000900460ff1615610ab65782600101805480602002602001604051908101604052809291908181526020018280548015610a9557602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610a6a575b50505050506080850152825468010000000000000000900460ff1660208501525b610b59565b815468010000000000000000900460ff90811614610b595781600101805480602002602001604051908101604052809291908181526020018280548015610b3857602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610b0d575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff16610c285782546901000000000000000000900460ff1615610c235782600201805480602002602001604051908101604052809291908181526020018280548015610beb57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610bc0575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610cde565b81546901000000000000000000900460ff90811614610cde5781600201805480602002602001604051908101604052809291908181526020018280548015610ca657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610c7b575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610ce784611551565b50505092915050565b606060018203610d4157610d08838561ffff16611088565b6040805173ffffffffffffffffffffffffffffffffffffffff9092166020830152015b604051602081830303815290604052905061044d565b60028203610d6757610d57838561ffff16610936565b604051602001610d2b91906128e7565b6040517f961a995f000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b610da96114d0565b6020811115610de4576040517fbcfcf59e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff821660009081526003602052604090205415610e2f576040517f831ad0ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff8216600081815260036020908152604091829020849055815192835282018390527ee9ab3709e58edd0db46318d63673d8ae4681fa3e51d9f9dc07cde5109ff748910161062d565b610e826114d0565b610e8c6000611936565b565b6000610ebb84847f00000000000000000000000000000000000000000000000000000000000000006119ab565b6000610ec78585611a7e565b90506000610ee3610ed88787611a90565b63ffffffff16611ab3565b90506000610ef18787611b4b565b61ffff831660009081526003602052604081205491925090610f1d90610f178a8a611b6e565b90611b87565b84604051602001610f2f9291906130aa565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527ffdc07c70000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063fdc07c7090610fd190869085906004016130f4565b602060405180830381865afa158015610fee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110129190613111565b67ffffffffffffffff168267ffffffffffffffff161161103957600294505050505061044d565b61106861104a858561ffff16610936565b898960405161105a92919061312e565b604051809103902088611c28565b1561107a57600194505050505061044d565b506000979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260046020908152604080832063ffffffff86168452909152812054909116806110f95763ffffffff831660009081526005602052604090205473ffffffffffffffffffffffffffffffffffffffff166110fb565b805b949350505050565b3660006111108585611d31565b9150915061113f82827f00000000000000000000000000000000000000000000000000000000000000006119ab565b600061114b8686611a7e565b9050600061115c610ed88888611a90565b9050600061116e838361ffff16610936565b905061119b81868660405161118492919061312e565b60405180910390206111968b8b611d4d565b611d77565b6111fa826111a98a8a611b6e565b856111b48c8c611b4b565b6111be8d8d611f26565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508e9250611f36915050565b5050505050505050565b61120c6114d0565b73ffffffffffffffffffffffffffffffffffffffff81166112af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610d98565b6112b881611936565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461132a576040517f7eb966c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113378561ffff166121e9565b6001830361135e5761135961ffff86168561135484860186612a92565b612230565b6113b5565b600283036113805761135961ffff86168561137b8486018661313e565b6122db565b6040517f961a995f00000000000000000000000000000000000000000000000000000000815260048101849052602401610d98565b5050505050565b6040805180820182526001815267ffffffffffffffff8316602082015290516002906000906113ee908890889061312e565b6040805191829003909120825260208083019390935290810160009081208682528352818120338083529084529082902084518154959094015167ffffffffffffffff16610100027fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909516949094179290921790925590517f2cb0eed7538baeae4c6fde038c0fd0384d27de0dd55a228c65847bda6aa1ab56916114c2918790879086908890613173565b60405180910390a150505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d98565b602081015160ff1615801561156b5750606081015160ff16155b156112b8576040517f7e36c28400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff90811614806115bd5750602081015160ff16155b1561160457608081015151156115ff576040517f1b66804100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611683565b806020015160ff1681608001515114158061163f57506002611628600160ff613227565b6116329190613240565b60ff16816020015160ff16115b15611676576040517f1b66804100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116838160800151612324565b604081015160ff908116148061169e5750604081015160ff16155b156117245760a081015151156116e0576040517f05f7ab6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff161561171f576040517f81da67ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117fb565b806040015160ff168160a001515114158061175f57506002611748600160ff613227565b6117529190613240565b60ff16816040015160ff16115b15611796576040517f05f7ab6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615806117b75750806040015160ff16816060015160ff16115b156117ee576040517f81da67ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117fb8160a00151612324565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a010000000000000000000095909116949094029390931783556080840151805185949361191293908501920190612506565b5060a0820151805161192e916002840191602090910190612506565b505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b605182146119e5576040517f0666bafd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016119f184846123be565b60ff1614611a2b576040517f28fac06600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8063ffffffff16611a3c84846123e0565b63ffffffff1614611a79576040517f9a61cd2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b600061044d611a8d84846123f0565b90565b6000611aa0600d60098486613289565b611aa9916132b3565b60e01c9392505050565b600061ffff821115611b47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f36206269747300000000000000000000000000000000000000000000000000006064820152608401610d98565b5090565b6000611b5b600960018486613289565b611b64916132fb565b60c01c9392505050565b6000611b7e602d600d8486613289565b61044d91613341565b6060811580611b965750602082115b15611bcd576040517f59baef1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8167ffffffffffffffff811115611be657611be6612c0a565b6040519080825280601f01601f191660200182016040528015611c10576020820181803683370190505b506008909202610100039290921b6020820152919050565b602083015160009060ff1615611cab5760005b846020015160ff168160ff161015611c9357611c7d85608001518260ff1681518110611c6957611c69612b20565b602002602001015185858860000151612400565b611c8b57600091505061044d565b600101611c3b565b50836040015160ff16600003611cab5750600161044d565b606084015160005b856040015160ff168160ff161015611d2557611cf58660a001518260ff1681518110611ce157611ce1612b20565b602002602001015186868960000151612400565b15611d1d5781611d048161337d565b9250508160ff16600003611d1d5760019250505061044d565b600101611cb3565b50600095945050505050565b366000611d416051828587613289565b915091505b9250929050565b6000611d59838361248f565b604051611d6792919061312e565b6040518091039020905092915050565b611d82838383611c28565b611db8576040517f692c93cb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602083015160ff1615611e705760005b836020015160ff168160ff161015611e6e57600083815260026020908152604080832085845290915281206080860151805191929160ff8516908110611e1057611e10612b20565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000169055600101611dc8565b505b604083015160ff1615611a795760005b836040015160ff168160ff161015610417576000838152600260209081526040808320858452909152812060a0860151805191929160ff8516908110611ec857611ec8612b20565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000169055600101611e80565b366000611d418360718187613289565b611f44848761ffff16611088565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fa8576040517f7fb6be0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163b600003612045578373ffffffffffffffffffffffffffffffffffffffff168661ffff167feca5e9e3d49c3ee9d9362efa82baa91c668a7f032b3a403638ae65e273680136878686805190602001206040516120389392919092835267ffffffffffffffff919091166020830152604082015260600190565b60405180910390a361192e565b61ffff8616600090815260036020526040812054612064908790611b87565b856040516020016120769291906130aa565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fc2fa4813000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c2fa481390612120908a9085908a908a9089908b906004016133b8565b600060405180830381600087803b15801561213a57600080fd5b505af115801561214e573d6000803e3d6000fd5b5050604080516060808201835261ffff8c1680835260208084018d815267ffffffffffffffff8c8116868801908152875194855291519284019290925251169381019390935273ffffffffffffffffffffffffffffffffffffffff8a169083015292507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca04915060800160405180910390a15050505050505050565b6121f28161249f565b6112b8576040517f2146a07a00000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610d98565b73ffffffffffffffffffffffffffffffffffffffff828116600081815260046020908152604080832063ffffffff89168085529083529281902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001695871695861790558051938452908301919091528101919091527f2bef5fe6b6383925f8e9893d464521c5fcd4f9d4dc14d32d900849c5ae0af710906060015b60405180910390a1505050565b6122e68284836115a2565b6122f08284610936565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f50818284836040516122ce93929190613426565b6000805b8251811015611a7957600083828151811061234557612345612b20565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16116123b4576040517fa228a30b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150600101612328565b60006123cd6001828486613289565b6123d691613461565b60f81c9392505050565b6000611aa06031602d8486613289565b6000611b7e605160318486613289565b6000838152600260209081526040808320858452825280832073ffffffffffffffffffffffffffffffffffffffff88168452825280832081518083019092525460ff811615801580845261010090920467ffffffffffffffff1693830193909352909161248557508267ffffffffffffffff16816020015167ffffffffffffffff1610155b9695505050505050565b366000611d418360518187613289565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff1615158061044d5750546a0100000000000000000000900460ff16151592915050565b828054828255906000526020600020908101928215612580579160200282015b8281111561258057825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190612526565b50611b479291505b80821115611b475760008155600101612588565b60008083601f8401126125ae57600080fd5b50813567ffffffffffffffff8111156125c657600080fd5b602083019150836020828501011115611d4657600080fd5b67ffffffffffffffff811681146112b857600080fd5b80356125ff816125de565b919050565b6000806000806060858703121561261a57600080fd5b843567ffffffffffffffff81111561263157600080fd5b61263d8782880161259c565b909550935050602085013591506040850135612658816125de565b939692955090935050565b803563ffffffff811681146125ff57600080fd5b60006020828403121561268957600080fd5b61044d82612663565b6000806000604084860312156126a757600080fd5b833567ffffffffffffffff8111156126be57600080fd5b6126ca8682870161259c565b909790965060209590950135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381106112b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016127518361270d565b91905290565b6000806020838503121561276a57600080fd5b823567ffffffffffffffff8082111561278257600080fd5b818501915085601f83011261279657600080fd5b8135818111156127a557600080fd5b8660208260051b85010111156127ba57600080fd5b60209290920196919550909350505050565b73ffffffffffffffffffffffffffffffffffffffff811681146112b857600080fd5b6000806040838503121561280157600080fd5b823561280c816127cc565b915061281a60208401612663565b90509250929050565b60008151808452602080850194506020840160005b8381101561286a57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101612838565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c060808501526128c560c0850182612823565b905060a083015184820360a08601526128de8282612823565b95945050505050565b60208152600061044d6020830184612875565b6000806020838503121561290d57600080fd5b823567ffffffffffffffff8082111561292557600080fd5b818501915085601f83011261293957600080fd5b81358181111561294857600080fd5b8660208260061b85010111156127ba57600080fd5b60008060006060848603121561297257600080fd5b8335925060208401359150604084013561298b816127cc565b809150509250925092565b803561ffff811681146125ff57600080fd5b6000806000606084860312156129bd57600080fd5b6129c684612996565b925060208401356129d6816127cc565b929592945050506040919091013590565b60005b83811015612a025781810151838201526020016129ea565b50506000910152565b60008151808452612a238160208601602086016129e7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061044d6020830184612a0b565b60008060408385031215612a7b57600080fd5b612a8483612996565b946020939093013593505050565b600060208284031215612aa457600080fd5b81356110f9816127cc565b600080600080600060808688031215612ac757600080fd5b612ad086612996565b94506020860135612ae0816127cc565b935060408601359250606086013567ffffffffffffffff811115612b0357600080fd5b612b0f8882890161259c565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112612b8357600080fd5b9190910192915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112612b8357600080fd5b803560ff811681146125ff57600080fd5b600060208284031215612be457600080fd5b61044d82612bc1565b600060208284031215612bff57600080fd5b81356110f9816125de565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715612c5c57612c5c612c0a565b60405290565b600082601f830112612c7357600080fd5b8135602067ffffffffffffffff80831115612c9057612c90612c0a565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715612cd357612cd3612c0a565b6040529384526020818701810194908101925087851115612cf357600080fd5b6020870191505b84821015612d1c578135612d0d816127cc565b83529183019190830190612cfa565b979650505050505050565b600060c08284031215612d3957600080fd5b612d41612c39565b9050612d4c826125f4565b8152612d5a60208301612bc1565b6020820152612d6b60408301612bc1565b6040820152612d7c60608301612bc1565b6060820152608082013567ffffffffffffffff80821115612d9c57600080fd5b612da885838601612c62565b608084015260a0840135915080821115612dc157600080fd5b50612dce84828501612c62565b60a08301525092915050565b60006107d53683612d27565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612e1b57600080fd5b830160208101925035905067ffffffffffffffff811115612e3b57600080fd5b8060051b3603821315611d4657600080fd5b8183526000602080850194508260005b8581101561286a578135612e70816127cc565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101612e5d565b60208082528181018390526000906040808401600586901b8501820187855b88811015613029577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c3603018112612f1957600080fd5b8b0163ffffffff612f2982612663565b168552878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41823603018112612f6057600080fd5b858901889052018035612f72816125de565b67ffffffffffffffff1685880152612f8b818901612bc1565b606060ff80831682890152612fa18a8501612bc1565b92506080818416818a0152612fb7838601612bc1565b935060a09250818416838a0152612fd081860186612de6565b60c08b81015294509150612feb905061010089018483612e4d565b925050612ffa81840184612de6565b93509050838783030160e0880152613013828483612e4d565b978a019796505050928701925050600101612eb7565b509098975050505050505050565b6020808252818101839052600090604080840186845b8781101561309d5763ffffffff61306383612663565b16835284820135613073816127cc565b73ffffffffffffffffffffffffffffffffffffffff1683860152918301919083019060010161304d565b5090979650505050505050565b600083516130bc8184602088016129e7565b60609390931b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190920190815260140192915050565b61ffff831681526040602082015260006110fb6040830184612a0b565b60006020828403121561312357600080fd5b81516110f9816125de565b8183823760009101908152919050565b60006020828403121561315057600080fd5b813567ffffffffffffffff81111561316757600080fd5b6110fb84828501612d27565b73ffffffffffffffffffffffffffffffffffffffff8616815260806020820152836080820152838560a0830137600060a08583010152600060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f870116830101905067ffffffffffffffff841660408301528260608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff82811682821603908111156107d5576107d56131f8565b600060ff83168061327a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b8060ff84160491505092915050565b6000808585111561329957600080fd5b838611156132a657600080fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156132f35780818660040360031b1b83161692505b505092915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156132f35760089490940360031b84901b1690921692915050565b803560208310156107d5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b600060ff821680613390576133906131f8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b61ffff8716815260c0602082015260006133d560c0830188612a0b565b73ffffffffffffffffffffffffffffffffffffffff8716604084015267ffffffffffffffff8616606084015284608084015282810360a08401526134198185612a0b565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526060604082015260006128de6060830184612875565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156132f35760019490940360031b84901b169092169291505056fea264697066735822122016ab2a1b86b2d496018d630e2accfc9427a51856284c4ab0d6b61e232d3575c664736f6c63430008160033",
1033
1002
  "devdoc": {
1034
1003
  "details": "ULN301 will be deployed on EndpointV1 and is for backward compatibility with ULN302 on EndpointV2. 301 can talk to both 301 and 302This is a gluing contract. It simply parses the requests and forward to the super.impl() accordingly.In this case, it combines the logic of ReceiveUlnBase and ReceiveLibBaseE1",
1035
1004
  "kind": "dev",
@@ -1051,6 +1020,9 @@
1051
1020
  },
1052
1021
  "transferOwnership(address)": {
1053
1022
  "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
1023
+ },
1024
+ "verifiable(bytes,bytes32)": {
1025
+ "details": "keeping the same interface as 302a verifiable message requires it to be ULN verifiable only, excluding the endpoint verifiable check"
1054
1026
  }
1055
1027
  },
1056
1028
  "version": 1
@@ -1063,7 +1035,7 @@
1063
1035
  "storageLayout": {
1064
1036
  "storage": [
1065
1037
  {
1066
- "astId": 7779,
1038
+ "astId": 6813,
1067
1039
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1068
1040
  "label": "_owner",
1069
1041
  "offset": 0,
@@ -1071,23 +1043,23 @@
1071
1043
  "type": "t_address"
1072
1044
  },
1073
1045
  {
1074
- "astId": 17969,
1046
+ "astId": 16927,
1075
1047
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1076
1048
  "label": "ulnConfigs",
1077
1049
  "offset": 0,
1078
1050
  "slot": "1",
1079
- "type": "t_mapping(t_address,t_mapping(t_uint32,t_struct(UlnConfig)17918_storage))"
1051
+ "type": "t_mapping(t_address,t_mapping(t_uint32,t_struct(UlnConfig)16876_storage))"
1080
1052
  },
1081
1053
  {
1082
- "astId": 17043,
1054
+ "astId": 16033,
1083
1055
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1084
1056
  "label": "hashLookup",
1085
1057
  "offset": 0,
1086
1058
  "slot": "2",
1087
- "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_mapping(t_address,t_struct(Verification)17028_storage)))"
1059
+ "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_mapping(t_address,t_struct(Verification)16018_storage)))"
1088
1060
  },
1089
1061
  {
1090
- "astId": 23922,
1062
+ "astId": 21564,
1091
1063
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1092
1064
  "label": "addressSizes",
1093
1065
  "offset": 0,
@@ -1095,7 +1067,7 @@
1095
1067
  "type": "t_mapping(t_uint32,t_uint256)"
1096
1068
  },
1097
1069
  {
1098
- "astId": 24026,
1070
+ "astId": 21668,
1099
1071
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1100
1072
  "label": "executors",
1101
1073
  "offset": 0,
@@ -1103,7 +1075,7 @@
1103
1075
  "type": "t_mapping(t_address,t_mapping(t_uint32,t_address))"
1104
1076
  },
1105
1077
  {
1106
- "astId": 24030,
1078
+ "astId": 21672,
1107
1079
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1108
1080
  "label": "defaultExecutors",
1109
1081
  "offset": 0,
@@ -1140,33 +1112,33 @@
1140
1112
  "numberOfBytes": "32",
1141
1113
  "value": "t_mapping(t_uint32,t_address)"
1142
1114
  },
1143
- "t_mapping(t_address,t_mapping(t_uint32,t_struct(UlnConfig)17918_storage))": {
1115
+ "t_mapping(t_address,t_mapping(t_uint32,t_struct(UlnConfig)16876_storage))": {
1144
1116
  "encoding": "mapping",
1145
1117
  "key": "t_address",
1146
1118
  "label": "mapping(address => mapping(uint32 => struct UlnConfig))",
1147
1119
  "numberOfBytes": "32",
1148
- "value": "t_mapping(t_uint32,t_struct(UlnConfig)17918_storage)"
1120
+ "value": "t_mapping(t_uint32,t_struct(UlnConfig)16876_storage)"
1149
1121
  },
1150
- "t_mapping(t_address,t_struct(Verification)17028_storage)": {
1122
+ "t_mapping(t_address,t_struct(Verification)16018_storage)": {
1151
1123
  "encoding": "mapping",
1152
1124
  "key": "t_address",
1153
1125
  "label": "mapping(address => struct Verification)",
1154
1126
  "numberOfBytes": "32",
1155
- "value": "t_struct(Verification)17028_storage"
1127
+ "value": "t_struct(Verification)16018_storage"
1156
1128
  },
1157
- "t_mapping(t_bytes32,t_mapping(t_address,t_struct(Verification)17028_storage))": {
1129
+ "t_mapping(t_bytes32,t_mapping(t_address,t_struct(Verification)16018_storage))": {
1158
1130
  "encoding": "mapping",
1159
1131
  "key": "t_bytes32",
1160
1132
  "label": "mapping(bytes32 => mapping(address => struct Verification))",
1161
1133
  "numberOfBytes": "32",
1162
- "value": "t_mapping(t_address,t_struct(Verification)17028_storage)"
1134
+ "value": "t_mapping(t_address,t_struct(Verification)16018_storage)"
1163
1135
  },
1164
- "t_mapping(t_bytes32,t_mapping(t_bytes32,t_mapping(t_address,t_struct(Verification)17028_storage)))": {
1136
+ "t_mapping(t_bytes32,t_mapping(t_bytes32,t_mapping(t_address,t_struct(Verification)16018_storage)))": {
1165
1137
  "encoding": "mapping",
1166
1138
  "key": "t_bytes32",
1167
1139
  "label": "mapping(bytes32 => mapping(bytes32 => mapping(address => struct Verification)))",
1168
1140
  "numberOfBytes": "32",
1169
- "value": "t_mapping(t_bytes32,t_mapping(t_address,t_struct(Verification)17028_storage))"
1141
+ "value": "t_mapping(t_bytes32,t_mapping(t_address,t_struct(Verification)16018_storage))"
1170
1142
  },
1171
1143
  "t_mapping(t_uint32,t_address)": {
1172
1144
  "encoding": "mapping",
@@ -1175,12 +1147,12 @@
1175
1147
  "numberOfBytes": "32",
1176
1148
  "value": "t_address"
1177
1149
  },
1178
- "t_mapping(t_uint32,t_struct(UlnConfig)17918_storage)": {
1150
+ "t_mapping(t_uint32,t_struct(UlnConfig)16876_storage)": {
1179
1151
  "encoding": "mapping",
1180
1152
  "key": "t_uint32",
1181
1153
  "label": "mapping(uint32 => struct UlnConfig)",
1182
1154
  "numberOfBytes": "32",
1183
- "value": "t_struct(UlnConfig)17918_storage"
1155
+ "value": "t_struct(UlnConfig)16876_storage"
1184
1156
  },
1185
1157
  "t_mapping(t_uint32,t_uint256)": {
1186
1158
  "encoding": "mapping",
@@ -1189,12 +1161,12 @@
1189
1161
  "numberOfBytes": "32",
1190
1162
  "value": "t_uint256"
1191
1163
  },
1192
- "t_struct(UlnConfig)17918_storage": {
1164
+ "t_struct(UlnConfig)16876_storage": {
1193
1165
  "encoding": "inplace",
1194
1166
  "label": "struct UlnConfig",
1195
1167
  "members": [
1196
1168
  {
1197
- "astId": 17905,
1169
+ "astId": 16863,
1198
1170
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1199
1171
  "label": "confirmations",
1200
1172
  "offset": 0,
@@ -1202,7 +1174,7 @@
1202
1174
  "type": "t_uint64"
1203
1175
  },
1204
1176
  {
1205
- "astId": 17907,
1177
+ "astId": 16865,
1206
1178
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1207
1179
  "label": "requiredDVNCount",
1208
1180
  "offset": 8,
@@ -1210,7 +1182,7 @@
1210
1182
  "type": "t_uint8"
1211
1183
  },
1212
1184
  {
1213
- "astId": 17909,
1185
+ "astId": 16867,
1214
1186
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1215
1187
  "label": "optionalDVNCount",
1216
1188
  "offset": 9,
@@ -1218,7 +1190,7 @@
1218
1190
  "type": "t_uint8"
1219
1191
  },
1220
1192
  {
1221
- "astId": 17911,
1193
+ "astId": 16869,
1222
1194
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1223
1195
  "label": "optionalDVNThreshold",
1224
1196
  "offset": 10,
@@ -1226,7 +1198,7 @@
1226
1198
  "type": "t_uint8"
1227
1199
  },
1228
1200
  {
1229
- "astId": 17914,
1201
+ "astId": 16872,
1230
1202
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1231
1203
  "label": "requiredDVNs",
1232
1204
  "offset": 0,
@@ -1234,7 +1206,7 @@
1234
1206
  "type": "t_array(t_address)dyn_storage"
1235
1207
  },
1236
1208
  {
1237
- "astId": 17917,
1209
+ "astId": 16875,
1238
1210
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1239
1211
  "label": "optionalDVNs",
1240
1212
  "offset": 0,
@@ -1244,12 +1216,12 @@
1244
1216
  ],
1245
1217
  "numberOfBytes": "96"
1246
1218
  },
1247
- "t_struct(Verification)17028_storage": {
1219
+ "t_struct(Verification)16018_storage": {
1248
1220
  "encoding": "inplace",
1249
1221
  "label": "struct Verification",
1250
1222
  "members": [
1251
1223
  {
1252
- "astId": 17025,
1224
+ "astId": 16015,
1253
1225
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1254
1226
  "label": "submitted",
1255
1227
  "offset": 0,
@@ -1257,7 +1229,7 @@
1257
1229
  "type": "t_bool"
1258
1230
  },
1259
1231
  {
1260
- "astId": 17027,
1232
+ "astId": 16017,
1261
1233
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1262
1234
  "label": "confirmations",
1263
1235
  "offset": 1,