@keep-network/tbtc-v2 1.5.0 → 1.5.1

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/build/contracts/GovernanceUtils.sol/GovernanceUtils.dbg.json +1 -1
  2. package/build/contracts/bank/Bank.sol/Bank.dbg.json +1 -1
  3. package/build/contracts/bank/IReceiveBalanceApproval.sol/IReceiveBalanceApproval.dbg.json +1 -1
  4. package/build/contracts/bridge/BitcoinTx.sol/BitcoinTx.dbg.json +1 -1
  5. package/build/contracts/bridge/Bridge.sol/Bridge.dbg.json +1 -1
  6. package/build/contracts/bridge/BridgeGovernanceParameters.sol/BridgeGovernanceParameters.dbg.json +1 -1
  7. package/build/contracts/bridge/BridgeState.sol/BridgeState.dbg.json +1 -1
  8. package/build/contracts/bridge/Deposit.sol/Deposit.dbg.json +1 -1
  9. package/build/contracts/bridge/DepositSweep.sol/DepositSweep.dbg.json +1 -1
  10. package/build/contracts/bridge/EcdsaLib.sol/EcdsaLib.dbg.json +1 -1
  11. package/build/contracts/bridge/Fraud.sol/Fraud.dbg.json +1 -1
  12. package/build/contracts/bridge/Heartbeat.sol/Heartbeat.dbg.json +1 -1
  13. package/build/contracts/bridge/IRelay.sol/IRelay.dbg.json +1 -1
  14. package/build/contracts/bridge/MovingFunds.sol/MovingFunds.dbg.json +1 -1
  15. package/build/contracts/bridge/Redemption.sol/OutboundTx.dbg.json +1 -1
  16. package/build/contracts/bridge/Redemption.sol/Redemption.dbg.json +1 -1
  17. package/build/contracts/bridge/VendingMachine.sol/VendingMachine.dbg.json +1 -1
  18. package/build/contracts/bridge/VendingMachineV2.sol/VendingMachineV2.dbg.json +1 -1
  19. package/build/contracts/bridge/VendingMachineV3.sol/VendingMachineV3.dbg.json +1 -1
  20. package/build/contracts/bridge/WalletCoordinator.sol/WalletCoordinator.dbg.json +1 -1
  21. package/build/contracts/bridge/Wallets.sol/Wallets.dbg.json +1 -1
  22. package/build/contracts/l2/L2TBTC.sol/L2TBTC.dbg.json +1 -1
  23. package/build/contracts/l2/L2WormholeGateway.sol/IWormholeTokenBridge.dbg.json +1 -1
  24. package/build/contracts/l2/L2WormholeGateway.sol/L2WormholeGateway.dbg.json +1 -1
  25. package/build/contracts/l2/L2WormholeGateway.sol/L2WormholeGateway.json +2 -15
  26. package/build/contracts/maintainer/MaintainerProxy.sol/MaintainerProxy.dbg.json +1 -1
  27. package/build/contracts/relay/LightRelay.sol/ILightRelay.dbg.json +1 -1
  28. package/build/contracts/relay/LightRelay.sol/LightRelay.dbg.json +1 -1
  29. package/build/contracts/relay/LightRelay.sol/RelayUtils.dbg.json +1 -1
  30. package/build/contracts/relay/LightRelayMaintainerProxy.sol/LightRelayMaintainerProxy.dbg.json +1 -1
  31. package/build/contracts/token/TBTC.sol/TBTC.dbg.json +1 -1
  32. package/build/contracts/vault/DonationVault.sol/DonationVault.dbg.json +1 -1
  33. package/build/contracts/vault/IVault.sol/IVault.dbg.json +1 -1
  34. package/build/contracts/vault/TBTCOptimisticMinting.sol/TBTCOptimisticMinting.dbg.json +1 -1
  35. package/build/contracts/vault/TBTCVault.sol/TBTCVault.dbg.json +1 -1
  36. package/contracts/l2/L2WormholeGateway.sol +7 -27
  37. package/export/artifacts/contracts/bridge/VendingMachine.sol/VendingMachine.json +6 -6
  38. package/export/artifacts/contracts/bridge/VendingMachineV2.sol/VendingMachineV2.json +6 -6
  39. package/export/artifacts/contracts/bridge/VendingMachineV3.sol/VendingMachineV3.json +6 -6
  40. package/export/artifacts/contracts/l2/L2WormholeGateway.sol/L2WormholeGateway.json +3030 -3498
  41. package/export/artifacts/contracts/maintainer/MaintainerProxy.sol/MaintainerProxy.json +88 -88
  42. package/export/artifacts/contracts/relay/LightRelay.sol/LightRelay.json +57 -57
  43. package/export/artifacts/contracts/relay/LightRelayMaintainerProxy.sol/LightRelayMaintainerProxy.json +31 -31
  44. package/export/artifacts/contracts/test/BankStub.sol/BankStub.json +11975 -0
  45. package/export/artifacts/contracts/test/BridgeStub.sol/BridgeStub.json +51806 -0
  46. package/export/artifacts/contracts/test/GoerliLightRelay.sol/GoerliLightRelay.json +12024 -0
  47. package/export/artifacts/contracts/test/HeartbeatStub.sol/HeartbeatStub.json +822 -0
  48. package/export/artifacts/contracts/test/LightRelayStub.sol/LightRelayStub.json +12729 -0
  49. package/export/artifacts/contracts/test/ReceiveApprovalStub.sol/ReceiveApprovalStub.json +2160 -0
  50. package/export/artifacts/contracts/test/SystemTestRelay.sol/SystemTestRelay.json +3407 -0
  51. package/export/artifacts/contracts/test/TestERC20.sol/TestERC20.json +14263 -0
  52. package/export/artifacts/contracts/test/TestERC721.sol/TestERC721.json +10644 -0
  53. package/export/artifacts/contracts/test/TestEcdsaLib.sol/TestEcdsaLib.json +1160 -0
  54. package/export/artifacts/contracts/test/WormholeBridgeStub.sol/WormholeBridgeStub.json +8665 -0
  55. package/export/artifacts/contracts/token/TBTC.sol/TBTC.json +2 -2
  56. package/export/artifacts/contracts/vault/DonationVault.sol/DonationVault.json +11 -11
  57. package/export/artifacts/contracts/vault/TBTCVault.sol/TBTCVault.json +135 -135
  58. package/export/test/integration/data/bls.js +12 -0
  59. package/export/test/integration/data/integration.js +133 -0
  60. package/export/test/integration/utils/ecdsa-wallet-registry.js +370 -0
  61. package/export/test/integration/utils/random-beacon.js +193 -0
  62. package/export/{deploy/08_deploy_maintainer_proxy.js → test/integration/utils/staking.js} +35 -32
  63. package/export/typechain/factories/L2WormholeGateway__factory.js +1 -14
  64. package/export/typechain/factories/WormholeBridgeStub__factory.js +1 -1
  65. package/package.json +1 -1
  66. package/export/deploy/00_resolve_relay.js +0 -83
  67. package/export/deploy/01_deploy_tbtc_v2_token.js +0 -70
  68. package/export/deploy/02_deploy_vending_machine.js +0 -84
  69. package/export/deploy/03_transfer_vending_machine_roles.js +0 -69
  70. package/export/deploy/04_deploy_bank.js +0 -73
  71. package/export/deploy/05_deploy_bridge.js +0 -178
  72. package/export/deploy/06_deploy_tbtc_vault.js +0 -80
  73. package/export/deploy/07_deploy_bridge_governance.js +0 -87
  74. package/export/deploy/09_bank_update_bridge.js +0 -63
  75. package/export/deploy/10_authorize_spv_maintainer_in_bridge.js +0 -61
  76. package/export/deploy/11_transfer_bank_ownership.js +0 -60
  77. package/export/deploy/12_transfer_bridge_governance.js +0 -63
  78. package/export/deploy/13_transfer_bridge_governance_ownership.js +0 -60
  79. package/export/deploy/14_transfer_tbtc_vault_ownership.js +0 -60
  80. package/export/deploy/15_transfer_maintainer_proxy_ownership.js +0 -60
  81. package/export/deploy/16_initialize_wallet_owner.js +0 -63
  82. package/export/deploy/16_transfer_proxy_admin_ownership.js +0 -73
  83. package/export/deploy/17_authorize_maintainer_proxy_in_bridge.js +0 -63
  84. package/export/deploy/17_transfer_proxy_admin_ownership.js +0 -73
  85. package/export/deploy/18_authorize_maintainer_proxy_in_bridge.js +0 -63
  86. package/export/deploy/18_authorize_maintainer_proxy_in_reimbursement_pool.js +0 -63
  87. package/export/deploy/19_authorize_bridge_in_reimbursement_pool.js +0 -63
  88. package/export/deploy/19_authorize_maintainer_proxy_in_reimbursement_pool.js +0 -63
  89. package/export/deploy/20_authorize_bridge_in_reimbursement_pool.js +0 -63
  90. package/export/deploy/20_deploy_proxy_admin_with_deputy.js +0 -80
  91. package/export/deploy/21_transfer_reimbursement_pool_ownership.js +0 -60
  92. package/export/deploy/22_deploy_proxy_admin_with_deputy.js +0 -80
  93. package/export/deploy/24_transfer_maintainer_proxy_ownership.js +0 -60
  94. package/export/deploy/25_transfer_proxy_admin_ownership.js +0 -73
  95. package/export/deploy/26_authorize_maintainer_proxy_in_reimbursement_pool.js +0 -70
  96. package/export/deploy/27_authorize_bridge_in_reimbursement_pool.js +0 -70
  97. package/export/deploy/28_deploy_proxy_admin_with_deputy.js +0 -80
  98. package/export/deploy/35_transfer_wallet_coordinator_ownership.js +0 -60
  99. package/export/deploy/36_deploy_light_relay_maintainer_proxy.js +0 -86
  100. package/export/deploy/37_authorize_maintainer_in_light_relay_maintainer_proxy.js +0 -65
  101. package/export/deploy/38_transfer_light_relay_maintainer_proxy_ownership.js +0 -60
  102. package/export/deploy/39_authorize_light_relay_maintainer_proxy_in_reimbursement_pool.js +0 -70
  103. package/export/deploy/40_authorize_light_relay_maintainer_proxy_in_light_relay.js +0 -66
  104. package/export/typechain/RelayStub.js +0 -2
  105. package/export/typechain/TestRelay.js +0 -2
  106. package/export/typechain/factories/RelayStub__factory.js +0 -546
  107. package/export/typechain/factories/TestRelay__factory.js +0 -168
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -174,19 +174,6 @@
174
174
  "stateMutability": "view",
175
175
  "type": "function"
176
176
  },
177
- {
178
- "inputs": [
179
- {
180
- "internalType": "uint256",
181
- "name": "amount",
182
- "type": "uint256"
183
- }
184
- ],
185
- "name": "depositWormholeTbtc",
186
- "outputs": [],
187
- "stateMutability": "nonpayable",
188
- "type": "function"
189
- },
190
177
  {
191
178
  "inputs": [
192
179
  {
@@ -423,8 +410,8 @@
423
410
  "type": "function"
424
411
  }
425
412
  ],
426
- "bytecode": "0x608060405234801561001057600080fd5b50611e6d806100206000396000f3fe60806040526004361061010e5760003560e01c80638da5cb5b116100a5578063e1308b3311610074578063f2fde38b11610059578063f2fde38b146102f1578063f4734b0c14610311578063f69785f31461033157600080fd5b8063e1308b33146102b1578063e78cea92146102d157600080fd5b80638da5cb5b1461021f578063b4ccd8681461023d578063c0c53b8b1461026a578063ca05f9851461028a57600080fd5b806349072f12116100e157806349072f12146101b45780635d21a596146101ca578063715018a6146101ea57806375b1beaa146101ff57600080fd5b80630b575fe6146101135780632d3802421461014e578063363da98e1461017257806344949c9214610194575b600080fd5b34801561011f57600080fd5b5061013161012e36600461188a565b90565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561015a57600080fd5b50610164609c5481565b604051908152602001610145565b34801561017e57600080fd5b5061019261018d36600461188a565b61035d565b005b3480156101a057600080fd5b506101926101af36600461188a565b6103a0565b3480156101c057600080fd5b50610164609b5481565b3480156101d657600080fd5b506101926101e53660046118a3565b6104d3565b3480156101f657600080fd5b506101926108a0565b34801561020b57600080fd5b5061019261021a366004611925565b6108b4565b34801561022b57600080fd5b506033546001600160a01b0316610131565b34801561024957600080fd5b50610164610258366004611951565b609a6020526000908152604090205481565b34801561027657600080fd5b5061019261028536600461198a565b61090f565b34801561029657600080fd5b506101646102a53660046119d5565b6001600160a01b031690565b3480156102bd57600080fd5b50609954610131906001600160a01b031681565b3480156102dd57600080fd5b50609754610131906001600160a01b031681565b3480156102fd57600080fd5b5061019261030c3660046119d5565b610bca565b34801561031d57600080fd5b50609854610131906001600160a01b031681565b61034461033f3660046119f2565b610c5a565b60405167ffffffffffffffff9091168152602001610145565b6103656110ab565b609b8190556040518181527f876c61ade8d7fbb62356eefa0f1cb0d6d95fc5269dbe8d0d636051daa88d73999060200160405180910390a150565b609b5481609c546103b19190611a67565b11156104045760405162461bcd60e51b815260206004820152601660248201527f4d696e74696e67206c696d69742065786365656465640000000000000000000060448201526064015b60405180910390fd5b60408051338152602081018390527ff7f6725b273ddbe730c152e645cb3a946dd37dbc34344ba45f20975ff85aeb92910160405180910390a180609c600082825461044f9190611a67565b909155505060985461046c906001600160a01b0316333084611105565b6099546040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f1990604401600060405180830381600087803b1580156104b857600080fd5b505af11580156104cc573d6000803e3d6000fd5b5050505050565b6098546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561051c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105409190611a7a565b6097546040517fc3f511c10000000000000000000000000000000000000000000000000000000081529192506000916001600160a01b039091169063c3f511c1906105919087908790600401611a93565b6000604051808303816000875af11580156105b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105d89190810190611bae565b6098546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610626573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064a9190611a7a565b905060006106588483611be3565b9050600081116106aa5760405162461bcd60e51b815260206004820152601360248201527f4e6f2074425443207472616e736665727265640000000000000000000000000060448201526064016103fb565b6097546040517fea63738d00000000000000000000000000000000000000000000000000000000815260009161074c916001600160a01b039091169063ea63738d906106fa908890600401611c22565b600060405180830381865afa158015610717573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261073f9190810190611c56565b60e0015161012e90611d1f565b90506001600160a01b0381166107a45760405162461bcd60e51b815260206004820152601860248201527f307830207265636569766572206e6f7420616c6c6f776564000000000000000060448201526064016103fb565b609b5482609c546107b59190611a67565b11156107d7576098546107d2906001600160a01b031682846111b6565b610855565b81609c60008282546107e99190611a67565b90915550506099546040516340c10f1960e01b81526001600160a01b03838116600483015260248201859052909116906340c10f1990604401600060405180830381600087803b15801561083c57600080fd5b505af1158015610850573d6000803e3d6000fd5b505050505b604080516001600160a01b0383168152602081018490527fc7f080a0d33152d54d5972f0bac2d7984089c4849e2af42bca1a572728d339d7910160405180910390a150505050505050565b6108a86110ab565b6108b26000611204565b565b6108bc6110ab565b61ffff82166000818152609a6020908152604091829020849055815192835282018390527f1b29e2aa7a790fb04e7d6d73bf7ca63e2b4b1ffe0354fe94b4739c91f1a15359910160405180910390a15050565b600054610100900460ff161580801561092f5750600054600160ff909116105b806109495750303b158015610949575060005460ff166001145b6109bb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016103fb565b6000805460ff1916600117905580156109de576000805461ff0019166101001790555b6109e6611263565b6109ee6112d6565b6001600160a01b038416610a6a5760405162461bcd60e51b815260206004820152602760248201527f576f726d686f6c65206272696467652061646472657373206d757374206e6f7460448201527f206265203078300000000000000000000000000000000000000000000000000060648201526084016103fb565b6001600160a01b038316610acc5760405162461bcd60e51b8152602060048201526024808201527f42726964676520746f6b656e2061646472657373206d757374206e6f742062656044820152630203078360e41b60648201526084016103fb565b6001600160a01b038216610b2e5760405162461bcd60e51b8152602060048201526024808201527f4c325442544320746f6b656e2061646472657373206d757374206e6f742062656044820152630203078360e41b60648201526084016103fb565b609780546001600160a01b0380871673ffffffffffffffffffffffffffffffffffffffff1992831617909255609880548684169083161790556099805492851692909116919091179055600019609b558015610bc4576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610bd26110ab565b6001600160a01b038116610c4e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103fb565b610c5781611204565b50565b6000610c64611349565b83610cb15760405162461bcd60e51b815260206004820152601960248201527f30783020726563697069656e74206e6f7420616c6c6f7765640000000000000060448201526064016103fb565b85600003610d015760405162461bcd60e51b815260206004820152601460248201527f416d6f756e74206d757374206e6f74206265203000000000000000000000000060448201526064016103fb565b610d0a866113a2565b955085600003610d5c5760405162461bcd60e51b815260206004820152601860248201527f416d6f756e7420746f6f206c6f7720746f20627269646765000000000000000060448201526064016103fb565b6098546040516370a0823160e01b815230600482015287916001600160a01b0316906370a0823190602401602060405180830381865afa158015610da4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc89190611a7a565b1015610e3c5760405162461bcd60e51b815260206004820152603160248201527f4e6f7420656e6f75676820776f726d686f6c65207442544320696e207468652060448201527f6761746577617920746f2062726964676500000000000000000000000000000060648201526084016103fb565b61ffff85166000818152609a60209081526040918290205482518a815291820193909352908101829052606081018690526080810185905263ffffffff841660a08201527ffcdb8efef11d13bb0ebc515477ece314fdac305aeba3d6d9d371838bbe2435cf9060c00160405180910390a186609c6000828254610ebf9190611be3565b90915550506099546040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018990526001600160a01b03909116906379cc679090604401600060405180830381600087803b158015610f2957600080fd5b505af1158015610f3d573d6000803e3d6000fd5b5050609754609854610f5e93506001600160a01b03908116925016896113ca565b80611024576097546098546040517f0f5287b00000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018a905261ffff89166044820152606481018890526084810187905263ffffffff861660a4820152911690630f5287b090349060c4015b60206040518083038185885af1158015610ff7573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061101c9190611d46565b915050611098565b6097546098546040805160208082018a905282518083039091018152818301928390527fc5a5ebda000000000000000000000000000000000000000000000000000000009092526001600160a01b039384169363c5a5ebda933493610fd99392909116918d918d9189918c91604401611d70565b6110a26001606555565b95945050505050565b6033546001600160a01b031633146108b25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103fb565b6040516001600160a01b0380851660248301528316604482015260648101829052610bc49085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261151f565b6040516001600160a01b0383166024820152604481018290526111ff9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401611152565b505050565b603380546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166112ce5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103fb565b6108b2611604565b600054610100900460ff166113415760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103fb565b6108b2611678565b60026065540361139b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103fb565b6002606555565b60006113b36402540be40083611dc0565b91506113c46402540be40083611de2565b92915050565b80158061145d57506040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145b9190611a7a565b155b6114cf5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103fb565b6040516001600160a01b0383166024820152604481018290526111ff9084907f095ea7b30000000000000000000000000000000000000000000000000000000090606401611152565b6001606555565b6000611574826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166116e39092919063ffffffff16565b8051909150156111ff57808060200190518101906115929190611df9565b6111ff5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103fb565b600054610100900460ff1661166f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103fb565b6108b233611204565b600054610100900460ff166115185760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103fb565b60606116f284846000856116fa565b949350505050565b6060824710156117725760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103fb565b600080866001600160a01b0316858760405161178e9190611e1b565b60006040518083038185875af1925050503d80600081146117cb576040519150601f19603f3d011682016040523d82523d6000602084013e6117d0565b606091505b50915091506117e1878383876117ec565b979650505050505050565b6060831561185b578251600003611854576001600160a01b0385163b6118545760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103fb565b50816116f2565b6116f283838151156118705781518083602001fd5b8060405162461bcd60e51b81526004016103fb9190611c22565b60006020828403121561189c57600080fd5b5035919050565b600080602083850312156118b657600080fd5b823567ffffffffffffffff808211156118ce57600080fd5b818501915085601f8301126118e257600080fd5b8135818111156118f157600080fd5b86602082850101111561190357600080fd5b60209290920196919550909350505050565b61ffff81168114610c5757600080fd5b6000806040838503121561193857600080fd5b823561194381611915565b946020939093013593505050565b60006020828403121561196357600080fd5b813561196e81611915565b9392505050565b6001600160a01b0381168114610c5757600080fd5b60008060006060848603121561199f57600080fd5b83356119aa81611975565b925060208401356119ba81611975565b915060408401356119ca81611975565b809150509250925092565b6000602082840312156119e757600080fd5b813561196e81611975565b600080600080600060a08688031215611a0a57600080fd5b853594506020860135611a1c81611915565b93506040860135925060608601359150608086013563ffffffff81168114611a4357600080fd5b809150509295509295909350565b634e487b7160e01b600052601160045260246000fd5b808201808211156113c4576113c4611a51565b600060208284031215611a8c57600080fd5b5051919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715611afc57611afc611ac2565b60405290565b60005b83811015611b1d578181015183820152602001611b05565b50506000910152565b600082601f830112611b3757600080fd5b815167ffffffffffffffff80821115611b5257611b52611ac2565b604051601f8301601f19908116603f01168101908282118183101715611b7a57611b7a611ac2565b81604052838152866020858801011115611b9357600080fd5b611ba4846020830160208901611b02565b9695505050505050565b600060208284031215611bc057600080fd5b815167ffffffffffffffff811115611bd757600080fd5b6116f284828501611b26565b818103818111156113c4576113c4611a51565b60008151808452611c0e816020860160208601611b02565b601f01601f19169290920160200192915050565b60208152600061196e6020830184611bf6565b805160ff81168114611c4657600080fd5b919050565b8051611c4681611915565b600060208284031215611c6857600080fd5b815167ffffffffffffffff80821115611c8057600080fd5b908301906101008286031215611c9557600080fd5b611c9d611ad8565b611ca683611c35565b81526020830151602082015260408301516040820152611cc860608401611c4b565b606082015260808301516080820152611ce360a08401611c4b565b60a082015260c083015160c082015260e083015182811115611d0457600080fd5b611d1087828601611b26565b60e08301525095945050505050565b80516020808301519190811015611d40576000198160200360031b1b821691505b50919050565b600060208284031215611d5857600080fd5b815167ffffffffffffffff8116811461196e57600080fd5b6001600160a01b038716815285602082015261ffff8516604082015283606082015263ffffffff8316608082015260c060a08201526000611db460c0830184611bf6565b98975050505050505050565b600082611ddd57634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176113c4576113c4611a51565b600060208284031215611e0b57600080fd5b8151801515811461196e57600080fd5b60008251611e2d818460208701611b02565b919091019291505056fea26469706673582212203fcf6da3edc8eecb75051e8952eff919f1a9ccbf1e1cb6683ec8af46d847e39a64736f6c63430008110033",
427
- "deployedBytecode": "0x60806040526004361061010e5760003560e01c80638da5cb5b116100a5578063e1308b3311610074578063f2fde38b11610059578063f2fde38b146102f1578063f4734b0c14610311578063f69785f31461033157600080fd5b8063e1308b33146102b1578063e78cea92146102d157600080fd5b80638da5cb5b1461021f578063b4ccd8681461023d578063c0c53b8b1461026a578063ca05f9851461028a57600080fd5b806349072f12116100e157806349072f12146101b45780635d21a596146101ca578063715018a6146101ea57806375b1beaa146101ff57600080fd5b80630b575fe6146101135780632d3802421461014e578063363da98e1461017257806344949c9214610194575b600080fd5b34801561011f57600080fd5b5061013161012e36600461188a565b90565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561015a57600080fd5b50610164609c5481565b604051908152602001610145565b34801561017e57600080fd5b5061019261018d36600461188a565b61035d565b005b3480156101a057600080fd5b506101926101af36600461188a565b6103a0565b3480156101c057600080fd5b50610164609b5481565b3480156101d657600080fd5b506101926101e53660046118a3565b6104d3565b3480156101f657600080fd5b506101926108a0565b34801561020b57600080fd5b5061019261021a366004611925565b6108b4565b34801561022b57600080fd5b506033546001600160a01b0316610131565b34801561024957600080fd5b50610164610258366004611951565b609a6020526000908152604090205481565b34801561027657600080fd5b5061019261028536600461198a565b61090f565b34801561029657600080fd5b506101646102a53660046119d5565b6001600160a01b031690565b3480156102bd57600080fd5b50609954610131906001600160a01b031681565b3480156102dd57600080fd5b50609754610131906001600160a01b031681565b3480156102fd57600080fd5b5061019261030c3660046119d5565b610bca565b34801561031d57600080fd5b50609854610131906001600160a01b031681565b61034461033f3660046119f2565b610c5a565b60405167ffffffffffffffff9091168152602001610145565b6103656110ab565b609b8190556040518181527f876c61ade8d7fbb62356eefa0f1cb0d6d95fc5269dbe8d0d636051daa88d73999060200160405180910390a150565b609b5481609c546103b19190611a67565b11156104045760405162461bcd60e51b815260206004820152601660248201527f4d696e74696e67206c696d69742065786365656465640000000000000000000060448201526064015b60405180910390fd5b60408051338152602081018390527ff7f6725b273ddbe730c152e645cb3a946dd37dbc34344ba45f20975ff85aeb92910160405180910390a180609c600082825461044f9190611a67565b909155505060985461046c906001600160a01b0316333084611105565b6099546040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f1990604401600060405180830381600087803b1580156104b857600080fd5b505af11580156104cc573d6000803e3d6000fd5b5050505050565b6098546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561051c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105409190611a7a565b6097546040517fc3f511c10000000000000000000000000000000000000000000000000000000081529192506000916001600160a01b039091169063c3f511c1906105919087908790600401611a93565b6000604051808303816000875af11580156105b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105d89190810190611bae565b6098546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610626573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064a9190611a7a565b905060006106588483611be3565b9050600081116106aa5760405162461bcd60e51b815260206004820152601360248201527f4e6f2074425443207472616e736665727265640000000000000000000000000060448201526064016103fb565b6097546040517fea63738d00000000000000000000000000000000000000000000000000000000815260009161074c916001600160a01b039091169063ea63738d906106fa908890600401611c22565b600060405180830381865afa158015610717573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261073f9190810190611c56565b60e0015161012e90611d1f565b90506001600160a01b0381166107a45760405162461bcd60e51b815260206004820152601860248201527f307830207265636569766572206e6f7420616c6c6f776564000000000000000060448201526064016103fb565b609b5482609c546107b59190611a67565b11156107d7576098546107d2906001600160a01b031682846111b6565b610855565b81609c60008282546107e99190611a67565b90915550506099546040516340c10f1960e01b81526001600160a01b03838116600483015260248201859052909116906340c10f1990604401600060405180830381600087803b15801561083c57600080fd5b505af1158015610850573d6000803e3d6000fd5b505050505b604080516001600160a01b0383168152602081018490527fc7f080a0d33152d54d5972f0bac2d7984089c4849e2af42bca1a572728d339d7910160405180910390a150505050505050565b6108a86110ab565b6108b26000611204565b565b6108bc6110ab565b61ffff82166000818152609a6020908152604091829020849055815192835282018390527f1b29e2aa7a790fb04e7d6d73bf7ca63e2b4b1ffe0354fe94b4739c91f1a15359910160405180910390a15050565b600054610100900460ff161580801561092f5750600054600160ff909116105b806109495750303b158015610949575060005460ff166001145b6109bb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016103fb565b6000805460ff1916600117905580156109de576000805461ff0019166101001790555b6109e6611263565b6109ee6112d6565b6001600160a01b038416610a6a5760405162461bcd60e51b815260206004820152602760248201527f576f726d686f6c65206272696467652061646472657373206d757374206e6f7460448201527f206265203078300000000000000000000000000000000000000000000000000060648201526084016103fb565b6001600160a01b038316610acc5760405162461bcd60e51b8152602060048201526024808201527f42726964676520746f6b656e2061646472657373206d757374206e6f742062656044820152630203078360e41b60648201526084016103fb565b6001600160a01b038216610b2e5760405162461bcd60e51b8152602060048201526024808201527f4c325442544320746f6b656e2061646472657373206d757374206e6f742062656044820152630203078360e41b60648201526084016103fb565b609780546001600160a01b0380871673ffffffffffffffffffffffffffffffffffffffff1992831617909255609880548684169083161790556099805492851692909116919091179055600019609b558015610bc4576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610bd26110ab565b6001600160a01b038116610c4e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103fb565b610c5781611204565b50565b6000610c64611349565b83610cb15760405162461bcd60e51b815260206004820152601960248201527f30783020726563697069656e74206e6f7420616c6c6f7765640000000000000060448201526064016103fb565b85600003610d015760405162461bcd60e51b815260206004820152601460248201527f416d6f756e74206d757374206e6f74206265203000000000000000000000000060448201526064016103fb565b610d0a866113a2565b955085600003610d5c5760405162461bcd60e51b815260206004820152601860248201527f416d6f756e7420746f6f206c6f7720746f20627269646765000000000000000060448201526064016103fb565b6098546040516370a0823160e01b815230600482015287916001600160a01b0316906370a0823190602401602060405180830381865afa158015610da4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc89190611a7a565b1015610e3c5760405162461bcd60e51b815260206004820152603160248201527f4e6f7420656e6f75676820776f726d686f6c65207442544320696e207468652060448201527f6761746577617920746f2062726964676500000000000000000000000000000060648201526084016103fb565b61ffff85166000818152609a60209081526040918290205482518a815291820193909352908101829052606081018690526080810185905263ffffffff841660a08201527ffcdb8efef11d13bb0ebc515477ece314fdac305aeba3d6d9d371838bbe2435cf9060c00160405180910390a186609c6000828254610ebf9190611be3565b90915550506099546040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018990526001600160a01b03909116906379cc679090604401600060405180830381600087803b158015610f2957600080fd5b505af1158015610f3d573d6000803e3d6000fd5b5050609754609854610f5e93506001600160a01b03908116925016896113ca565b80611024576097546098546040517f0f5287b00000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018a905261ffff89166044820152606481018890526084810187905263ffffffff861660a4820152911690630f5287b090349060c4015b60206040518083038185885af1158015610ff7573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061101c9190611d46565b915050611098565b6097546098546040805160208082018a905282518083039091018152818301928390527fc5a5ebda000000000000000000000000000000000000000000000000000000009092526001600160a01b039384169363c5a5ebda933493610fd99392909116918d918d9189918c91604401611d70565b6110a26001606555565b95945050505050565b6033546001600160a01b031633146108b25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103fb565b6040516001600160a01b0380851660248301528316604482015260648101829052610bc49085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261151f565b6040516001600160a01b0383166024820152604481018290526111ff9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401611152565b505050565b603380546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166112ce5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103fb565b6108b2611604565b600054610100900460ff166113415760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103fb565b6108b2611678565b60026065540361139b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103fb565b6002606555565b60006113b36402540be40083611dc0565b91506113c46402540be40083611de2565b92915050565b80158061145d57506040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145b9190611a7a565b155b6114cf5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103fb565b6040516001600160a01b0383166024820152604481018290526111ff9084907f095ea7b30000000000000000000000000000000000000000000000000000000090606401611152565b6001606555565b6000611574826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166116e39092919063ffffffff16565b8051909150156111ff57808060200190518101906115929190611df9565b6111ff5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103fb565b600054610100900460ff1661166f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103fb565b6108b233611204565b600054610100900460ff166115185760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103fb565b60606116f284846000856116fa565b949350505050565b6060824710156117725760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103fb565b600080866001600160a01b0316858760405161178e9190611e1b565b60006040518083038185875af1925050503d80600081146117cb576040519150601f19603f3d011682016040523d82523d6000602084013e6117d0565b606091505b50915091506117e1878383876117ec565b979650505050505050565b6060831561185b578251600003611854576001600160a01b0385163b6118545760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103fb565b50816116f2565b6116f283838151156118705781518083602001fd5b8060405162461bcd60e51b81526004016103fb9190611c22565b60006020828403121561189c57600080fd5b5035919050565b600080602083850312156118b657600080fd5b823567ffffffffffffffff808211156118ce57600080fd5b818501915085601f8301126118e257600080fd5b8135818111156118f157600080fd5b86602082850101111561190357600080fd5b60209290920196919550909350505050565b61ffff81168114610c5757600080fd5b6000806040838503121561193857600080fd5b823561194381611915565b946020939093013593505050565b60006020828403121561196357600080fd5b813561196e81611915565b9392505050565b6001600160a01b0381168114610c5757600080fd5b60008060006060848603121561199f57600080fd5b83356119aa81611975565b925060208401356119ba81611975565b915060408401356119ca81611975565b809150509250925092565b6000602082840312156119e757600080fd5b813561196e81611975565b600080600080600060a08688031215611a0a57600080fd5b853594506020860135611a1c81611915565b93506040860135925060608601359150608086013563ffffffff81168114611a4357600080fd5b809150509295509295909350565b634e487b7160e01b600052601160045260246000fd5b808201808211156113c4576113c4611a51565b600060208284031215611a8c57600080fd5b5051919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715611afc57611afc611ac2565b60405290565b60005b83811015611b1d578181015183820152602001611b05565b50506000910152565b600082601f830112611b3757600080fd5b815167ffffffffffffffff80821115611b5257611b52611ac2565b604051601f8301601f19908116603f01168101908282118183101715611b7a57611b7a611ac2565b81604052838152866020858801011115611b9357600080fd5b611ba4846020830160208901611b02565b9695505050505050565b600060208284031215611bc057600080fd5b815167ffffffffffffffff811115611bd757600080fd5b6116f284828501611b26565b818103818111156113c4576113c4611a51565b60008151808452611c0e816020860160208601611b02565b601f01601f19169290920160200192915050565b60208152600061196e6020830184611bf6565b805160ff81168114611c4657600080fd5b919050565b8051611c4681611915565b600060208284031215611c6857600080fd5b815167ffffffffffffffff80821115611c8057600080fd5b908301906101008286031215611c9557600080fd5b611c9d611ad8565b611ca683611c35565b81526020830151602082015260408301516040820152611cc860608401611c4b565b606082015260808301516080820152611ce360a08401611c4b565b60a082015260c083015160c082015260e083015182811115611d0457600080fd5b611d1087828601611b26565b60e08301525095945050505050565b80516020808301519190811015611d40576000198160200360031b1b821691505b50919050565b600060208284031215611d5857600080fd5b815167ffffffffffffffff8116811461196e57600080fd5b6001600160a01b038716815285602082015261ffff8516604082015283606082015263ffffffff8316608082015260c060a08201526000611db460c0830184611bf6565b98975050505050505050565b600082611ddd57634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176113c4576113c4611a51565b600060208284031215611e0b57600080fd5b8151801515811461196e57600080fd5b60008251611e2d818460208701611b02565b919091019291505056fea26469706673582212203fcf6da3edc8eecb75051e8952eff919f1a9ccbf1e1cb6683ec8af46d847e39a64736f6c63430008110033",
413
+ "bytecode": "0x608060405234801561001057600080fd5b50611cde806100206000396000f3fe6080604052600436106100f35760003560e01c8063b4ccd8681161008a578063e78cea9211610059578063e78cea9214610296578063f2fde38b146102b6578063f4734b0c146102d6578063f69785f3146102f657600080fd5b8063b4ccd86814610202578063c0c53b8b1461022f578063ca05f9851461024f578063e1308b331461027657600080fd5b80635d21a596116100c65780635d21a5961461018f578063715018a6146101af57806375b1beaa146101c45780638da5cb5b146101e457600080fd5b80630b575fe6146100f85780632d38024214610133578063363da98e1461015757806349072f1214610179575b600080fd5b34801561010457600080fd5b506101166101133660046116fb565b90565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561013f57600080fd5b50610149609c5481565b60405190815260200161012a565b34801561016357600080fd5b506101776101723660046116fb565b610322565b005b34801561018557600080fd5b50610149609b5481565b34801561019b57600080fd5b506101776101aa366004611714565b610365565b3480156101bb57600080fd5b50610177610762565b3480156101d057600080fd5b506101776101df366004611796565b610776565b3480156101f057600080fd5b506033546001600160a01b0316610116565b34801561020e57600080fd5b5061014961021d3660046117c2565b609a6020526000908152604090205481565b34801561023b57600080fd5b5061017761024a3660046117fb565b6107d1565b34801561025b57600080fd5b5061014961026a366004611846565b6001600160a01b031690565b34801561028257600080fd5b50609954610116906001600160a01b031681565b3480156102a257600080fd5b50609754610116906001600160a01b031681565b3480156102c257600080fd5b506101776102d1366004611846565b610a8c565b3480156102e257600080fd5b50609854610116906001600160a01b031681565b610309610304366004611863565b610b1c565b60405167ffffffffffffffff909116815260200161012a565b61032a610f6d565b609b8190556040518181527f876c61ade8d7fbb62356eefa0f1cb0d6d95fc5269dbe8d0d636051daa88d73999060200160405180910390a150565b61036d610fc7565b6098546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156103b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103da91906118c2565b6097546040517fc3f511c10000000000000000000000000000000000000000000000000000000081529192506000916001600160a01b039091169063c3f511c19061042b90879087906004016118db565b6000604051808303816000875af115801561044a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261047291908101906119f6565b6098546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156104c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e491906118c2565b905060006104f28483611a41565b9050600081116105495760405162461bcd60e51b815260206004820152601360248201527f4e6f2074425443207472616e736665727265640000000000000000000000000060448201526064015b60405180910390fd5b6097546040517fea63738d0000000000000000000000000000000000000000000000000000000081526000916105eb916001600160a01b039091169063ea63738d90610599908890600401611a80565b600060405180830381865afa1580156105b6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105de9190810190611ab4565b60e0015161011390611b7d565b90506001600160a01b0381166106435760405162461bcd60e51b815260206004820152601860248201527f307830207265636569766572206e6f7420616c6c6f77656400000000000000006044820152606401610540565b609b5482609c546106549190611ba4565b111561067657609854610671906001600160a01b03168284611020565b61070d565b81609c60008282546106889190611ba4565b90915550506099546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260248201859052909116906340c10f1990604401600060405180830381600087803b1580156106f457600080fd5b505af1158015610708573d6000803e3d6000fd5b505050505b604080516001600160a01b0383168152602081018490527fc7f080a0d33152d54d5972f0bac2d7984089c4849e2af42bca1a572728d339d7910160405180910390a1505050505061075e6001606555565b5050565b61076a610f6d565b61077460006110d5565b565b61077e610f6d565b61ffff82166000818152609a6020908152604091829020849055815192835282018390527f1b29e2aa7a790fb04e7d6d73bf7ca63e2b4b1ffe0354fe94b4739c91f1a15359910160405180910390a15050565b600054610100900460ff16158080156107f15750600054600160ff909116105b8061080b5750303b15801561080b575060005460ff166001145b61087d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610540565b6000805460ff1916600117905580156108a0576000805461ff0019166101001790555b6108a8611134565b6108b06111a7565b6001600160a01b03841661092c5760405162461bcd60e51b815260206004820152602760248201527f576f726d686f6c65206272696467652061646472657373206d757374206e6f7460448201527f20626520307830000000000000000000000000000000000000000000000000006064820152608401610540565b6001600160a01b03831661098e5760405162461bcd60e51b8152602060048201526024808201527f42726964676520746f6b656e2061646472657373206d757374206e6f742062656044820152630203078360e41b6064820152608401610540565b6001600160a01b0382166109f05760405162461bcd60e51b8152602060048201526024808201527f4c325442544320746f6b656e2061646472657373206d757374206e6f742062656044820152630203078360e41b6064820152608401610540565b609780546001600160a01b0380871673ffffffffffffffffffffffffffffffffffffffff1992831617909255609880548684169083161790556099805492851692909116919091179055600019609b558015610a86576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610a94610f6d565b6001600160a01b038116610b105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610540565b610b19816110d5565b50565b6000610b26610fc7565b83610b735760405162461bcd60e51b815260206004820152601960248201527f30783020726563697069656e74206e6f7420616c6c6f776564000000000000006044820152606401610540565b85600003610bc35760405162461bcd60e51b815260206004820152601460248201527f416d6f756e74206d757374206e6f7420626520300000000000000000000000006044820152606401610540565b610bcc8661121a565b955085600003610c1e5760405162461bcd60e51b815260206004820152601860248201527f416d6f756e7420746f6f206c6f7720746f2062726964676500000000000000006044820152606401610540565b6098546040516370a0823160e01b815230600482015287916001600160a01b0316906370a0823190602401602060405180830381865afa158015610c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8a91906118c2565b1015610cfe5760405162461bcd60e51b815260206004820152603160248201527f4e6f7420656e6f75676820776f726d686f6c65207442544320696e207468652060448201527f6761746577617920746f206272696467650000000000000000000000000000006064820152608401610540565b61ffff85166000818152609a60209081526040918290205482518a815291820193909352908101829052606081018690526080810185905263ffffffff841660a08201527ffcdb8efef11d13bb0ebc515477ece314fdac305aeba3d6d9d371838bbe2435cf9060c00160405180910390a186609c6000828254610d819190611a41565b90915550506099546040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018990526001600160a01b03909116906379cc679090604401600060405180830381600087803b158015610deb57600080fd5b505af1158015610dff573d6000803e3d6000fd5b5050609754609854610e2093506001600160a01b0390811692501689611242565b80610ee6576097546098546040517f0f5287b00000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018a905261ffff89166044820152606481018890526084810187905263ffffffff861660a4820152911690630f5287b090349060c4015b60206040518083038185885af1158015610eb9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ede9190611bb7565b915050610f5a565b6097546098546040805160208082018a905282518083039091018152818301928390527fc5a5ebda000000000000000000000000000000000000000000000000000000009092526001600160a01b039384169363c5a5ebda933493610e9b9392909116918d918d9189918c91604401611be1565b610f646001606555565b95945050505050565b6033546001600160a01b031633146107745760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610540565b6002606554036110195760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610540565b6002606555565b6040516001600160a01b0383166024820152604481018290526110c99084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611390565b505050565b6001606555565b603380546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661119f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610540565b610774611475565b600054610100900460ff166112125760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610540565b6107746114e9565b600061122b6402540be40083611c31565b915061123c6402540be40083611c53565b92915050565b8015806112d557506040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156112af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d391906118c2565b155b6113475760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610540565b6040516001600160a01b0383166024820152604481018290526110c99084907f095ea7b30000000000000000000000000000000000000000000000000000000090606401611065565b60006113e5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115549092919063ffffffff16565b8051909150156110c957808060200190518101906114039190611c6a565b6110c95760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610540565b600054610100900460ff166114e05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610540565b610774336110d5565b600054610100900460ff166110ce5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610540565b6060611563848460008561156b565b949350505050565b6060824710156115e35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610540565b600080866001600160a01b031685876040516115ff9190611c8c565b60006040518083038185875af1925050503d806000811461163c576040519150601f19603f3d011682016040523d82523d6000602084013e611641565b606091505b50915091506116528783838761165d565b979650505050505050565b606083156116cc5782516000036116c5576001600160a01b0385163b6116c55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610540565b5081611563565b61156383838151156116e15781518083602001fd5b8060405162461bcd60e51b81526004016105409190611a80565b60006020828403121561170d57600080fd5b5035919050565b6000806020838503121561172757600080fd5b823567ffffffffffffffff8082111561173f57600080fd5b818501915085601f83011261175357600080fd5b81358181111561176257600080fd5b86602082850101111561177457600080fd5b60209290920196919550909350505050565b61ffff81168114610b1957600080fd5b600080604083850312156117a957600080fd5b82356117b481611786565b946020939093013593505050565b6000602082840312156117d457600080fd5b81356117df81611786565b9392505050565b6001600160a01b0381168114610b1957600080fd5b60008060006060848603121561181057600080fd5b833561181b816117e6565b9250602084013561182b816117e6565b9150604084013561183b816117e6565b809150509250925092565b60006020828403121561185857600080fd5b81356117df816117e6565b600080600080600060a0868803121561187b57600080fd5b85359450602086013561188d81611786565b93506040860135925060608601359150608086013563ffffffff811681146118b457600080fd5b809150509295509295909350565b6000602082840312156118d457600080fd5b5051919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff811182821017156119445761194461190a565b60405290565b60005b8381101561196557818101518382015260200161194d565b50506000910152565b600082601f83011261197f57600080fd5b815167ffffffffffffffff8082111561199a5761199a61190a565b604051601f8301601f19908116603f011681019082821181831017156119c2576119c261190a565b816040528381528660208588010111156119db57600080fd5b6119ec84602083016020890161194a565b9695505050505050565b600060208284031215611a0857600080fd5b815167ffffffffffffffff811115611a1f57600080fd5b6115638482850161196e565b634e487b7160e01b600052601160045260246000fd5b8181038181111561123c5761123c611a2b565b60008151808452611a6c81602086016020860161194a565b601f01601f19169290920160200192915050565b6020815260006117df6020830184611a54565b805160ff81168114611aa457600080fd5b919050565b8051611aa481611786565b600060208284031215611ac657600080fd5b815167ffffffffffffffff80821115611ade57600080fd5b908301906101008286031215611af357600080fd5b611afb611920565b611b0483611a93565b81526020830151602082015260408301516040820152611b2660608401611aa9565b606082015260808301516080820152611b4160a08401611aa9565b60a082015260c083015160c082015260e083015182811115611b6257600080fd5b611b6e8782860161196e565b60e08301525095945050505050565b80516020808301519190811015611b9e576000198160200360031b1b821691505b50919050565b8082018082111561123c5761123c611a2b565b600060208284031215611bc957600080fd5b815167ffffffffffffffff811681146117df57600080fd5b6001600160a01b038716815285602082015261ffff8516604082015283606082015263ffffffff8316608082015260c060a08201526000611c2560c0830184611a54565b98975050505050505050565b600082611c4e57634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761123c5761123c611a2b565b600060208284031215611c7c57600080fd5b815180151581146117df57600080fd5b60008251611c9e81846020870161194a565b919091019291505056fea2646970667358221220b291d4f116eaee9a0315797c6438d633227d2a991caa1d3985922e37d89cae9964736f6c63430008110033",
414
+ "deployedBytecode": "0x6080604052600436106100f35760003560e01c8063b4ccd8681161008a578063e78cea9211610059578063e78cea9214610296578063f2fde38b146102b6578063f4734b0c146102d6578063f69785f3146102f657600080fd5b8063b4ccd86814610202578063c0c53b8b1461022f578063ca05f9851461024f578063e1308b331461027657600080fd5b80635d21a596116100c65780635d21a5961461018f578063715018a6146101af57806375b1beaa146101c45780638da5cb5b146101e457600080fd5b80630b575fe6146100f85780632d38024214610133578063363da98e1461015757806349072f1214610179575b600080fd5b34801561010457600080fd5b506101166101133660046116fb565b90565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561013f57600080fd5b50610149609c5481565b60405190815260200161012a565b34801561016357600080fd5b506101776101723660046116fb565b610322565b005b34801561018557600080fd5b50610149609b5481565b34801561019b57600080fd5b506101776101aa366004611714565b610365565b3480156101bb57600080fd5b50610177610762565b3480156101d057600080fd5b506101776101df366004611796565b610776565b3480156101f057600080fd5b506033546001600160a01b0316610116565b34801561020e57600080fd5b5061014961021d3660046117c2565b609a6020526000908152604090205481565b34801561023b57600080fd5b5061017761024a3660046117fb565b6107d1565b34801561025b57600080fd5b5061014961026a366004611846565b6001600160a01b031690565b34801561028257600080fd5b50609954610116906001600160a01b031681565b3480156102a257600080fd5b50609754610116906001600160a01b031681565b3480156102c257600080fd5b506101776102d1366004611846565b610a8c565b3480156102e257600080fd5b50609854610116906001600160a01b031681565b610309610304366004611863565b610b1c565b60405167ffffffffffffffff909116815260200161012a565b61032a610f6d565b609b8190556040518181527f876c61ade8d7fbb62356eefa0f1cb0d6d95fc5269dbe8d0d636051daa88d73999060200160405180910390a150565b61036d610fc7565b6098546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156103b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103da91906118c2565b6097546040517fc3f511c10000000000000000000000000000000000000000000000000000000081529192506000916001600160a01b039091169063c3f511c19061042b90879087906004016118db565b6000604051808303816000875af115801561044a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261047291908101906119f6565b6098546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156104c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e491906118c2565b905060006104f28483611a41565b9050600081116105495760405162461bcd60e51b815260206004820152601360248201527f4e6f2074425443207472616e736665727265640000000000000000000000000060448201526064015b60405180910390fd5b6097546040517fea63738d0000000000000000000000000000000000000000000000000000000081526000916105eb916001600160a01b039091169063ea63738d90610599908890600401611a80565b600060405180830381865afa1580156105b6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105de9190810190611ab4565b60e0015161011390611b7d565b90506001600160a01b0381166106435760405162461bcd60e51b815260206004820152601860248201527f307830207265636569766572206e6f7420616c6c6f77656400000000000000006044820152606401610540565b609b5482609c546106549190611ba4565b111561067657609854610671906001600160a01b03168284611020565b61070d565b81609c60008282546106889190611ba4565b90915550506099546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260248201859052909116906340c10f1990604401600060405180830381600087803b1580156106f457600080fd5b505af1158015610708573d6000803e3d6000fd5b505050505b604080516001600160a01b0383168152602081018490527fc7f080a0d33152d54d5972f0bac2d7984089c4849e2af42bca1a572728d339d7910160405180910390a1505050505061075e6001606555565b5050565b61076a610f6d565b61077460006110d5565b565b61077e610f6d565b61ffff82166000818152609a6020908152604091829020849055815192835282018390527f1b29e2aa7a790fb04e7d6d73bf7ca63e2b4b1ffe0354fe94b4739c91f1a15359910160405180910390a15050565b600054610100900460ff16158080156107f15750600054600160ff909116105b8061080b5750303b15801561080b575060005460ff166001145b61087d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610540565b6000805460ff1916600117905580156108a0576000805461ff0019166101001790555b6108a8611134565b6108b06111a7565b6001600160a01b03841661092c5760405162461bcd60e51b815260206004820152602760248201527f576f726d686f6c65206272696467652061646472657373206d757374206e6f7460448201527f20626520307830000000000000000000000000000000000000000000000000006064820152608401610540565b6001600160a01b03831661098e5760405162461bcd60e51b8152602060048201526024808201527f42726964676520746f6b656e2061646472657373206d757374206e6f742062656044820152630203078360e41b6064820152608401610540565b6001600160a01b0382166109f05760405162461bcd60e51b8152602060048201526024808201527f4c325442544320746f6b656e2061646472657373206d757374206e6f742062656044820152630203078360e41b6064820152608401610540565b609780546001600160a01b0380871673ffffffffffffffffffffffffffffffffffffffff1992831617909255609880548684169083161790556099805492851692909116919091179055600019609b558015610a86576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610a94610f6d565b6001600160a01b038116610b105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610540565b610b19816110d5565b50565b6000610b26610fc7565b83610b735760405162461bcd60e51b815260206004820152601960248201527f30783020726563697069656e74206e6f7420616c6c6f776564000000000000006044820152606401610540565b85600003610bc35760405162461bcd60e51b815260206004820152601460248201527f416d6f756e74206d757374206e6f7420626520300000000000000000000000006044820152606401610540565b610bcc8661121a565b955085600003610c1e5760405162461bcd60e51b815260206004820152601860248201527f416d6f756e7420746f6f206c6f7720746f2062726964676500000000000000006044820152606401610540565b6098546040516370a0823160e01b815230600482015287916001600160a01b0316906370a0823190602401602060405180830381865afa158015610c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8a91906118c2565b1015610cfe5760405162461bcd60e51b815260206004820152603160248201527f4e6f7420656e6f75676820776f726d686f6c65207442544320696e207468652060448201527f6761746577617920746f206272696467650000000000000000000000000000006064820152608401610540565b61ffff85166000818152609a60209081526040918290205482518a815291820193909352908101829052606081018690526080810185905263ffffffff841660a08201527ffcdb8efef11d13bb0ebc515477ece314fdac305aeba3d6d9d371838bbe2435cf9060c00160405180910390a186609c6000828254610d819190611a41565b90915550506099546040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018990526001600160a01b03909116906379cc679090604401600060405180830381600087803b158015610deb57600080fd5b505af1158015610dff573d6000803e3d6000fd5b5050609754609854610e2093506001600160a01b0390811692501689611242565b80610ee6576097546098546040517f0f5287b00000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018a905261ffff89166044820152606481018890526084810187905263ffffffff861660a4820152911690630f5287b090349060c4015b60206040518083038185885af1158015610eb9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ede9190611bb7565b915050610f5a565b6097546098546040805160208082018a905282518083039091018152818301928390527fc5a5ebda000000000000000000000000000000000000000000000000000000009092526001600160a01b039384169363c5a5ebda933493610e9b9392909116918d918d9189918c91604401611be1565b610f646001606555565b95945050505050565b6033546001600160a01b031633146107745760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610540565b6002606554036110195760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610540565b6002606555565b6040516001600160a01b0383166024820152604481018290526110c99084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611390565b505050565b6001606555565b603380546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661119f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610540565b610774611475565b600054610100900460ff166112125760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610540565b6107746114e9565b600061122b6402540be40083611c31565b915061123c6402540be40083611c53565b92915050565b8015806112d557506040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156112af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d391906118c2565b155b6113475760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610540565b6040516001600160a01b0383166024820152604481018290526110c99084907f095ea7b30000000000000000000000000000000000000000000000000000000090606401611065565b60006113e5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115549092919063ffffffff16565b8051909150156110c957808060200190518101906114039190611c6a565b6110c95760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610540565b600054610100900460ff166114e05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610540565b610774336110d5565b600054610100900460ff166110ce5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610540565b6060611563848460008561156b565b949350505050565b6060824710156115e35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610540565b600080866001600160a01b031685876040516115ff9190611c8c565b60006040518083038185875af1925050503d806000811461163c576040519150601f19603f3d011682016040523d82523d6000602084013e611641565b606091505b50915091506116528783838761165d565b979650505050505050565b606083156116cc5782516000036116c5576001600160a01b0385163b6116c55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610540565b5081611563565b61156383838151156116e15781518083602001fd5b8060405162461bcd60e51b81526004016105409190611a80565b60006020828403121561170d57600080fd5b5035919050565b6000806020838503121561172757600080fd5b823567ffffffffffffffff8082111561173f57600080fd5b818501915085601f83011261175357600080fd5b81358181111561176257600080fd5b86602082850101111561177457600080fd5b60209290920196919550909350505050565b61ffff81168114610b1957600080fd5b600080604083850312156117a957600080fd5b82356117b481611786565b946020939093013593505050565b6000602082840312156117d457600080fd5b81356117df81611786565b9392505050565b6001600160a01b0381168114610b1957600080fd5b60008060006060848603121561181057600080fd5b833561181b816117e6565b9250602084013561182b816117e6565b9150604084013561183b816117e6565b809150509250925092565b60006020828403121561185857600080fd5b81356117df816117e6565b600080600080600060a0868803121561187b57600080fd5b85359450602086013561188d81611786565b93506040860135925060608601359150608086013563ffffffff811681146118b457600080fd5b809150509295509295909350565b6000602082840312156118d457600080fd5b5051919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff811182821017156119445761194461190a565b60405290565b60005b8381101561196557818101518382015260200161194d565b50506000910152565b600082601f83011261197f57600080fd5b815167ffffffffffffffff8082111561199a5761199a61190a565b604051601f8301601f19908116603f011681019082821181831017156119c2576119c261190a565b816040528381528660208588010111156119db57600080fd5b6119ec84602083016020890161194a565b9695505050505050565b600060208284031215611a0857600080fd5b815167ffffffffffffffff811115611a1f57600080fd5b6115638482850161196e565b634e487b7160e01b600052601160045260246000fd5b8181038181111561123c5761123c611a2b565b60008151808452611a6c81602086016020860161194a565b601f01601f19169290920160200192915050565b6020815260006117df6020830184611a54565b805160ff81168114611aa457600080fd5b919050565b8051611aa481611786565b600060208284031215611ac657600080fd5b815167ffffffffffffffff80821115611ade57600080fd5b908301906101008286031215611af357600080fd5b611afb611920565b611b0483611a93565b81526020830151602082015260408301516040820152611b2660608401611aa9565b606082015260808301516080820152611b4160a08401611aa9565b60a082015260c083015160c082015260e083015182811115611b6257600080fd5b611b6e8782860161196e565b60e08301525095945050505050565b80516020808301519190811015611b9e576000198160200360031b1b821691505b50919050565b8082018082111561123c5761123c611a2b565b600060208284031215611bc957600080fd5b815167ffffffffffffffff811681146117df57600080fd5b6001600160a01b038716815285602082015261ffff8516604082015283606082015263ffffffff8316608082015260c060a08201526000611c2560c0830184611a54565b98975050505050505050565b600082611c4e57634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761123c5761123c611a2b565b600060208284031215611c7c57600080fd5b815180151581146117df57600080fd5b60008251611c9e81846020870161194a565b919091019291505056fea2646970667358221220b291d4f116eaee9a0315797c6438d633227d2a991caa1d3985922e37d89cae9964736f6c63430008110033",
428
415
  "linkReferences": {},
429
416
  "deployedLinkReferences": {}
430
417
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d9a02bf70c71223e62406e8e5f4670b5.json"
3
+ "buildInfo": "../../../build-info/e18ef0367f26d95d6bc960dff88da367.json"
4
4
  }
@@ -281,14 +281,17 @@ contract L2WormholeGateway is
281
281
  /// - The receiver of the canonical tBTC should be abi-encoded in the
282
282
  /// payload.
283
283
  /// - The receiver of the canonical tBTC must not be the zero address.
284
+ ///
284
285
  /// The Wormhole Token Bridge contract has protection against redeeming
285
286
  /// the same VAA again. When a Token Bridge VAA is redeemed, its
286
287
  /// message body hash is stored in a map. This map is used to check
287
288
  /// whether the hash has already been set in this map. For this reason,
288
- /// this function does not have to be nonReentrant.
289
+ /// this function does not have to be nonReentrant in theory. However,
290
+ /// to make this function non-dependent on Wormhole Bridge implementation,
291
+ /// we are making it nonReentrant anyway.
289
292
  /// @param encodedVm A byte array containing a Wormhole VAA signed by the
290
293
  /// guardians.
291
- function receiveTbtc(bytes calldata encodedVm) external {
294
+ function receiveTbtc(bytes calldata encodedVm) external nonReentrant {
292
295
  // ITokenBridge.completeTransferWithPayload completes a contract-controlled
293
296
  // transfer of an ERC20 token. Calling this function is not enough to
294
297
  // ensure L2WormholeGateway received Wormhole tBTC representation.
@@ -318,40 +321,17 @@ contract L2WormholeGateway is
318
321
  if (mintedAmount + amount > mintingLimit) {
319
322
  bridgeToken.safeTransfer(receiver, amount);
320
323
  } else {
321
- // The function is non-reentrant given bridge.completeTransferWithPayload
322
- // call that does not allow to use the same VAA again.
324
+ // The function is non-reentrant.
323
325
  // slither-disable-next-line reentrancy-benign
324
326
  mintedAmount += amount;
325
327
  tbtc.mint(receiver, amount);
326
328
  }
327
329
 
328
- // The function is non-reentrant given bridge.completeTransferWithPayload
329
- // call that does not allow to use the same VAA again.
330
+ // The function is non-reentrant.
330
331
  // slither-disable-next-line reentrancy-events
331
332
  emit WormholeTbtcReceived(receiver, amount);
332
333
  }
333
334
 
334
- /// @notice Allows to deposit Wormhole tBTC token in exchange for canonical
335
- /// tBTC. Useful in a situation when user received wormhole tBTC
336
- /// instead of canonical tBTC. One example of such situation is
337
- /// when the minting limit was exceeded but the user minted anyway.
338
- /// @dev Requirements:
339
- /// - The sender must have at least `amount` of the Wormhole tBTC and
340
- /// it has to be approved for L2WormholeGateway.
341
- /// - The minting limit must allow for minting the given amount.
342
- /// @param amount The amount of Wormhole tBTC to deposit.
343
- function depositWormholeTbtc(uint256 amount) external {
344
- require(
345
- mintedAmount + amount <= mintingLimit,
346
- "Minting limit exceeded"
347
- );
348
-
349
- emit WormholeTbtcDeposited(msg.sender, amount);
350
- mintedAmount += amount;
351
- bridgeToken.safeTransferFrom(msg.sender, address(this), amount);
352
- tbtc.mint(msg.sender, amount);
353
- }
354
-
355
335
  /// @notice Lets the governance to update the tBTC gateway address on the
356
336
  /// chain with the given Wormhole ID.
357
337
  /// @dev Use toWormholeAddress function to convert between Ethereum and
@@ -601,7 +601,7 @@
601
601
  "parameterSlots": 1,
602
602
  "returnSlots": 0
603
603
  },
604
- "abi_decode_tuple_t_contract$_IERC20_$18221t_contract$_TBTC_$41350t_uint256_fromMemory": {
604
+ "abi_decode_tuple_t_contract$_IERC20_$18221t_contract$_TBTC_$41306t_uint256_fromMemory": {
605
605
  "entryPoint": 230,
606
606
  "id": null,
607
607
  "parameterSlots": 2,
@@ -1045,7 +1045,7 @@
1045
1045
  }
1046
1046
  ]
1047
1047
  },
1048
- "name": "abi_decode_tuple_t_contract$_IERC20_$18221t_contract$_TBTC_$41350t_uint256_fromMemory",
1048
+ "name": "abi_decode_tuple_t_contract$_IERC20_$18221t_contract$_TBTC_$41306t_uint256_fromMemory",
1049
1049
  "nodeType": "YulFunctionDefinition",
1050
1050
  "parameters": [
1051
1051
  {
@@ -1085,7 +1085,7 @@
1085
1085
  }
1086
1086
  ]
1087
1087
  },
1088
- "contents": "{\n { }\n function validator_revert_contract_IERC20(value)\n {\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_contract$_IERC20_$18221t_contract$_TBTC_$41350t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_contract_IERC20(value)\n value0 := value\n let value_1 := mload(add(headStart, 32))\n validator_revert_contract_IERC20(value_1)\n value1 := value_1\n value2 := mload(add(headStart, 64))\n }\n}",
1088
+ "contents": "{\n { }\n function validator_revert_contract_IERC20(value)\n {\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_contract$_IERC20_$18221t_contract$_TBTC_$41306t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_contract_IERC20(value)\n value0 := value\n let value_1 := mload(add(headStart, 32))\n validator_revert_contract_IERC20(value_1)\n value1 := value_1\n value2 := mload(add(headStart, 64))\n }\n}",
1089
1089
  "id": 125,
1090
1090
  "language": "Yul",
1091
1091
  "name": "#utility.yul"
@@ -1415,7 +1415,7 @@
1415
1415
  "parameterSlots": 2,
1416
1416
  "returnSlots": 1
1417
1417
  },
1418
- "abi_encode_tuple_t_contract$_TBTC_$41350__to_t_address__fromStack_reversed": {
1418
+ "abi_encode_tuple_t_contract$_TBTC_$41306__to_t_address__fromStack_reversed": {
1419
1419
  "entryPoint": null,
1420
1420
  "id": null,
1421
1421
  "parameterSlots": 2,
@@ -3111,7 +3111,7 @@
3111
3111
  }
3112
3112
  ]
3113
3113
  },
3114
- "name": "abi_encode_tuple_t_contract$_TBTC_$41350__to_t_address__fromStack_reversed",
3114
+ "name": "abi_encode_tuple_t_contract$_TBTC_$41306__to_t_address__fromStack_reversed",
3115
3115
  "nodeType": "YulFunctionDefinition",
3116
3116
  "parameters": [
3117
3117
  {
@@ -8190,7 +8190,7 @@
8190
8190
  }
8191
8191
  ]
8192
8192
  },
8193
- "contents": "{\n { }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_decode_address(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n }\n function abi_encode_tuple_t_contract$_IERC20_$18221__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := calldataload(headStart)\n }\n function abi_decode_tuple_t_addresst_uint256t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := calldataload(add(headStart, 32))\n value2 := abi_decode_address(add(headStart, 64))\n let offset := calldataload(add(headStart, 96))\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let length := calldataload(_2)\n if gt(length, _1) { revert(0, 0) }\n if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n value3 := add(_2, 32)\n value4 := length\n }\n function abi_encode_tuple_t_contract$_TBTC_$41350__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := calldataload(add(headStart, 32))\n }\n function abi_encode_tuple_t_stringliteral_9e5d6ee1ae898a2df1a30570594add9e68ad8b6af4a57d7f5f0cb2842bacfb92__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 24)\n mstore(add(headStart, 64), \"Caller is not authorized\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_df41f55d800b6607edb1865fb30b4ab33d723889d164c99cca8fee73ff0a30ba__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"New initiator must not be zero a\")\n mstore(add(headStart, 96), \"ddress\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n }\n function abi_encode_tuple_t_stringliteral_b1549855d8fed0f683c741615955b3e3f5ac1fbe3fc645d4559c62450ecc9620__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 41)\n mstore(add(headStart, 64), \"New VendingMachine cannot be zer\")\n mstore(add(headStart, 96), \"o address\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n mstore(add(headStart, 32), value1)\n }\n function panic_error_0x11()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function checked_add_t_uint256(x, y) -> sum\n {\n sum := add(x, y)\n if gt(x, sum) { panic_error_0x11() }\n }\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := mload(headStart)\n }\n function abi_encode_tuple_t_stringliteral_1a06921938f9f63c056c578e8a5f166d5d113ae30837c6c39a7741ed0e1467eb__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 36)\n mstore(add(headStart, 64), \"Amount + fee exceeds TBTC v2 bal\")\n mstore(add(headStart, 96), \"ance\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_ea12df8d4a8fcefc5cad59efc2d58b797f642582ed766ffab36a121e023bc406__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 20)\n mstore(add(headStart, 64), \"Token is not TBTC v1\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_fd4966bd1bdd27d0ab34b8489f15fc58fd6abfe9ed90887e0c2e4963267e6422__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 27)\n mstore(add(headStart, 64), \"Only TBTC v1 caller allowed\")\n tail := add(headStart, 96)\n }\n function checked_mul_t_uint256(x, y) -> product\n {\n product := mul(x, y)\n if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n }\n function checked_div_t_uint256(x, y) -> r\n {\n if iszero(y)\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n r := div(x, y)\n }\n function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n mstore(add(headStart, 96), \"ddress\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_61334796e55ed72efd746c0931e2d3cac4c97d3130d7bb275d5f0f57af1f045e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 20)\n mstore(add(headStart, 64), \"Change not initiated\")\n tail := add(headStart, 96)\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n diff := sub(x, y)\n if gt(diff, x) { panic_error_0x11() }\n }\n function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_92dde2c37d5ac1c8388fee9c21ec0fe0c957aca7e978d56c81b848f962f0a8ba__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Governance delay has not elapsed\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n mstore(add(headStart, 64), value2)\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 42)\n mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n mstore(add(headStart, 96), \"ot succeed\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n mstore(add(headStart, 96), \"r call\")\n tail := add(headStart, 128)\n }\n function copy_memory_to_memory_with_cleanup(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n mstore(add(dst, length), 0)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 29)\n mstore(add(headStart, 64), \"Address: call to non-contract\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n copy_memory_to_memory_with_cleanup(add(value0, 32), add(headStart, 64), length)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n}",
8193
+ "contents": "{\n { }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_decode_address(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n }\n function abi_encode_tuple_t_contract$_IERC20_$18221__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := calldataload(headStart)\n }\n function abi_decode_tuple_t_addresst_uint256t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := calldataload(add(headStart, 32))\n value2 := abi_decode_address(add(headStart, 64))\n let offset := calldataload(add(headStart, 96))\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let length := calldataload(_2)\n if gt(length, _1) { revert(0, 0) }\n if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n value3 := add(_2, 32)\n value4 := length\n }\n function abi_encode_tuple_t_contract$_TBTC_$41306__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := calldataload(add(headStart, 32))\n }\n function abi_encode_tuple_t_stringliteral_9e5d6ee1ae898a2df1a30570594add9e68ad8b6af4a57d7f5f0cb2842bacfb92__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 24)\n mstore(add(headStart, 64), \"Caller is not authorized\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_df41f55d800b6607edb1865fb30b4ab33d723889d164c99cca8fee73ff0a30ba__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"New initiator must not be zero a\")\n mstore(add(headStart, 96), \"ddress\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n }\n function abi_encode_tuple_t_stringliteral_b1549855d8fed0f683c741615955b3e3f5ac1fbe3fc645d4559c62450ecc9620__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 41)\n mstore(add(headStart, 64), \"New VendingMachine cannot be zer\")\n mstore(add(headStart, 96), \"o address\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n mstore(add(headStart, 32), value1)\n }\n function panic_error_0x11()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function checked_add_t_uint256(x, y) -> sum\n {\n sum := add(x, y)\n if gt(x, sum) { panic_error_0x11() }\n }\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := mload(headStart)\n }\n function abi_encode_tuple_t_stringliteral_1a06921938f9f63c056c578e8a5f166d5d113ae30837c6c39a7741ed0e1467eb__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 36)\n mstore(add(headStart, 64), \"Amount + fee exceeds TBTC v2 bal\")\n mstore(add(headStart, 96), \"ance\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_ea12df8d4a8fcefc5cad59efc2d58b797f642582ed766ffab36a121e023bc406__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 20)\n mstore(add(headStart, 64), \"Token is not TBTC v1\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_fd4966bd1bdd27d0ab34b8489f15fc58fd6abfe9ed90887e0c2e4963267e6422__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 27)\n mstore(add(headStart, 64), \"Only TBTC v1 caller allowed\")\n tail := add(headStart, 96)\n }\n function checked_mul_t_uint256(x, y) -> product\n {\n product := mul(x, y)\n if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n }\n function checked_div_t_uint256(x, y) -> r\n {\n if iszero(y)\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n r := div(x, y)\n }\n function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n mstore(add(headStart, 96), \"ddress\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_61334796e55ed72efd746c0931e2d3cac4c97d3130d7bb275d5f0f57af1f045e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 20)\n mstore(add(headStart, 64), \"Change not initiated\")\n tail := add(headStart, 96)\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n diff := sub(x, y)\n if gt(diff, x) { panic_error_0x11() }\n }\n function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_92dde2c37d5ac1c8388fee9c21ec0fe0c957aca7e978d56c81b848f962f0a8ba__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Governance delay has not elapsed\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n mstore(add(headStart, 64), value2)\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 42)\n mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n mstore(add(headStart, 96), \"ot succeed\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n mstore(add(headStart, 96), \"r call\")\n tail := add(headStart, 128)\n }\n function copy_memory_to_memory_with_cleanup(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n mstore(add(dst, length), 0)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 29)\n mstore(add(headStart, 64), \"Address: call to non-contract\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n copy_memory_to_memory_with_cleanup(add(value0, 32), add(headStart, 64), length)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n}",
8194
8194
  "id": 125,
8195
8195
  "language": "Yul",
8196
8196
  "name": "#utility.yul"