@keep-network/tbtc-v2 0.1.1-dev.63 → 0.1.1-dev.64

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 (58) hide show
  1. package/artifacts/Bank.json +6 -6
  2. package/artifacts/Bridge.json +122 -116
  3. package/artifacts/Deposit.json +4 -4
  4. package/artifacts/DepositSweep.json +14 -13
  5. package/artifacts/EcdsaDkgValidator.json +1 -1
  6. package/artifacts/EcdsaInactivity.json +1 -1
  7. package/artifacts/Fraud.json +4 -4
  8. package/artifacts/KeepRegistry.json +1 -1
  9. package/artifacts/KeepStake.json +2 -2
  10. package/artifacts/KeepToken.json +2 -2
  11. package/artifacts/KeepTokenStaking.json +1 -1
  12. package/artifacts/MovingFunds.json +4 -4
  13. package/artifacts/NuCypherStakingEscrow.json +1 -1
  14. package/artifacts/NuCypherToken.json +2 -2
  15. package/artifacts/RandomBeaconStub.json +1 -1
  16. package/artifacts/Redemption.json +4 -4
  17. package/artifacts/ReimbursementPool.json +2 -2
  18. package/artifacts/Relay.json +11 -11
  19. package/artifacts/SortitionPool.json +2 -2
  20. package/artifacts/T.json +2 -2
  21. package/artifacts/TBTC.json +6 -6
  22. package/artifacts/TBTCToken.json +6 -6
  23. package/artifacts/TokenStaking.json +1 -1
  24. package/artifacts/TokenholderGovernor.json +9 -9
  25. package/artifacts/TokenholderTimelock.json +8 -8
  26. package/artifacts/VendingMachine.json +13 -13
  27. package/artifacts/VendingMachineKeep.json +1 -1
  28. package/artifacts/VendingMachineNuCypher.json +1 -1
  29. package/artifacts/WalletRegistry.json +2 -2
  30. package/artifacts/WalletRegistryGovernance.json +2 -2
  31. package/artifacts/Wallets.json +4 -4
  32. package/artifacts/solcInputs/{888980850d09abe497842d2096dd7e11.json → 2190be89eb3998f4cbf0924da2c5641c.json} +2 -2
  33. package/build/contracts/GovernanceUtils.sol/GovernanceUtils.dbg.json +1 -1
  34. package/build/contracts/bank/Bank.sol/Bank.dbg.json +1 -1
  35. package/build/contracts/bridge/BitcoinTx.sol/BitcoinTx.dbg.json +1 -1
  36. package/build/contracts/bridge/Bridge.sol/Bridge.dbg.json +1 -1
  37. package/build/contracts/bridge/Bridge.sol/Bridge.json +41 -36
  38. package/build/contracts/bridge/BridgeState.sol/BridgeState.dbg.json +1 -1
  39. package/build/contracts/bridge/Deposit.sol/Deposit.dbg.json +1 -1
  40. package/build/contracts/bridge/DepositSweep.sol/DepositSweep.dbg.json +1 -1
  41. package/build/contracts/bridge/DepositSweep.sol/DepositSweep.json +2 -2
  42. package/build/contracts/bridge/EcdsaLib.sol/EcdsaLib.dbg.json +1 -1
  43. package/build/contracts/bridge/Fraud.sol/Fraud.dbg.json +1 -1
  44. package/build/contracts/bridge/Heartbeat.sol/Heartbeat.dbg.json +1 -1
  45. package/build/contracts/bridge/IRelay.sol/IRelay.dbg.json +1 -1
  46. package/build/contracts/bridge/MovingFunds.sol/MovingFunds.dbg.json +1 -1
  47. package/build/contracts/bridge/Redemption.sol/OutboundTx.dbg.json +1 -1
  48. package/build/contracts/bridge/Redemption.sol/Redemption.dbg.json +1 -1
  49. package/build/contracts/bridge/VendingMachine.sol/VendingMachine.dbg.json +1 -1
  50. package/build/contracts/bridge/Wallets.sol/Wallets.dbg.json +1 -1
  51. package/build/contracts/token/TBTC.sol/TBTC.dbg.json +1 -1
  52. package/build/contracts/vault/DonationVault.sol/DonationVault.dbg.json +1 -1
  53. package/build/contracts/vault/IVault.sol/IVault.dbg.json +1 -1
  54. package/build/contracts/vault/TBTCVault.sol/TBTCVault.dbg.json +1 -1
  55. package/contracts/bridge/Bridge.sol +15 -2
  56. package/contracts/bridge/DepositSweep.sol +93 -40
  57. package/export.json +5 -0
  58. package/package.json +1 -1
@@ -23,8 +23,8 @@
23
23
  "type": "event"
24
24
  }
25
25
  ],
26
- "bytecode": "0x612b0e61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c80632fcc8fb11461003a575b600080fd5b81801561004657600080fd5b5061005a6100553660046125f0565b61005c565b005b6000610069858585610486565b90506000806100b98761007f6040890189612677565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061077692505050565b915091506000806100cb89858861082c565b9092509050600061011f8a6100e360208c018c612677565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879250610a54915050565b90506000808061014384600001518867ffffffffffffffff1686604001515161105b565b60058f0154919350915068010000000000000000900467ffffffffffffffff1661016d82846126d4565b11156101c05760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e2066656520697320746f6f2068696768000000000060448201526064015b60405180910390fd5b60005b8460400151518110156102ae57600060018660400151516101e491906126ec565b82146101f057836101fa565b6101fa83856126d4565b9050808660600151838151811061021357610213612703565b60200260200101518760400151848151811061023157610231612703565b602002602001015161024391906126ec565b61024d91906126ec565b8660400151838151811061026357610263612703565b6020026020010181815250508560600151828151811061028557610285612703565b60200260200101518561029891906126d4565b94505080806102a690612719565b9150506101c3565b5060408051602081018b90526000918101919091527fffffffffffffffff00000000000000000000000000000000000000000000000060c089901b166044820152604c0160408051808303601f19018152828252805160209182012060018a01556bffffffffffffffffffffffff198b16835282018b90527fe50ffdcc0a5f2c1ede5c122b9414ffd7b2c6bc870d2d775194049dc30da95e6a910160405180910390a18c54602085015160408087015190517f266a123a0000000000000000000000000000000000000000000000000000000081526001600160a01b039093169263266a123a926103a3929091600401612734565b600060405180830381600087803b1580156103bd57600080fd5b505af11580156103d1573d6000803e3d6000fd5b505050508c60000160009054906101000a90046001600160a01b03166001600160a01b0316635b86f5998e60040160009054906101000a90046001600160a01b0316856040518363ffffffff1660e01b81526004016104459291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b15801561045f57600080fd5b505af1158015610473573d6000803e3d6000fd5b5050505050505050505050505050505050565b60006104d26104986020850185612677565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061109792505050565b61051e5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420696e70757420766563746f722070726f766964656400000060448201526064016101b7565b61056861052e6040850185612677565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061114792505050565b6105b45760405162461bcd60e51b815260206004820152601e60248201527f496e76616c6964206f757470757420766563746f722070726f7669646564000060448201526064016101b7565b6106176105c460208501856127b8565b6105d16020860186612677565b6105de6040880188612677565b6105ee60808a0160608b016127b8565b604051602001610603969594939291906127e2565b6040516020818303038152906040526111ea565b90506106b261066661062c6040850185612677565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061121192505050565b6106708480612677565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869493925050506020860135611220565b6107245760405162461bcd60e51b815260206004820152603c60248201527f5478206d65726b6c652070726f6f66206973206e6f742076616c696420666f7260448201527f2070726f76696465642068656164657220616e6420747820686173680000000060648201526084016101b7565b61076f846107356040850185612677565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061125e92505050565b9392505050565b6000806000610784846115cd565b915050806001146107fd5760405162461bcd60e51b815260206004820152602b60248201527f5377656570207472616e73616374696f6e206d7573742068617665206120736960448201527f6e676c65206f757470757400000000000000000000000000000000000000000060648201526084016101b7565b600061080985826115e4565b905061081586826117ca565b93506108208161198f565b925050505b9250929050565b604080516060810182526000808252602082018190529181018290526bffffffffffffffffffffffff1984166000908152601c86016020526040902060028101549092507801000000000000000000000000000000000000000000000000900460ff1660018160058111156108a3576108a3612824565b14806108c0575060028160058111156108be576108be612824565b145b6109325760405162461bcd60e51b815260206004820152602b60248201527f57616c6c6574206d75737420626520696e204c697665206f72204d6f76696e6760448201527f46756e647320737461746500000000000000000000000000000000000000000060648201526084016101b7565b604080516060810182526000808252602082018190529181019190915260018401549092508015610a4a578085356109706040880160208901612853565b6109806060890160408a01612886565b6040516020016109d59392919092835260e09190911b6001600160e01b031916602083015260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166024820152602c0190565b6040516020818303038152906040528051906020012014610a385760405162461bcd60e51b815260206004820152601660248201527f496e76616c6964206d61696e205554584f20646174610000000000000000000060448201526064016101b7565b610a47368690038601866128b7565b92505b5050935093915050565b610a7f6040518060800160405280600081526020016060815260200160608152602001606081525090565b8151151560008080610a90876115cd565b90925090506000610aa28360016126d4565b90508415610aba57610ab56001836126ec565b610abc565b815b67ffffffffffffffff811115610ad457610ad46128a1565b604051908082528060200260200182016040528015610afd578160200160208202803683370190505b50602087018190525167ffffffffffffffff811115610b1e57610b1e6128a1565b604051908082528060200260200182016040528015610b47578160200160208202803683370190505b50604087015260208601515167ffffffffffffffff811115610b6b57610b6b6128a1565b604051908082528060200260200182016040528015610b94578160200160208202803683370190505b5060608701526000805b83811015610f5e576000806000610bb58d87611a06565b92509250925060008e60060160008585604051602001610bec92919091825260e01b6001600160e01b031916602082015260240190565b60408051808303601f190181529181528151602092830120835290820192909252016000208054909150600160e01b900463ffffffff1615610e2a576001810154600160e01b900463ffffffff1615610c875760405162461bcd60e51b815260206004820152601560248201527f4465706f73697420616c7265616479207377657074000000000000000000000060448201526064016101b7565b8b6020015151861415610d025760405162461bcd60e51b815260206004820152603a60248201527f4578706563746564206d61696e205554584f206e6f742070726573656e74206960448201527f6e207377656570207472616e73616374696f6e20696e7075747300000000000060648201526084016101b7565b6001810180547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160e01b4263ffffffff1602179055805460208d015180516001600160a01b039092169188908110610d5b57610d5b612703565b6001600160a01b039290921660209283029190910190910152805460408d01518051600160a01b90920467ffffffffffffffff169188908110610da057610da0612703565b6020026020010181815250508b604001518681518110610dc257610dc2612703565b60200260200101518c600001818151610ddb91906126d4565b905250600181015460608d01518051600160a01b90920467ffffffffffffffff169188908110610e0d57610e0d612703565b602090810291909101015285610e2281612719565b965050610f3b565b8915158b151514158015610e3e57508c5184145b8015610e5957508263ffffffff168d6020015163ffffffff16145b15610ef3578c6040015167ffffffffffffffff168c600001818151610e7e91906126d4565b915081815250506001995060018f60180160008686604051602001610eba92919091825260e01b6001600160e01b031916602082015260240190565b60408051808303601f19018152918152815160209283012083529082019290925201600020805460ff1916911515919091179055610f3b565b60405162461bcd60e51b815260206004820152601260248201527f556e6b6e6f776e20696e7075742074797065000000000000000000000000000060448201526064016101b7565b610f4582886126d4565b9650505050508080610f5690612719565b915050610b9e565b5060008111610fd55760405162461bcd60e51b815260206004820152603360248201527f5377656570207472616e73616374696f6e206d7573742070726f63657373206160448201527f74206c65617374206f6e65206465706f7369740000000000000000000000000060648201526084016101b7565b8415158615151461104e5760405162461bcd60e51b815260206004820152603a60248201527f4578706563746564206d61696e205554584f206e6f742070726573656e74206960448201527f6e207377656570207472616e73616374696f6e20696e7075747300000000000060648201526084016101b7565b5050505050509392505050565b6000808061106985876126ec565b90506110758482612940565b91508361108283836126ec565b61108c9190612954565b925050935093915050565b60008060006110a5846115cd565b90925090508015806110b8575060001982145b156110c7575060009392505050565b60006110d48360016126d4565b905060005b8281101561113a57855182106110f55750600095945050505050565b60006111018784611a5e565b905060001981141561111a575060009695505050505050565b61112481846126d4565b925050808061113290612719565b9150506110d9565b5093519093149392505050565b6000806000611155846115cd565b9092509050801580611168575060001982145b15611177575060009392505050565b60006111848360016126d4565b905060005b8281101561113a57855182106111a55750600095945050505050565b60006111b18784611ab2565b90506000198114156111ca575060009695505050505050565b6111d481846126d4565b92505080806111e290612719565b915050611189565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b60448101516000905b92915050565b6000838514801561122f575081155b801561123a57508251155b1561124757506001611256565b61125385848685611b18565b90505b949350505050565b6001820154604080517f113764be00000000000000000000000000000000000000000000000000000000815290516001600160a01b0390921691600091839163113764be91600480820192602092909190829003018186803b1580156112c357600080fd5b505afa1580156112d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fb9190612968565b90506000826001600160a01b0316632b97be246040518163ffffffff1660e01b815260040160206040518083038186803b15801561133857600080fd5b505afa15801561134c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113709190612968565b905060008061138661138187611bc0565b611c55565b90508381141561139857839150611416565b828114156113a857829150611416565b60405162461bcd60e51b815260206004820152602560248201527f4e6f742061742063757272656e74206f722070726576696f757320646966666960448201527f63756c747900000000000000000000000000000000000000000000000000000060648201526084016101b7565b600061142187611c7d565b905060001981141561149b5760405162461bcd60e51b815260206004820152602360248201527f496e76616c6964206c656e677468206f6620746865206865616465727320636860448201527f61696e000000000000000000000000000000000000000000000000000000000060648201526084016101b7565b6001198114156114ed5760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206865616465727320636861696e000000000000000000000060448201526064016101b7565b60021981141561153f5760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420776f726b20696e20612068656164657200000060448201526064016101b7565b600388015461154e9084612981565b8110156115c35760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420616363756d756c61746564206469666669637560448201527f6c747920696e2068656164657220636861696e0000000000000000000000000060648201526084016101b7565b5050505050505050565b6000806115db836000611e84565b91509150915091565b60606000806115f2856115cd565b909250905060001982141561166f5760405162461bcd60e51b815260206004820152602260248201527f52656164206f76657272756e20647572696e6720566172496e7420706172736960448201527f6e6700000000000000000000000000000000000000000000000000000000000060648201526084016101b7565b8084106116be5760405162461bcd60e51b815260206004820152601160248201527f566f75742072656164206f76657272756e00000000000000000000000000000060448201526064016101b7565b6000806116cc8460016126d4565b905060005b86811015611755576116e38883611ab2565b92506000198314156117375760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b657900000000000060448201526064016101b7565b61174183836126d4565b91508061174d81612719565b9150506116d1565b506117608782611ab2565b91506000198214156117b45760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b657900000000000060448201526064016101b7565b6117bf878284612001565b979650505050505050565b6000806117d6836120cb565b9050805160141461184f5760405162461bcd60e51b815260206004820152602b60248201527f4f75747075742773207075626c6963206b65792068617368206d75737420686160448201527f766520323020627974657300000000000000000000000000000000000000000060648201526084016101b7565b61185a816000612369565b91506000611878600880865161187091906126ec565b869190612001565b8051602091820120604080517f1976a91400000000000000000000000000000000000000000000000000000000818501526bffffffffffffffffffffffff1987166024820181905261222b60f21b60388301528251601a818403018152603a830184528051908601207f1600140000000000000000000000000000000000000000000000000000000000605a840152605d83019190915282516051818403018152607190920190925280519301929092209092508183148061193957508083145b6119855760405162461bcd60e51b815260206004820152601e60248201527f4f7574707574206d757374206265205032504b48206f7220503257504b48000060448201526064016101b7565b5050505092915050565b60008061199b83612378565b60c01c905060006112568264ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b60008080611a148585612369565b9250611a49611a238686612384565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b9150611a558585611a5e565b90509250925092565b6000806000611a6d858561239b565b9092509050600019821415611a88576000199250505061121a565b80611a948360256126d4565b611a9e91906126d4565b611aa99060046126d4565b95945050505050565b6000611abf8260096126d4565b83511015611ad0575060001961121a565b600080611ae785611ae28660086126d4565b611e84565b9092509050600019821415611b02576000199250505061121a565b80611b0e8360096126d4565b611aa991906126d4565b600060208451611b289190612940565b15611b3557506000611256565b8351611b4357506000611256565b818560005b8651811015611bb357611b5c600284612940565b60011415611b8157611b7a611b748883016020015190565b836123dd565b9150611b9a565b611b9782611b928984016020015190565b6123dd565b91505b60019290921c91611bac6020826126d4565b9050611b48565b5090931495945050505050565b600080611bce836048612369565b60e81c9050600083604b81518110611be857611be8612703565b016020015160f81c90506000611c1c83600060108262ffffff16901c8261ff001660108462ffffff16901b17179050919050565b62ffffff1690506000611c306003846129a0565b60ff169050611c4181610100612aa7565b611c4b9083612981565b9695505050505050565b600061121a7bffff0000000000000000000000000000000000000000000000000000836123e9565b600060508251611c8d9190612940565b15611c9b5750600019919050565b506040805160808101909152605081526000908190815b8451811015611e7c57611cc68583836123f5565b8015611ce657611cd6828461248a565b611ce65750600119949350505050565b6000611cf183611bc0565b9050611cfc836111ea565b935080611e408560008190506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b600882901c7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff161790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b601082901c7dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff161790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b602082901c7bffffffff00000000ffffffff00000000ffffffff00000000ffffffff1617905060408177ffffffffffffffff0000000000000000ffffffffffffffff16901b604082901c77ffffffffffffffff0000000000000000ffffffffffffffff16179050608081901b608082901c179050919050565b1115611e53575060021995945050505050565b611e66611e5f82611c55565b86906124b3565b9450611e7590506050826126d4565b9050611cb2565b505050919050565b6000806000611e938585612511565b905060ff8116611ec5576000858581518110611eb157611eb1612703565b016020015190935060f81c91506108259050565b83611ed1826001612ab3565b60ff16611ede91906126d4565b85511015611ef55760001960009250925050610825565b60008160ff1660021415611f3a57611f2f611f1b611f148760016126d4565b8890612369565b62ffff0060e882901c1660f89190911c1790565b61ffff169050611ff1565b8160ff1660041415611f6457611f57611a23611f148760016126d4565b63ffffffff169050611ff1565b8160ff1660081415611ff157611fe4611f81611f148760016126d4565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090509250929050565b60608161201d575060408051602081019091526000815261076f565b600061202983856126d4565b9050838111801561203b575080855110155b6120875760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e64730000000000000000000000000060448201526064016101b7565b604051915082604083010160405282825283850182038460208701018481015b808210156120c0578151838301526020820191506120a7565b505050509392505050565b60606000826008815181106120e2576120e2612703565b0160200151835160f89190911c91506120fc826009612ab3565b60ff161461211a575050604080516020810190915260008152919050565b8260098151811061212d5761212d612703565b016020015160f81c6121cb5760028160ff16101561215b575050604080516020810190915260008152919050565b600083600a8151811061217057612170612703565b016020015160f81c90506121856002836129a0565b60ff16811415806121a35750806020141580156121a3575080601414155b156121bf57505060408051602081019091526000815292915050565b61125684600b83612001565b60006121d8846008612369565b90507f1976a900000000000000000000000000000000000000000000000000000000007fffffff0000000000000000000000000000000000000000000000000000000000821614156122b55783600b8151811061223757612237612703565b60209101015160f81c601414158061228c57506122626002855161225b91906126ec565b8590612369565b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191661222b60f21b14155b156122a857505060408051602081019091526000815292915050565b61125684600c6014612001565b7f17a91400000000000000000000000000000000000000000000000000000000007fffffff00000000000000000000000000000000000000000000000000000000008216141561235257836001855161230e91906126ec565b8151811061231e5761231e612703565b60209101015160f81c60871461234557505060408051602081019091526000815292915050565b61125684600b6014612001565b505050604080516020810190915260008152919050565b600061076f8383016020015190565b600061121a8282612369565b600061076f6123948360206126d4565b8490612369565b6000806123a98360256126d4565b845110156123be575060001990506000610825565b6000806123d086611ae28760246126d4565b9097909650945050505050565b600061076f838361259d565b600061076f8284612954565b8151600061240382846126d4565b90508281118015612415575080855110155b6124615760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e64730000000000000000000000000060448201526064016101b7565b826020860101602085018382015b808310156115c357825182526020928301929091019061246f565b600080612496846125cb565b90508281146124a957600091505061121a565b5060019392505050565b60006124bf82846126d4565b90508281101561121a5760405162461bcd60e51b815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e0000000000000060448201526064016101b7565b600082828151811061252557612525612703565b60209101015160f81c60ff141561253e5750600861121a565b82828151811061255057612550612703565b60209101015160f81c60fe14156125695750600461121a565b82828151811061257b5761257b612703565b60209101015160f81c60fd14156125945750600261121a565b50600092915050565b60008260005281602052602060006040600060025afa50602060006020600060025afa505060005192915050565b602481015160009061121a565b6000606082840312156125ea57600080fd5b50919050565b60008060008060c0858703121561260657600080fd5b84359350602085013567ffffffffffffffff8082111561262557600080fd5b908601906080828903121561263957600080fd5b9093506040860135908082111561264f57600080fd5b5061265c878288016125d8565b92505061266c86606087016125d8565b905092959194509250565b6000808335601e1984360301811261268e57600080fd5b83018035915067ffffffffffffffff8211156126a957600080fd5b60200191503681900382131561082557600080fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156126e7576126e76126be565b500190565b6000828210156126fe576126fe6126be565b500390565b634e487b7160e01b600052603260045260246000fd5b600060001982141561272d5761272d6126be565b5060010190565b604080825283519082018190526000906020906060840190828701845b828110156127765781516001600160a01b031684529284019290840190600101612751565b5050508381038285015284518082528583019183019060005b818110156127ab5783518352928401929184019160010161278f565b5090979650505050505050565b6000602082840312156127ca57600080fd5b81356001600160e01b03198116811461076f57600080fd5b60006001600160e01b03198089168352868860048501378683016004810160008152868882375093169390920160048101939093525050600801949350505050565b634e487b7160e01b600052602160045260246000fd5b803563ffffffff8116811461284e57600080fd5b919050565b60006020828403121561286557600080fd5b61076f8261283a565b803567ffffffffffffffff8116811461284e57600080fd5b60006020828403121561289857600080fd5b61076f8261286e565b634e487b7160e01b600052604160045260246000fd5b6000606082840312156128c957600080fd5b6040516060810181811067ffffffffffffffff821117156128fa57634e487b7160e01b600052604160045260246000fd5b6040528235815261290d6020840161283a565b602082015261291e6040840161286e565b60408201529392505050565b634e487b7160e01b600052601260045260246000fd5b60008261294f5761294f61292a565b500690565b6000826129635761296361292a565b500490565b60006020828403121561297a57600080fd5b5051919050565b600081600019048311821515161561299b5761299b6126be565b500290565b600060ff821660ff8416808210156129ba576129ba6126be565b90039392505050565b600181815b808511156129fe5781600019048211156129e4576129e46126be565b808516156129f157918102915b93841c93908002906129c8565b509250929050565b600082612a155750600161121a565b81612a225750600061121a565b8160018114612a385760028114612a4257612a5e565b600191505061121a565b60ff841115612a5357612a536126be565b50506001821b61121a565b5060208310610133831016604e8410600b8410161715612a81575081810a61121a565b612a8b83836129c3565b8060001904821115612a9f57612a9f6126be565b029392505050565b600061076f8383612a06565b600060ff821660ff84168060ff03821115612ad057612ad06126be565b01939250505056fea2646970667358221220d47e0bb2d4cd6868277c5bc975320458154939e0b2cc632b54547ec3e2fb1eea64736f6c63430008090033",
27
- "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c80632fcc8fb11461003a575b600080fd5b81801561004657600080fd5b5061005a6100553660046125f0565b61005c565b005b6000610069858585610486565b90506000806100b98761007f6040890189612677565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061077692505050565b915091506000806100cb89858861082c565b9092509050600061011f8a6100e360208c018c612677565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879250610a54915050565b90506000808061014384600001518867ffffffffffffffff1686604001515161105b565b60058f0154919350915068010000000000000000900467ffffffffffffffff1661016d82846126d4565b11156101c05760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e2066656520697320746f6f2068696768000000000060448201526064015b60405180910390fd5b60005b8460400151518110156102ae57600060018660400151516101e491906126ec565b82146101f057836101fa565b6101fa83856126d4565b9050808660600151838151811061021357610213612703565b60200260200101518760400151848151811061023157610231612703565b602002602001015161024391906126ec565b61024d91906126ec565b8660400151838151811061026357610263612703565b6020026020010181815250508560600151828151811061028557610285612703565b60200260200101518561029891906126d4565b94505080806102a690612719565b9150506101c3565b5060408051602081018b90526000918101919091527fffffffffffffffff00000000000000000000000000000000000000000000000060c089901b166044820152604c0160408051808303601f19018152828252805160209182012060018a01556bffffffffffffffffffffffff198b16835282018b90527fe50ffdcc0a5f2c1ede5c122b9414ffd7b2c6bc870d2d775194049dc30da95e6a910160405180910390a18c54602085015160408087015190517f266a123a0000000000000000000000000000000000000000000000000000000081526001600160a01b039093169263266a123a926103a3929091600401612734565b600060405180830381600087803b1580156103bd57600080fd5b505af11580156103d1573d6000803e3d6000fd5b505050508c60000160009054906101000a90046001600160a01b03166001600160a01b0316635b86f5998e60040160009054906101000a90046001600160a01b0316856040518363ffffffff1660e01b81526004016104459291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b15801561045f57600080fd5b505af1158015610473573d6000803e3d6000fd5b5050505050505050505050505050505050565b60006104d26104986020850185612677565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061109792505050565b61051e5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420696e70757420766563746f722070726f766964656400000060448201526064016101b7565b61056861052e6040850185612677565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061114792505050565b6105b45760405162461bcd60e51b815260206004820152601e60248201527f496e76616c6964206f757470757420766563746f722070726f7669646564000060448201526064016101b7565b6106176105c460208501856127b8565b6105d16020860186612677565b6105de6040880188612677565b6105ee60808a0160608b016127b8565b604051602001610603969594939291906127e2565b6040516020818303038152906040526111ea565b90506106b261066661062c6040850185612677565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061121192505050565b6106708480612677565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869493925050506020860135611220565b6107245760405162461bcd60e51b815260206004820152603c60248201527f5478206d65726b6c652070726f6f66206973206e6f742076616c696420666f7260448201527f2070726f76696465642068656164657220616e6420747820686173680000000060648201526084016101b7565b61076f846107356040850185612677565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061125e92505050565b9392505050565b6000806000610784846115cd565b915050806001146107fd5760405162461bcd60e51b815260206004820152602b60248201527f5377656570207472616e73616374696f6e206d7573742068617665206120736960448201527f6e676c65206f757470757400000000000000000000000000000000000000000060648201526084016101b7565b600061080985826115e4565b905061081586826117ca565b93506108208161198f565b925050505b9250929050565b604080516060810182526000808252602082018190529181018290526bffffffffffffffffffffffff1984166000908152601c86016020526040902060028101549092507801000000000000000000000000000000000000000000000000900460ff1660018160058111156108a3576108a3612824565b14806108c0575060028160058111156108be576108be612824565b145b6109325760405162461bcd60e51b815260206004820152602b60248201527f57616c6c6574206d75737420626520696e204c697665206f72204d6f76696e6760448201527f46756e647320737461746500000000000000000000000000000000000000000060648201526084016101b7565b604080516060810182526000808252602082018190529181019190915260018401549092508015610a4a578085356109706040880160208901612853565b6109806060890160408a01612886565b6040516020016109d59392919092835260e09190911b6001600160e01b031916602083015260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166024820152602c0190565b6040516020818303038152906040528051906020012014610a385760405162461bcd60e51b815260206004820152601660248201527f496e76616c6964206d61696e205554584f20646174610000000000000000000060448201526064016101b7565b610a47368690038601866128b7565b92505b5050935093915050565b610a7f6040518060800160405280600081526020016060815260200160608152602001606081525090565b8151151560008080610a90876115cd565b90925090506000610aa28360016126d4565b90508415610aba57610ab56001836126ec565b610abc565b815b67ffffffffffffffff811115610ad457610ad46128a1565b604051908082528060200260200182016040528015610afd578160200160208202803683370190505b50602087018190525167ffffffffffffffff811115610b1e57610b1e6128a1565b604051908082528060200260200182016040528015610b47578160200160208202803683370190505b50604087015260208601515167ffffffffffffffff811115610b6b57610b6b6128a1565b604051908082528060200260200182016040528015610b94578160200160208202803683370190505b5060608701526000805b83811015610f5e576000806000610bb58d87611a06565b92509250925060008e60060160008585604051602001610bec92919091825260e01b6001600160e01b031916602082015260240190565b60408051808303601f190181529181528151602092830120835290820192909252016000208054909150600160e01b900463ffffffff1615610e2a576001810154600160e01b900463ffffffff1615610c875760405162461bcd60e51b815260206004820152601560248201527f4465706f73697420616c7265616479207377657074000000000000000000000060448201526064016101b7565b8b6020015151861415610d025760405162461bcd60e51b815260206004820152603a60248201527f4578706563746564206d61696e205554584f206e6f742070726573656e74206960448201527f6e207377656570207472616e73616374696f6e20696e7075747300000000000060648201526084016101b7565b6001810180547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160e01b4263ffffffff1602179055805460208d015180516001600160a01b039092169188908110610d5b57610d5b612703565b6001600160a01b039290921660209283029190910190910152805460408d01518051600160a01b90920467ffffffffffffffff169188908110610da057610da0612703565b6020026020010181815250508b604001518681518110610dc257610dc2612703565b60200260200101518c600001818151610ddb91906126d4565b905250600181015460608d01518051600160a01b90920467ffffffffffffffff169188908110610e0d57610e0d612703565b602090810291909101015285610e2281612719565b965050610f3b565b8915158b151514158015610e3e57508c5184145b8015610e5957508263ffffffff168d6020015163ffffffff16145b15610ef3578c6040015167ffffffffffffffff168c600001818151610e7e91906126d4565b915081815250506001995060018f60180160008686604051602001610eba92919091825260e01b6001600160e01b031916602082015260240190565b60408051808303601f19018152918152815160209283012083529082019290925201600020805460ff1916911515919091179055610f3b565b60405162461bcd60e51b815260206004820152601260248201527f556e6b6e6f776e20696e7075742074797065000000000000000000000000000060448201526064016101b7565b610f4582886126d4565b9650505050508080610f5690612719565b915050610b9e565b5060008111610fd55760405162461bcd60e51b815260206004820152603360248201527f5377656570207472616e73616374696f6e206d7573742070726f63657373206160448201527f74206c65617374206f6e65206465706f7369740000000000000000000000000060648201526084016101b7565b8415158615151461104e5760405162461bcd60e51b815260206004820152603a60248201527f4578706563746564206d61696e205554584f206e6f742070726573656e74206960448201527f6e207377656570207472616e73616374696f6e20696e7075747300000000000060648201526084016101b7565b5050505050509392505050565b6000808061106985876126ec565b90506110758482612940565b91508361108283836126ec565b61108c9190612954565b925050935093915050565b60008060006110a5846115cd565b90925090508015806110b8575060001982145b156110c7575060009392505050565b60006110d48360016126d4565b905060005b8281101561113a57855182106110f55750600095945050505050565b60006111018784611a5e565b905060001981141561111a575060009695505050505050565b61112481846126d4565b925050808061113290612719565b9150506110d9565b5093519093149392505050565b6000806000611155846115cd565b9092509050801580611168575060001982145b15611177575060009392505050565b60006111848360016126d4565b905060005b8281101561113a57855182106111a55750600095945050505050565b60006111b18784611ab2565b90506000198114156111ca575060009695505050505050565b6111d481846126d4565b92505080806111e290612719565b915050611189565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b60448101516000905b92915050565b6000838514801561122f575081155b801561123a57508251155b1561124757506001611256565b61125385848685611b18565b90505b949350505050565b6001820154604080517f113764be00000000000000000000000000000000000000000000000000000000815290516001600160a01b0390921691600091839163113764be91600480820192602092909190829003018186803b1580156112c357600080fd5b505afa1580156112d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fb9190612968565b90506000826001600160a01b0316632b97be246040518163ffffffff1660e01b815260040160206040518083038186803b15801561133857600080fd5b505afa15801561134c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113709190612968565b905060008061138661138187611bc0565b611c55565b90508381141561139857839150611416565b828114156113a857829150611416565b60405162461bcd60e51b815260206004820152602560248201527f4e6f742061742063757272656e74206f722070726576696f757320646966666960448201527f63756c747900000000000000000000000000000000000000000000000000000060648201526084016101b7565b600061142187611c7d565b905060001981141561149b5760405162461bcd60e51b815260206004820152602360248201527f496e76616c6964206c656e677468206f6620746865206865616465727320636860448201527f61696e000000000000000000000000000000000000000000000000000000000060648201526084016101b7565b6001198114156114ed5760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206865616465727320636861696e000000000000000000000060448201526064016101b7565b60021981141561153f5760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420776f726b20696e20612068656164657200000060448201526064016101b7565b600388015461154e9084612981565b8110156115c35760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420616363756d756c61746564206469666669637560448201527f6c747920696e2068656164657220636861696e0000000000000000000000000060648201526084016101b7565b5050505050505050565b6000806115db836000611e84565b91509150915091565b60606000806115f2856115cd565b909250905060001982141561166f5760405162461bcd60e51b815260206004820152602260248201527f52656164206f76657272756e20647572696e6720566172496e7420706172736960448201527f6e6700000000000000000000000000000000000000000000000000000000000060648201526084016101b7565b8084106116be5760405162461bcd60e51b815260206004820152601160248201527f566f75742072656164206f76657272756e00000000000000000000000000000060448201526064016101b7565b6000806116cc8460016126d4565b905060005b86811015611755576116e38883611ab2565b92506000198314156117375760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b657900000000000060448201526064016101b7565b61174183836126d4565b91508061174d81612719565b9150506116d1565b506117608782611ab2565b91506000198214156117b45760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b657900000000000060448201526064016101b7565b6117bf878284612001565b979650505050505050565b6000806117d6836120cb565b9050805160141461184f5760405162461bcd60e51b815260206004820152602b60248201527f4f75747075742773207075626c6963206b65792068617368206d75737420686160448201527f766520323020627974657300000000000000000000000000000000000000000060648201526084016101b7565b61185a816000612369565b91506000611878600880865161187091906126ec565b869190612001565b8051602091820120604080517f1976a91400000000000000000000000000000000000000000000000000000000818501526bffffffffffffffffffffffff1987166024820181905261222b60f21b60388301528251601a818403018152603a830184528051908601207f1600140000000000000000000000000000000000000000000000000000000000605a840152605d83019190915282516051818403018152607190920190925280519301929092209092508183148061193957508083145b6119855760405162461bcd60e51b815260206004820152601e60248201527f4f7574707574206d757374206265205032504b48206f7220503257504b48000060448201526064016101b7565b5050505092915050565b60008061199b83612378565b60c01c905060006112568264ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b60008080611a148585612369565b9250611a49611a238686612384565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b9150611a558585611a5e565b90509250925092565b6000806000611a6d858561239b565b9092509050600019821415611a88576000199250505061121a565b80611a948360256126d4565b611a9e91906126d4565b611aa99060046126d4565b95945050505050565b6000611abf8260096126d4565b83511015611ad0575060001961121a565b600080611ae785611ae28660086126d4565b611e84565b9092509050600019821415611b02576000199250505061121a565b80611b0e8360096126d4565b611aa991906126d4565b600060208451611b289190612940565b15611b3557506000611256565b8351611b4357506000611256565b818560005b8651811015611bb357611b5c600284612940565b60011415611b8157611b7a611b748883016020015190565b836123dd565b9150611b9a565b611b9782611b928984016020015190565b6123dd565b91505b60019290921c91611bac6020826126d4565b9050611b48565b5090931495945050505050565b600080611bce836048612369565b60e81c9050600083604b81518110611be857611be8612703565b016020015160f81c90506000611c1c83600060108262ffffff16901c8261ff001660108462ffffff16901b17179050919050565b62ffffff1690506000611c306003846129a0565b60ff169050611c4181610100612aa7565b611c4b9083612981565b9695505050505050565b600061121a7bffff0000000000000000000000000000000000000000000000000000836123e9565b600060508251611c8d9190612940565b15611c9b5750600019919050565b506040805160808101909152605081526000908190815b8451811015611e7c57611cc68583836123f5565b8015611ce657611cd6828461248a565b611ce65750600119949350505050565b6000611cf183611bc0565b9050611cfc836111ea565b935080611e408560008190506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b600882901c7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff161790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b601082901c7dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff161790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b602082901c7bffffffff00000000ffffffff00000000ffffffff00000000ffffffff1617905060408177ffffffffffffffff0000000000000000ffffffffffffffff16901b604082901c77ffffffffffffffff0000000000000000ffffffffffffffff16179050608081901b608082901c179050919050565b1115611e53575060021995945050505050565b611e66611e5f82611c55565b86906124b3565b9450611e7590506050826126d4565b9050611cb2565b505050919050565b6000806000611e938585612511565b905060ff8116611ec5576000858581518110611eb157611eb1612703565b016020015190935060f81c91506108259050565b83611ed1826001612ab3565b60ff16611ede91906126d4565b85511015611ef55760001960009250925050610825565b60008160ff1660021415611f3a57611f2f611f1b611f148760016126d4565b8890612369565b62ffff0060e882901c1660f89190911c1790565b61ffff169050611ff1565b8160ff1660041415611f6457611f57611a23611f148760016126d4565b63ffffffff169050611ff1565b8160ff1660081415611ff157611fe4611f81611f148760016126d4565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090509250929050565b60608161201d575060408051602081019091526000815261076f565b600061202983856126d4565b9050838111801561203b575080855110155b6120875760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e64730000000000000000000000000060448201526064016101b7565b604051915082604083010160405282825283850182038460208701018481015b808210156120c0578151838301526020820191506120a7565b505050509392505050565b60606000826008815181106120e2576120e2612703565b0160200151835160f89190911c91506120fc826009612ab3565b60ff161461211a575050604080516020810190915260008152919050565b8260098151811061212d5761212d612703565b016020015160f81c6121cb5760028160ff16101561215b575050604080516020810190915260008152919050565b600083600a8151811061217057612170612703565b016020015160f81c90506121856002836129a0565b60ff16811415806121a35750806020141580156121a3575080601414155b156121bf57505060408051602081019091526000815292915050565b61125684600b83612001565b60006121d8846008612369565b90507f1976a900000000000000000000000000000000000000000000000000000000007fffffff0000000000000000000000000000000000000000000000000000000000821614156122b55783600b8151811061223757612237612703565b60209101015160f81c601414158061228c57506122626002855161225b91906126ec565b8590612369565b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191661222b60f21b14155b156122a857505060408051602081019091526000815292915050565b61125684600c6014612001565b7f17a91400000000000000000000000000000000000000000000000000000000007fffffff00000000000000000000000000000000000000000000000000000000008216141561235257836001855161230e91906126ec565b8151811061231e5761231e612703565b60209101015160f81c60871461234557505060408051602081019091526000815292915050565b61125684600b6014612001565b505050604080516020810190915260008152919050565b600061076f8383016020015190565b600061121a8282612369565b600061076f6123948360206126d4565b8490612369565b6000806123a98360256126d4565b845110156123be575060001990506000610825565b6000806123d086611ae28760246126d4565b9097909650945050505050565b600061076f838361259d565b600061076f8284612954565b8151600061240382846126d4565b90508281118015612415575080855110155b6124615760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e64730000000000000000000000000060448201526064016101b7565b826020860101602085018382015b808310156115c357825182526020928301929091019061246f565b600080612496846125cb565b90508281146124a957600091505061121a565b5060019392505050565b60006124bf82846126d4565b90508281101561121a5760405162461bcd60e51b815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e0000000000000060448201526064016101b7565b600082828151811061252557612525612703565b60209101015160f81c60ff141561253e5750600861121a565b82828151811061255057612550612703565b60209101015160f81c60fe14156125695750600461121a565b82828151811061257b5761257b612703565b60209101015160f81c60fd14156125945750600261121a565b50600092915050565b60008260005281602052602060006040600060025afa50602060006020600060025afa505060005192915050565b602481015160009061121a565b6000606082840312156125ea57600080fd5b50919050565b60008060008060c0858703121561260657600080fd5b84359350602085013567ffffffffffffffff8082111561262557600080fd5b908601906080828903121561263957600080fd5b9093506040860135908082111561264f57600080fd5b5061265c878288016125d8565b92505061266c86606087016125d8565b905092959194509250565b6000808335601e1984360301811261268e57600080fd5b83018035915067ffffffffffffffff8211156126a957600080fd5b60200191503681900382131561082557600080fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156126e7576126e76126be565b500190565b6000828210156126fe576126fe6126be565b500390565b634e487b7160e01b600052603260045260246000fd5b600060001982141561272d5761272d6126be565b5060010190565b604080825283519082018190526000906020906060840190828701845b828110156127765781516001600160a01b031684529284019290840190600101612751565b5050508381038285015284518082528583019183019060005b818110156127ab5783518352928401929184019160010161278f565b5090979650505050505050565b6000602082840312156127ca57600080fd5b81356001600160e01b03198116811461076f57600080fd5b60006001600160e01b03198089168352868860048501378683016004810160008152868882375093169390920160048101939093525050600801949350505050565b634e487b7160e01b600052602160045260246000fd5b803563ffffffff8116811461284e57600080fd5b919050565b60006020828403121561286557600080fd5b61076f8261283a565b803567ffffffffffffffff8116811461284e57600080fd5b60006020828403121561289857600080fd5b61076f8261286e565b634e487b7160e01b600052604160045260246000fd5b6000606082840312156128c957600080fd5b6040516060810181811067ffffffffffffffff821117156128fa57634e487b7160e01b600052604160045260246000fd5b6040528235815261290d6020840161283a565b602082015261291e6040840161286e565b60408201529392505050565b634e487b7160e01b600052601260045260246000fd5b60008261294f5761294f61292a565b500690565b6000826129635761296361292a565b500490565b60006020828403121561297a57600080fd5b5051919050565b600081600019048311821515161561299b5761299b6126be565b500290565b600060ff821660ff8416808210156129ba576129ba6126be565b90039392505050565b600181815b808511156129fe5781600019048211156129e4576129e46126be565b808516156129f157918102915b93841c93908002906129c8565b509250929050565b600082612a155750600161121a565b81612a225750600061121a565b8160018114612a385760028114612a4257612a5e565b600191505061121a565b60ff841115612a5357612a536126be565b50506001821b61121a565b5060208310610133831016604e8410600b8410161715612a81575081810a61121a565b612a8b83836129c3565b8060001904821115612a9f57612a9f6126be565b029392505050565b600061076f8383612a06565b600060ff821660ff84168060ff03821115612ad057612ad06126be565b01939250505056fea2646970667358221220d47e0bb2d4cd6868277c5bc975320458154939e0b2cc632b54547ec3e2fb1eea64736f6c63430008090033",
26
+ "bytecode": "0x612d0a61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063d22cd45b1461003a575b600080fd5b81801561004657600080fd5b5061005a610055366004612782565b61005c565b005b6000610069868686610575565b90506000806100b98861007f60408a018a61282a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061086592505050565b915091506000806100cb8a858961091b565b9150915060006101438b60405180606001604052808d80602001906100f0919061282a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602081018690526001600160a01b038b16604090910152610b43565b90506000808061016784600001518867ffffffffffffffff168660400151516111ef565b915091508d60050160089054906101000a900467ffffffffffffffff1667ffffffffffffffff16818361019a9190612887565b11156101ed5760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e2066656520697320746f6f2068696768000000000060448201526064015b60405180910390fd5b60005b8460400151518110156102db5760006001866040015151610211919061289f565b821461021d5783610227565b6102278385612887565b90508086606001518381518110610240576102406128b6565b60200260200101518760400151848151811061025e5761025e6128b6565b6020026020010151610270919061289f565b61027a919061289f565b86604001518381518110610290576102906128b6565b602002602001018181525050856060015182815181106102b2576102b26128b6565b6020026020010151856102c59190612887565b94505080806102d3906128cc565b9150506101f0565b5060408051602081018b90526000918101919091527fffffffffffffffff00000000000000000000000000000000000000000000000060c089901b166044820152604c0160408051808303601f19018152828252805160209182012060018a01556bffffffffffffffffffffffff198b16835282018b90527fe50ffdcc0a5f2c1ede5c122b9414ffd7b2c6bc870d2d775194049dc30da95e6a910160405180910390a16001600160a01b038a16158015906103b057506001600160a01b038a16600090815260078f01602052604090205460ff165b1561043e578d54602085015160408087015190517fbb7e61bc0000000000000000000000000000000000000000000000000000000081526001600160a01b039093169263bb7e61bc92610407928f9260040161295b565b600060405180830381600087803b15801561042157600080fd5b505af1158015610435573d6000803e3d6000fd5b505050506104c3565b8d54602085015160408087015190517f266a123a0000000000000000000000000000000000000000000000000000000081526001600160a01b039093169263266a123a9261049092909160040161298f565b600060405180830381600087803b1580156104aa57600080fd5b505af11580156104be573d6000803e3d6000fd5b505050505b8d60000160009054906101000a90046001600160a01b03166001600160a01b0316635b86f5998f60040160009054906101000a90046001600160a01b0316856040518363ffffffff1660e01b81526004016105339291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b15801561054d57600080fd5b505af1158015610561573d6000803e3d6000fd5b505050505050505050505050505050505050565b60006105c1610587602085018561282a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061122b92505050565b61060d5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420696e70757420766563746f722070726f766964656400000060448201526064016101e4565b61065761061d604085018561282a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112db92505050565b6106a35760405162461bcd60e51b815260206004820152601e60248201527f496e76616c6964206f757470757420766563746f722070726f7669646564000060448201526064016101e4565b6107066106b360208501856129b4565b6106c0602086018661282a565b6106cd604088018861282a565b6106dd60808a0160608b016129b4565b6040516020016106f2969594939291906129de565b60405160208183030381529060405261137e565b90506107a161075561071b604085018561282a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113a592505050565b61075f848061282a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508694939250505060208601356113b2565b6108135760405162461bcd60e51b815260206004820152603c60248201527f5478206d65726b6c652070726f6f66206973206e6f742076616c696420666f7260448201527f2070726f76696465642068656164657220616e6420747820686173680000000060648201526084016101e4565b61085e84610824604085018561282a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113f092505050565b9392505050565b60008060006108738461175f565b915050806001146108ec5760405162461bcd60e51b815260206004820152602b60248201527f5377656570207472616e73616374696f6e206d7573742068617665206120736960448201527f6e676c65206f757470757400000000000000000000000000000000000000000060648201526084016101e4565b60006108f88582611776565b9050610904868261195c565b935061090f81611b21565b925050505b9250929050565b604080516060810182526000808252602082018190529181018290526bffffffffffffffffffffffff1984166000908152601c86016020526040902060028101549092507801000000000000000000000000000000000000000000000000900460ff16600181600581111561099257610992612a20565b14806109af575060028160058111156109ad576109ad612a20565b145b610a215760405162461bcd60e51b815260206004820152602b60248201527f57616c6c6574206d75737420626520696e204c697665206f72204d6f76696e6760448201527f46756e647320737461746500000000000000000000000000000000000000000060648201526084016101e4565b604080516060810182526000808252602082018190529181019190915260018401549092508015610b3957808535610a5f6040880160208901612a4f565b610a6f6060890160408a01612a82565b604051602001610ac49392919092835260e09190911b6001600160e01b031916602083015260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166024820152602c0190565b6040516020818303038152906040528051906020012014610b275760405162461bcd60e51b815260206004820152601660248201527f496e76616c6964206d61696e205554584f20646174610000000000000000000060448201526064016101e4565b610b3636869003860186612ab3565b92505b5050935093915050565b610b6e6040518060800160405280600081526020016060815260200160608152602001606081525090565b60208201515182519015159060009081908190610b8a9061175f565b90925090506000610b9c836001612887565b90508415610bb457610baf60018361289f565b610bb6565b815b67ffffffffffffffff811115610bce57610bce612a9d565b604051908082528060200260200182016040528015610bf7578160200160208202803683370190505b50602087018190525167ffffffffffffffff811115610c1857610c18612a9d565b604051908082528060200260200182016040528015610c41578160200160208202803683370190505b50604087015260208601515167ffffffffffffffff811115610c6557610c65612a9d565b604051908082528060200260200182016040528015610c8e578160200160208202803683370190505b5060608701526000805b838110156110f2576000806000610cb38c6000015187611b98565b92509250925060008d60060160008585604051602001610cea92919091825260e01b6001600160e01b031916602082015260240190565b60408051808303601f190181529181528151602092830120835290820192909252016000208054909150600160e01b900463ffffffff1615610fb2576001810154600160e01b900463ffffffff1615610d855760405162461bcd60e51b815260206004820152601560248201527f4465706f73697420616c7265616479207377657074000000000000000000000060448201526064016101e4565b60408d015160018201546001600160a01b03908116911614610e0f5760405162461bcd60e51b815260206004820152602960248201527f4465706f7369742073686f756c6420626520726f7574656420746f20616e6f7460448201527f686572207661756c74000000000000000000000000000000000000000000000060648201526084016101e4565b8b6020015151861415610e8a5760405162461bcd60e51b815260206004820152603a60248201527f4578706563746564206d61696e205554584f206e6f742070726573656e74206960448201527f6e207377656570207472616e73616374696f6e20696e7075747300000000000060648201526084016101e4565b6001810180547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160e01b4263ffffffff1602179055805460208d015180516001600160a01b039092169188908110610ee357610ee36128b6565b6001600160a01b039290921660209283029190910190910152805460408d01518051600160a01b90920467ffffffffffffffff169188908110610f2857610f286128b6565b6020026020010181815250508b604001518681518110610f4a57610f4a6128b6565b60200260200101518c600001818151610f639190612887565b905250600181015460608d01518051600160a01b90920467ffffffffffffffff169188908110610f9557610f956128b6565b602090810291909101015285610faa816128cc565b9650506110cf565b8915158b151514158015610fca575060208d01515184145b8015610fe957508263ffffffff168d602001516020015163ffffffff16145b15611087578c602001516040015167ffffffffffffffff168c6000018181516110129190612887565b915081815250506001995060018e6018016000868660405160200161104e92919091825260e01b6001600160e01b031916602082015260240190565b60408051808303601f19018152918152815160209283012083529082019290925201600020805460ff19169115159190911790556110cf565b60405162461bcd60e51b815260206004820152601260248201527f556e6b6e6f776e20696e7075742074797065000000000000000000000000000060448201526064016101e4565b6110d98288612887565b96505050505080806110ea906128cc565b915050610c98565b50600081116111695760405162461bcd60e51b815260206004820152603360248201527f5377656570207472616e73616374696f6e206d7573742070726f63657373206160448201527f74206c65617374206f6e65206465706f7369740000000000000000000000000060648201526084016101e4565b841515861515146111e25760405162461bcd60e51b815260206004820152603a60248201527f4578706563746564206d61696e205554584f206e6f742070726573656e74206960448201527f6e207377656570207472616e73616374696f6e20696e7075747300000000000060648201526084016101e4565b5050505050505b92915050565b600080806111fd858761289f565b90506112098482612b3c565b915083611216838361289f565b6112209190612b50565b925050935093915050565b60008060006112398461175f565b909250905080158061124c575060001982145b1561125b575060009392505050565b6000611268836001612887565b905060005b828110156112ce57855182106112895750600095945050505050565b60006112958784611bf0565b90506000198114156112ae575060009695505050505050565b6112b88184612887565b92505080806112c6906128cc565b91505061126d565b5093519093149392505050565b60008060006112e98461175f565b90925090508015806112fc575060001982145b1561130b575060009392505050565b6000611318836001612887565b905060005b828110156112ce57855182106113395750600095945050505050565b60006113458784611c44565b905060001981141561135e575060009695505050505050565b6113688184612887565b9250508080611376906128cc565b91505061131d565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b60448101516000906111e9565b600083851480156113c1575081155b80156113cc57508251155b156113d9575060016113e8565b6113e585848685611caa565b90505b949350505050565b6001820154604080517f113764be00000000000000000000000000000000000000000000000000000000815290516001600160a01b0390921691600091839163113764be91600480820192602092909190829003018186803b15801561145557600080fd5b505afa158015611469573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148d9190612b64565b90506000826001600160a01b0316632b97be246040518163ffffffff1660e01b815260040160206040518083038186803b1580156114ca57600080fd5b505afa1580156114de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115029190612b64565b905060008061151861151387611d52565b611de7565b90508381141561152a578391506115a8565b8281141561153a578291506115a8565b60405162461bcd60e51b815260206004820152602560248201527f4e6f742061742063757272656e74206f722070726576696f757320646966666960448201527f63756c747900000000000000000000000000000000000000000000000000000060648201526084016101e4565b60006115b387611e0f565b905060001981141561162d5760405162461bcd60e51b815260206004820152602360248201527f496e76616c6964206c656e677468206f6620746865206865616465727320636860448201527f61696e000000000000000000000000000000000000000000000000000000000060648201526084016101e4565b60011981141561167f5760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206865616465727320636861696e000000000000000000000060448201526064016101e4565b6002198114156116d15760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420776f726b20696e20612068656164657200000060448201526064016101e4565b60038801546116e09084612b7d565b8110156117555760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420616363756d756c61746564206469666669637560448201527f6c747920696e2068656164657220636861696e0000000000000000000000000060648201526084016101e4565b5050505050505050565b60008061176d836000612016565b91509150915091565b60606000806117848561175f565b90925090506000198214156118015760405162461bcd60e51b815260206004820152602260248201527f52656164206f76657272756e20647572696e6720566172496e7420706172736960448201527f6e6700000000000000000000000000000000000000000000000000000000000060648201526084016101e4565b8084106118505760405162461bcd60e51b815260206004820152601160248201527f566f75742072656164206f76657272756e00000000000000000000000000000060448201526064016101e4565b60008061185e846001612887565b905060005b868110156118e7576118758883611c44565b92506000198314156118c95760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b657900000000000060448201526064016101e4565b6118d38383612887565b9150806118df816128cc565b915050611863565b506118f28782611c44565b91506000198214156119465760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b657900000000000060448201526064016101e4565b611951878284612193565b979650505050505050565b6000806119688361225d565b905080516014146119e15760405162461bcd60e51b815260206004820152602b60248201527f4f75747075742773207075626c6963206b65792068617368206d75737420686160448201527f766520323020627974657300000000000000000000000000000000000000000060648201526084016101e4565b6119ec8160006124fb565b91506000611a0a6008808651611a02919061289f565b869190612193565b8051602091820120604080517f1976a91400000000000000000000000000000000000000000000000000000000818501526bffffffffffffffffffffffff1987166024820181905261222b60f21b60388301528251601a818403018152603a830184528051908601207f1600140000000000000000000000000000000000000000000000000000000000605a840152605d830191909152825160518184030181526071909201909252805193019290922090925081831480611acb57508083145b611b175760405162461bcd60e51b815260206004820152601e60248201527f4f7574707574206d757374206265205032504b48206f7220503257504b48000060448201526064016101e4565b5050505092915050565b600080611b2d8361250a565b60c01c905060006113e88264ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b60008080611ba685856124fb565b9250611bdb611bb58686612516565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b9150611be78585611bf0565b90509250925092565b6000806000611bff858561252d565b9092509050600019821415611c1a57600019925050506111e9565b80611c26836025612887565b611c309190612887565b611c3b906004612887565b95945050505050565b6000611c51826009612887565b83511015611c6257506000196111e9565b600080611c7985611c74866008612887565b612016565b9092509050600019821415611c9457600019925050506111e9565b80611ca0836009612887565b611c3b9190612887565b600060208451611cba9190612b3c565b15611cc7575060006113e8565b8351611cd5575060006113e8565b818560005b8651811015611d4557611cee600284612b3c565b60011415611d1357611d0c611d068883016020015190565b8361256f565b9150611d2c565b611d2982611d248984016020015190565b61256f565b91505b60019290921c91611d3e602082612887565b9050611cda565b5090931495945050505050565b600080611d608360486124fb565b60e81c9050600083604b81518110611d7a57611d7a6128b6565b016020015160f81c90506000611dae83600060108262ffffff16901c8261ff001660108462ffffff16901b17179050919050565b62ffffff1690506000611dc2600384612b9c565b60ff169050611dd381610100612ca3565b611ddd9083612b7d565b9695505050505050565b60006111e97bffff00000000000000000000000000000000000000000000000000008361257b565b600060508251611e1f9190612b3c565b15611e2d5750600019919050565b506040805160808101909152605081526000908190815b845181101561200e57611e58858383612587565b8015611e7857611e68828461261c565b611e785750600119949350505050565b6000611e8383611d52565b9050611e8e8361137e565b935080611fd28560008190506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b600882901c7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff161790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b601082901c7dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff161790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b602082901c7bffffffff00000000ffffffff00000000ffffffff00000000ffffffff1617905060408177ffffffffffffffff0000000000000000ffffffffffffffff16901b604082901c77ffffffffffffffff0000000000000000ffffffffffffffff16179050608081901b608082901c179050919050565b1115611fe5575060021995945050505050565b611ff8611ff182611de7565b8690612645565b94506120079050605082612887565b9050611e44565b505050919050565b600080600061202585856126a3565b905060ff8116612057576000858581518110612043576120436128b6565b016020015190935060f81c91506109149050565b83612063826001612caf565b60ff166120709190612887565b855110156120875760001960009250925050610914565b60008160ff16600214156120cc576120c16120ad6120a6876001612887565b88906124fb565b62ffff0060e882901c1660f89190911c1790565b61ffff169050612183565b8160ff16600414156120f6576120e9611bb56120a6876001612887565b63ffffffff169050612183565b8160ff1660081415612183576121766121136120a6876001612887565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090509250929050565b6060816121af575060408051602081019091526000815261085e565b60006121bb8385612887565b905083811180156121cd575080855110155b6122195760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e64730000000000000000000000000060448201526064016101e4565b604051915082604083010160405282825283850182038460208701018481015b8082101561225257815183830152602082019150612239565b505050509392505050565b6060600082600881518110612274576122746128b6565b0160200151835160f89190911c915061228e826009612caf565b60ff16146122ac575050604080516020810190915260008152919050565b826009815181106122bf576122bf6128b6565b016020015160f81c61235d5760028160ff1610156122ed575050604080516020810190915260008152919050565b600083600a81518110612302576123026128b6565b016020015160f81c9050612317600283612b9c565b60ff1681141580612335575080602014158015612335575080601414155b1561235157505060408051602081019091526000815292915050565b6113e884600b83612193565b600061236a8460086124fb565b90507f1976a900000000000000000000000000000000000000000000000000000000007fffffff0000000000000000000000000000000000000000000000000000000000821614156124475783600b815181106123c9576123c96128b6565b60209101015160f81c601414158061241e57506123f4600285516123ed919061289f565b85906124fb565b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191661222b60f21b14155b1561243a57505060408051602081019091526000815292915050565b6113e884600c6014612193565b7f17a91400000000000000000000000000000000000000000000000000000000007fffffff0000000000000000000000000000000000000000000000000000000000821614156124e45783600185516124a0919061289f565b815181106124b0576124b06128b6565b60209101015160f81c6087146124d757505060408051602081019091526000815292915050565b6113e884600b6014612193565b505050604080516020810190915260008152919050565b600061085e8383016020015190565b60006111e982826124fb565b600061085e612526836020612887565b84906124fb565b60008061253b836025612887565b84511015612550575060001990506000610914565b60008061256286611c74876024612887565b9097909650945050505050565b600061085e838361272f565b600061085e8284612b50565b815160006125958284612887565b905082811180156125a7575080855110155b6125f35760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e64730000000000000000000000000060448201526064016101e4565b826020860101602085018382015b80831015611755578251825260209283019290910190612601565b6000806126288461275d565b905082811461263b5760009150506111e9565b5060019392505050565b60006126518284612887565b9050828110156111e95760405162461bcd60e51b815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e0000000000000060448201526064016101e4565b60008282815181106126b7576126b76128b6565b60209101015160f81c60ff14156126d0575060086111e9565b8282815181106126e2576126e26128b6565b60209101015160f81c60fe14156126fb575060046111e9565b82828151811061270d5761270d6128b6565b60209101015160f81c60fd1415612726575060026111e9565b50600092915050565b60008260005281602052602060006040600060025afa50602060006020600060025afa505060005192915050565b60248101516000906111e9565b60006060828403121561277c57600080fd5b50919050565b600080600080600060e0868803121561279a57600080fd5b85359450602086013567ffffffffffffffff808211156127b957600080fd5b908701906080828a0312156127cd57600080fd5b909450604087013590808211156127e357600080fd5b506127f08882890161276a565b935050612800876060880161276a565b915060c08601356001600160a01b038116811461281c57600080fd5b809150509295509295909350565b6000808335601e1984360301811261284157600080fd5b83018035915067ffffffffffffffff82111561285c57600080fd5b60200191503681900382131561091457600080fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561289a5761289a612871565b500190565b6000828210156128b1576128b1612871565b500390565b634e487b7160e01b600052603260045260246000fd5b60006000198214156128e0576128e0612871565b5060010190565b600081518084526020808501945080840160005b838110156129205781516001600160a01b0316875295820195908201906001016128fb565b509495945050505050565b600081518084526020808501945080840160005b838110156129205781518752958201959082019060010161293f565b6001600160a01b038416815260606020820152600061297d60608301856128e7565b8281036040840152611ddd818561292b565b6040815260006129a260408301856128e7565b8281036020840152611c3b818561292b565b6000602082840312156129c657600080fd5b81356001600160e01b03198116811461085e57600080fd5b60006001600160e01b03198089168352868860048501378683016004810160008152868882375093169390920160048101939093525050600801949350505050565b634e487b7160e01b600052602160045260246000fd5b803563ffffffff81168114612a4a57600080fd5b919050565b600060208284031215612a6157600080fd5b61085e82612a36565b803567ffffffffffffffff81168114612a4a57600080fd5b600060208284031215612a9457600080fd5b61085e82612a6a565b634e487b7160e01b600052604160045260246000fd5b600060608284031215612ac557600080fd5b6040516060810181811067ffffffffffffffff82111715612af657634e487b7160e01b600052604160045260246000fd5b60405282358152612b0960208401612a36565b6020820152612b1a60408401612a6a565b60408201529392505050565b634e487b7160e01b600052601260045260246000fd5b600082612b4b57612b4b612b26565b500690565b600082612b5f57612b5f612b26565b500490565b600060208284031215612b7657600080fd5b5051919050565b6000816000190483118215151615612b9757612b97612871565b500290565b600060ff821660ff841680821015612bb657612bb6612871565b90039392505050565b600181815b80851115612bfa578160001904821115612be057612be0612871565b80851615612bed57918102915b93841c9390800290612bc4565b509250929050565b600082612c11575060016111e9565b81612c1e575060006111e9565b8160018114612c345760028114612c3e57612c5a565b60019150506111e9565b60ff841115612c4f57612c4f612871565b50506001821b6111e9565b5060208310610133831016604e8410600b8410161715612c7d575081810a6111e9565b612c878383612bbf565b8060001904821115612c9b57612c9b612871565b029392505050565b600061085e8383612c02565b600060ff821660ff84168060ff03821115612ccc57612ccc612871565b01939250505056fea26469706673582212200ac0b5bb9e76458feb2caec5bd0586dd29c13572c7292b042a23bf6977cdadeb64736f6c63430008090033",
27
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063d22cd45b1461003a575b600080fd5b81801561004657600080fd5b5061005a610055366004612782565b61005c565b005b6000610069868686610575565b90506000806100b98861007f60408a018a61282a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061086592505050565b915091506000806100cb8a858961091b565b9150915060006101438b60405180606001604052808d80602001906100f0919061282a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602081018690526001600160a01b038b16604090910152610b43565b90506000808061016784600001518867ffffffffffffffff168660400151516111ef565b915091508d60050160089054906101000a900467ffffffffffffffff1667ffffffffffffffff16818361019a9190612887565b11156101ed5760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e2066656520697320746f6f2068696768000000000060448201526064015b60405180910390fd5b60005b8460400151518110156102db5760006001866040015151610211919061289f565b821461021d5783610227565b6102278385612887565b90508086606001518381518110610240576102406128b6565b60200260200101518760400151848151811061025e5761025e6128b6565b6020026020010151610270919061289f565b61027a919061289f565b86604001518381518110610290576102906128b6565b602002602001018181525050856060015182815181106102b2576102b26128b6565b6020026020010151856102c59190612887565b94505080806102d3906128cc565b9150506101f0565b5060408051602081018b90526000918101919091527fffffffffffffffff00000000000000000000000000000000000000000000000060c089901b166044820152604c0160408051808303601f19018152828252805160209182012060018a01556bffffffffffffffffffffffff198b16835282018b90527fe50ffdcc0a5f2c1ede5c122b9414ffd7b2c6bc870d2d775194049dc30da95e6a910160405180910390a16001600160a01b038a16158015906103b057506001600160a01b038a16600090815260078f01602052604090205460ff165b1561043e578d54602085015160408087015190517fbb7e61bc0000000000000000000000000000000000000000000000000000000081526001600160a01b039093169263bb7e61bc92610407928f9260040161295b565b600060405180830381600087803b15801561042157600080fd5b505af1158015610435573d6000803e3d6000fd5b505050506104c3565b8d54602085015160408087015190517f266a123a0000000000000000000000000000000000000000000000000000000081526001600160a01b039093169263266a123a9261049092909160040161298f565b600060405180830381600087803b1580156104aa57600080fd5b505af11580156104be573d6000803e3d6000fd5b505050505b8d60000160009054906101000a90046001600160a01b03166001600160a01b0316635b86f5998f60040160009054906101000a90046001600160a01b0316856040518363ffffffff1660e01b81526004016105339291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b15801561054d57600080fd5b505af1158015610561573d6000803e3d6000fd5b505050505050505050505050505050505050565b60006105c1610587602085018561282a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061122b92505050565b61060d5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420696e70757420766563746f722070726f766964656400000060448201526064016101e4565b61065761061d604085018561282a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112db92505050565b6106a35760405162461bcd60e51b815260206004820152601e60248201527f496e76616c6964206f757470757420766563746f722070726f7669646564000060448201526064016101e4565b6107066106b360208501856129b4565b6106c0602086018661282a565b6106cd604088018861282a565b6106dd60808a0160608b016129b4565b6040516020016106f2969594939291906129de565b60405160208183030381529060405261137e565b90506107a161075561071b604085018561282a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113a592505050565b61075f848061282a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508694939250505060208601356113b2565b6108135760405162461bcd60e51b815260206004820152603c60248201527f5478206d65726b6c652070726f6f66206973206e6f742076616c696420666f7260448201527f2070726f76696465642068656164657220616e6420747820686173680000000060648201526084016101e4565b61085e84610824604085018561282a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113f092505050565b9392505050565b60008060006108738461175f565b915050806001146108ec5760405162461bcd60e51b815260206004820152602b60248201527f5377656570207472616e73616374696f6e206d7573742068617665206120736960448201527f6e676c65206f757470757400000000000000000000000000000000000000000060648201526084016101e4565b60006108f88582611776565b9050610904868261195c565b935061090f81611b21565b925050505b9250929050565b604080516060810182526000808252602082018190529181018290526bffffffffffffffffffffffff1984166000908152601c86016020526040902060028101549092507801000000000000000000000000000000000000000000000000900460ff16600181600581111561099257610992612a20565b14806109af575060028160058111156109ad576109ad612a20565b145b610a215760405162461bcd60e51b815260206004820152602b60248201527f57616c6c6574206d75737420626520696e204c697665206f72204d6f76696e6760448201527f46756e647320737461746500000000000000000000000000000000000000000060648201526084016101e4565b604080516060810182526000808252602082018190529181019190915260018401549092508015610b3957808535610a5f6040880160208901612a4f565b610a6f6060890160408a01612a82565b604051602001610ac49392919092835260e09190911b6001600160e01b031916602083015260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166024820152602c0190565b6040516020818303038152906040528051906020012014610b275760405162461bcd60e51b815260206004820152601660248201527f496e76616c6964206d61696e205554584f20646174610000000000000000000060448201526064016101e4565b610b3636869003860186612ab3565b92505b5050935093915050565b610b6e6040518060800160405280600081526020016060815260200160608152602001606081525090565b60208201515182519015159060009081908190610b8a9061175f565b90925090506000610b9c836001612887565b90508415610bb457610baf60018361289f565b610bb6565b815b67ffffffffffffffff811115610bce57610bce612a9d565b604051908082528060200260200182016040528015610bf7578160200160208202803683370190505b50602087018190525167ffffffffffffffff811115610c1857610c18612a9d565b604051908082528060200260200182016040528015610c41578160200160208202803683370190505b50604087015260208601515167ffffffffffffffff811115610c6557610c65612a9d565b604051908082528060200260200182016040528015610c8e578160200160208202803683370190505b5060608701526000805b838110156110f2576000806000610cb38c6000015187611b98565b92509250925060008d60060160008585604051602001610cea92919091825260e01b6001600160e01b031916602082015260240190565b60408051808303601f190181529181528151602092830120835290820192909252016000208054909150600160e01b900463ffffffff1615610fb2576001810154600160e01b900463ffffffff1615610d855760405162461bcd60e51b815260206004820152601560248201527f4465706f73697420616c7265616479207377657074000000000000000000000060448201526064016101e4565b60408d015160018201546001600160a01b03908116911614610e0f5760405162461bcd60e51b815260206004820152602960248201527f4465706f7369742073686f756c6420626520726f7574656420746f20616e6f7460448201527f686572207661756c74000000000000000000000000000000000000000000000060648201526084016101e4565b8b6020015151861415610e8a5760405162461bcd60e51b815260206004820152603a60248201527f4578706563746564206d61696e205554584f206e6f742070726573656e74206960448201527f6e207377656570207472616e73616374696f6e20696e7075747300000000000060648201526084016101e4565b6001810180547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160e01b4263ffffffff1602179055805460208d015180516001600160a01b039092169188908110610ee357610ee36128b6565b6001600160a01b039290921660209283029190910190910152805460408d01518051600160a01b90920467ffffffffffffffff169188908110610f2857610f286128b6565b6020026020010181815250508b604001518681518110610f4a57610f4a6128b6565b60200260200101518c600001818151610f639190612887565b905250600181015460608d01518051600160a01b90920467ffffffffffffffff169188908110610f9557610f956128b6565b602090810291909101015285610faa816128cc565b9650506110cf565b8915158b151514158015610fca575060208d01515184145b8015610fe957508263ffffffff168d602001516020015163ffffffff16145b15611087578c602001516040015167ffffffffffffffff168c6000018181516110129190612887565b915081815250506001995060018e6018016000868660405160200161104e92919091825260e01b6001600160e01b031916602082015260240190565b60408051808303601f19018152918152815160209283012083529082019290925201600020805460ff19169115159190911790556110cf565b60405162461bcd60e51b815260206004820152601260248201527f556e6b6e6f776e20696e7075742074797065000000000000000000000000000060448201526064016101e4565b6110d98288612887565b96505050505080806110ea906128cc565b915050610c98565b50600081116111695760405162461bcd60e51b815260206004820152603360248201527f5377656570207472616e73616374696f6e206d7573742070726f63657373206160448201527f74206c65617374206f6e65206465706f7369740000000000000000000000000060648201526084016101e4565b841515861515146111e25760405162461bcd60e51b815260206004820152603a60248201527f4578706563746564206d61696e205554584f206e6f742070726573656e74206960448201527f6e207377656570207472616e73616374696f6e20696e7075747300000000000060648201526084016101e4565b5050505050505b92915050565b600080806111fd858761289f565b90506112098482612b3c565b915083611216838361289f565b6112209190612b50565b925050935093915050565b60008060006112398461175f565b909250905080158061124c575060001982145b1561125b575060009392505050565b6000611268836001612887565b905060005b828110156112ce57855182106112895750600095945050505050565b60006112958784611bf0565b90506000198114156112ae575060009695505050505050565b6112b88184612887565b92505080806112c6906128cc565b91505061126d565b5093519093149392505050565b60008060006112e98461175f565b90925090508015806112fc575060001982145b1561130b575060009392505050565b6000611318836001612887565b905060005b828110156112ce57855182106113395750600095945050505050565b60006113458784611c44565b905060001981141561135e575060009695505050505050565b6113688184612887565b9250508080611376906128cc565b91505061131d565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b60448101516000906111e9565b600083851480156113c1575081155b80156113cc57508251155b156113d9575060016113e8565b6113e585848685611caa565b90505b949350505050565b6001820154604080517f113764be00000000000000000000000000000000000000000000000000000000815290516001600160a01b0390921691600091839163113764be91600480820192602092909190829003018186803b15801561145557600080fd5b505afa158015611469573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148d9190612b64565b90506000826001600160a01b0316632b97be246040518163ffffffff1660e01b815260040160206040518083038186803b1580156114ca57600080fd5b505afa1580156114de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115029190612b64565b905060008061151861151387611d52565b611de7565b90508381141561152a578391506115a8565b8281141561153a578291506115a8565b60405162461bcd60e51b815260206004820152602560248201527f4e6f742061742063757272656e74206f722070726576696f757320646966666960448201527f63756c747900000000000000000000000000000000000000000000000000000060648201526084016101e4565b60006115b387611e0f565b905060001981141561162d5760405162461bcd60e51b815260206004820152602360248201527f496e76616c6964206c656e677468206f6620746865206865616465727320636860448201527f61696e000000000000000000000000000000000000000000000000000000000060648201526084016101e4565b60011981141561167f5760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206865616465727320636861696e000000000000000000000060448201526064016101e4565b6002198114156116d15760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420776f726b20696e20612068656164657200000060448201526064016101e4565b60038801546116e09084612b7d565b8110156117555760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420616363756d756c61746564206469666669637560448201527f6c747920696e2068656164657220636861696e0000000000000000000000000060648201526084016101e4565b5050505050505050565b60008061176d836000612016565b91509150915091565b60606000806117848561175f565b90925090506000198214156118015760405162461bcd60e51b815260206004820152602260248201527f52656164206f76657272756e20647572696e6720566172496e7420706172736960448201527f6e6700000000000000000000000000000000000000000000000000000000000060648201526084016101e4565b8084106118505760405162461bcd60e51b815260206004820152601160248201527f566f75742072656164206f76657272756e00000000000000000000000000000060448201526064016101e4565b60008061185e846001612887565b905060005b868110156118e7576118758883611c44565b92506000198314156118c95760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b657900000000000060448201526064016101e4565b6118d38383612887565b9150806118df816128cc565b915050611863565b506118f28782611c44565b91506000198214156119465760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b657900000000000060448201526064016101e4565b611951878284612193565b979650505050505050565b6000806119688361225d565b905080516014146119e15760405162461bcd60e51b815260206004820152602b60248201527f4f75747075742773207075626c6963206b65792068617368206d75737420686160448201527f766520323020627974657300000000000000000000000000000000000000000060648201526084016101e4565b6119ec8160006124fb565b91506000611a0a6008808651611a02919061289f565b869190612193565b8051602091820120604080517f1976a91400000000000000000000000000000000000000000000000000000000818501526bffffffffffffffffffffffff1987166024820181905261222b60f21b60388301528251601a818403018152603a830184528051908601207f1600140000000000000000000000000000000000000000000000000000000000605a840152605d830191909152825160518184030181526071909201909252805193019290922090925081831480611acb57508083145b611b175760405162461bcd60e51b815260206004820152601e60248201527f4f7574707574206d757374206265205032504b48206f7220503257504b48000060448201526064016101e4565b5050505092915050565b600080611b2d8361250a565b60c01c905060006113e88264ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b60008080611ba685856124fb565b9250611bdb611bb58686612516565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b9150611be78585611bf0565b90509250925092565b6000806000611bff858561252d565b9092509050600019821415611c1a57600019925050506111e9565b80611c26836025612887565b611c309190612887565b611c3b906004612887565b95945050505050565b6000611c51826009612887565b83511015611c6257506000196111e9565b600080611c7985611c74866008612887565b612016565b9092509050600019821415611c9457600019925050506111e9565b80611ca0836009612887565b611c3b9190612887565b600060208451611cba9190612b3c565b15611cc7575060006113e8565b8351611cd5575060006113e8565b818560005b8651811015611d4557611cee600284612b3c565b60011415611d1357611d0c611d068883016020015190565b8361256f565b9150611d2c565b611d2982611d248984016020015190565b61256f565b91505b60019290921c91611d3e602082612887565b9050611cda565b5090931495945050505050565b600080611d608360486124fb565b60e81c9050600083604b81518110611d7a57611d7a6128b6565b016020015160f81c90506000611dae83600060108262ffffff16901c8261ff001660108462ffffff16901b17179050919050565b62ffffff1690506000611dc2600384612b9c565b60ff169050611dd381610100612ca3565b611ddd9083612b7d565b9695505050505050565b60006111e97bffff00000000000000000000000000000000000000000000000000008361257b565b600060508251611e1f9190612b3c565b15611e2d5750600019919050565b506040805160808101909152605081526000908190815b845181101561200e57611e58858383612587565b8015611e7857611e68828461261c565b611e785750600119949350505050565b6000611e8383611d52565b9050611e8e8361137e565b935080611fd28560008190506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b600882901c7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff161790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b601082901c7dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff161790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b602082901c7bffffffff00000000ffffffff00000000ffffffff00000000ffffffff1617905060408177ffffffffffffffff0000000000000000ffffffffffffffff16901b604082901c77ffffffffffffffff0000000000000000ffffffffffffffff16179050608081901b608082901c179050919050565b1115611fe5575060021995945050505050565b611ff8611ff182611de7565b8690612645565b94506120079050605082612887565b9050611e44565b505050919050565b600080600061202585856126a3565b905060ff8116612057576000858581518110612043576120436128b6565b016020015190935060f81c91506109149050565b83612063826001612caf565b60ff166120709190612887565b855110156120875760001960009250925050610914565b60008160ff16600214156120cc576120c16120ad6120a6876001612887565b88906124fb565b62ffff0060e882901c1660f89190911c1790565b61ffff169050612183565b8160ff16600414156120f6576120e9611bb56120a6876001612887565b63ffffffff169050612183565b8160ff1660081415612183576121766121136120a6876001612887565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090509250929050565b6060816121af575060408051602081019091526000815261085e565b60006121bb8385612887565b905083811180156121cd575080855110155b6122195760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e64730000000000000000000000000060448201526064016101e4565b604051915082604083010160405282825283850182038460208701018481015b8082101561225257815183830152602082019150612239565b505050509392505050565b6060600082600881518110612274576122746128b6565b0160200151835160f89190911c915061228e826009612caf565b60ff16146122ac575050604080516020810190915260008152919050565b826009815181106122bf576122bf6128b6565b016020015160f81c61235d5760028160ff1610156122ed575050604080516020810190915260008152919050565b600083600a81518110612302576123026128b6565b016020015160f81c9050612317600283612b9c565b60ff1681141580612335575080602014158015612335575080601414155b1561235157505060408051602081019091526000815292915050565b6113e884600b83612193565b600061236a8460086124fb565b90507f1976a900000000000000000000000000000000000000000000000000000000007fffffff0000000000000000000000000000000000000000000000000000000000821614156124475783600b815181106123c9576123c96128b6565b60209101015160f81c601414158061241e57506123f4600285516123ed919061289f565b85906124fb565b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191661222b60f21b14155b1561243a57505060408051602081019091526000815292915050565b6113e884600c6014612193565b7f17a91400000000000000000000000000000000000000000000000000000000007fffffff0000000000000000000000000000000000000000000000000000000000821614156124e45783600185516124a0919061289f565b815181106124b0576124b06128b6565b60209101015160f81c6087146124d757505060408051602081019091526000815292915050565b6113e884600b6014612193565b505050604080516020810190915260008152919050565b600061085e8383016020015190565b60006111e982826124fb565b600061085e612526836020612887565b84906124fb565b60008061253b836025612887565b84511015612550575060001990506000610914565b60008061256286611c74876024612887565b9097909650945050505050565b600061085e838361272f565b600061085e8284612b50565b815160006125958284612887565b905082811180156125a7575080855110155b6125f35760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e64730000000000000000000000000060448201526064016101e4565b826020860101602085018382015b80831015611755578251825260209283019290910190612601565b6000806126288461275d565b905082811461263b5760009150506111e9565b5060019392505050565b60006126518284612887565b9050828110156111e95760405162461bcd60e51b815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e0000000000000060448201526064016101e4565b60008282815181106126b7576126b76128b6565b60209101015160f81c60ff14156126d0575060086111e9565b8282815181106126e2576126e26128b6565b60209101015160f81c60fe14156126fb575060046111e9565b82828151811061270d5761270d6128b6565b60209101015160f81c60fd1415612726575060026111e9565b50600092915050565b60008260005281602052602060006040600060025afa50602060006020600060025afa505060005192915050565b60248101516000906111e9565b60006060828403121561277c57600080fd5b50919050565b600080600080600060e0868803121561279a57600080fd5b85359450602086013567ffffffffffffffff808211156127b957600080fd5b908701906080828a0312156127cd57600080fd5b909450604087013590808211156127e357600080fd5b506127f08882890161276a565b935050612800876060880161276a565b915060c08601356001600160a01b038116811461281c57600080fd5b809150509295509295909350565b6000808335601e1984360301811261284157600080fd5b83018035915067ffffffffffffffff82111561285c57600080fd5b60200191503681900382131561091457600080fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561289a5761289a612871565b500190565b6000828210156128b1576128b1612871565b500390565b634e487b7160e01b600052603260045260246000fd5b60006000198214156128e0576128e0612871565b5060010190565b600081518084526020808501945080840160005b838110156129205781516001600160a01b0316875295820195908201906001016128fb565b509495945050505050565b600081518084526020808501945080840160005b838110156129205781518752958201959082019060010161293f565b6001600160a01b038416815260606020820152600061297d60608301856128e7565b8281036040840152611ddd818561292b565b6040815260006129a260408301856128e7565b8281036020840152611c3b818561292b565b6000602082840312156129c657600080fd5b81356001600160e01b03198116811461085e57600080fd5b60006001600160e01b03198089168352868860048501378683016004810160008152868882375093169390920160048101939093525050600801949350505050565b634e487b7160e01b600052602160045260246000fd5b803563ffffffff81168114612a4a57600080fd5b919050565b600060208284031215612a6157600080fd5b61085e82612a36565b803567ffffffffffffffff81168114612a4a57600080fd5b600060208284031215612a9457600080fd5b61085e82612a6a565b634e487b7160e01b600052604160045260246000fd5b600060608284031215612ac557600080fd5b6040516060810181811067ffffffffffffffff82111715612af657634e487b7160e01b600052604160045260246000fd5b60405282358152612b0960208401612a36565b6020820152612b1a60408401612a6a565b60408201529392505050565b634e487b7160e01b600052601260045260246000fd5b600082612b4b57612b4b612b26565b500690565b600082612b5f57612b5f612b26565b500490565b600060208284031215612b7657600080fd5b5051919050565b6000816000190483118215151615612b9757612b97612871565b500290565b600060ff821660ff841680821015612bb657612bb6612871565b90039392505050565b600181815b80851115612bfa578160001904821115612be057612be0612871565b80851615612bed57918102915b93841c9390800290612bc4565b509250929050565b600082612c11575060016111e9565b81612c1e575060006111e9565b8160018114612c345760028114612c3e57612c5a565b60019150506111e9565b60ff841115612c4f57612c4f612871565b50506001821b6111e9565b5060208310610133831016604e8410600b8410161715612c7d575081810a6111e9565b612c878383612bbf565b8060001904821115612c9b57612c9b612871565b029392505050565b600061085e8383612c02565b600060ff821660ff84168060ff03821115612ccc57612ccc612871565b01939250505056fea26469706673582212200ac0b5bb9e76458feb2caec5bd0586dd29c13572c7292b042a23bf6977cdadeb64736f6c63430008090033",
28
28
  "linkReferences": {},
29
29
  "deployedLinkReferences": {}
30
30
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/0fc7119351a6b07a623e4815f7218cba.json"
3
+ "buildInfo": "../../../build-info/1bdcea076fa9317a8fe88b8bb7572e29.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/0fc7119351a6b07a623e4815f7218cba.json"
3
+ "buildInfo": "../../../build-info/1bdcea076fa9317a8fe88b8bb7572e29.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/0fc7119351a6b07a623e4815f7218cba.json"
3
+ "buildInfo": "../../../build-info/1bdcea076fa9317a8fe88b8bb7572e29.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/0fc7119351a6b07a623e4815f7218cba.json"
3
+ "buildInfo": "../../../build-info/1bdcea076fa9317a8fe88b8bb7572e29.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/0fc7119351a6b07a623e4815f7218cba.json"
3
+ "buildInfo": "../../../build-info/1bdcea076fa9317a8fe88b8bb7572e29.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/0fc7119351a6b07a623e4815f7218cba.json"
3
+ "buildInfo": "../../../build-info/1bdcea076fa9317a8fe88b8bb7572e29.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/0fc7119351a6b07a623e4815f7218cba.json"
3
+ "buildInfo": "../../../build-info/1bdcea076fa9317a8fe88b8bb7572e29.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/0fc7119351a6b07a623e4815f7218cba.json"
3
+ "buildInfo": "../../../build-info/1bdcea076fa9317a8fe88b8bb7572e29.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/0fc7119351a6b07a623e4815f7218cba.json"
3
+ "buildInfo": "../../../build-info/1bdcea076fa9317a8fe88b8bb7572e29.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/0fc7119351a6b07a623e4815f7218cba.json"
3
+ "buildInfo": "../../../build-info/1bdcea076fa9317a8fe88b8bb7572e29.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/0fc7119351a6b07a623e4815f7218cba.json"
3
+ "buildInfo": "../../../build-info/1bdcea076fa9317a8fe88b8bb7572e29.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/0fc7119351a6b07a623e4815f7218cba.json"
3
+ "buildInfo": "../../../build-info/1bdcea076fa9317a8fe88b8bb7572e29.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/0fc7119351a6b07a623e4815f7218cba.json"
3
+ "buildInfo": "../../../build-info/1bdcea076fa9317a8fe88b8bb7572e29.json"
4
4
  }
@@ -327,6 +327,15 @@ contract Bridge is Governable, EcdsaWalletOwner {
327
327
  /// @param mainUtxo Data of the wallet's main UTXO, as currently known on
328
328
  /// the Ethereum chain. If no main UTXO exists for the given wallet,
329
329
  /// this parameter is ignored
330
+ /// @param vault Optional address of the vault where all swept deposits
331
+ /// should be routed to. All deposits swept as part of the transaction
332
+ /// must have their `vault` parameters set to the same address.
333
+ /// If this parameter is set to an address of a trusted vault, swept
334
+ /// deposits are routed to that vault.
335
+ /// If this parameter is set to the zero address or to an address
336
+ /// of a non-trusted vault, swept deposits are not routed to a
337
+ /// vault but depositors' balances are increased in the Bank
338
+ /// individually.
330
339
  /// @dev Requirements:
331
340
  /// - `sweepTx` components must match the expected structure. See
332
341
  /// `BitcoinTx.Info` docs for reference. Their values must exactly
@@ -340,6 +349,9 @@ contract Bridge is Governable, EcdsaWalletOwner {
340
349
  /// revealed deposits UTXOs. That transaction must have only
341
350
  /// one P2(W)PKH output locking funds on the 20-byte wallet public
342
351
  /// key hash.
352
+ /// - All revealed deposits that are swept by `sweepTx` must have
353
+ /// their `vault` parameters set to the same address as the address
354
+ /// passed in the `vault` function parameter.
343
355
  /// - `sweepProof` components must match the expected structure. See
344
356
  /// `BitcoinTx.Proof` docs for reference. The `bitcoinHeaders`
345
357
  /// field must contain a valid number of block headers, not less
@@ -350,9 +362,10 @@ contract Bridge is Governable, EcdsaWalletOwner {
350
362
  function submitDepositSweepProof(
351
363
  BitcoinTx.Info calldata sweepTx,
352
364
  BitcoinTx.Proof calldata sweepProof,
353
- BitcoinTx.UTXO calldata mainUtxo
365
+ BitcoinTx.UTXO calldata mainUtxo,
366
+ address vault
354
367
  ) external {
355
- self.submitDepositSweepProof(sweepTx, sweepProof, mainUtxo);
368
+ self.submitDepositSweepProof(sweepTx, sweepProof, mainUtxo, vault);
356
369
  }
357
370
 
358
371
  /// @notice Requests redemption of the given amount from the specified
@@ -39,6 +39,29 @@ library DepositSweep {
39
39
 
40
40
  using BTCUtils for bytes;
41
41
 
42
+ /// @notice Represents temporary information needed during the processing
43
+ /// of the deposit sweep Bitcoin transaction inputs. This structure
44
+ /// is an internal one and should not be exported outside of the
45
+ /// deposit sweep transaction processing code.
46
+ /// @dev Allows to mitigate "stack too deep" errors on EVM.
47
+ struct DepositSweepTxInputsProcessingInfo {
48
+ // Input vector of the deposit sweep Bitcoin transaction. It is
49
+ // assumed the vector's structure is valid so it must be validated
50
+ // using e.g. `BTCUtils.validateVin` function before being used
51
+ // during the processing. The validation is usually done as part
52
+ // of the `BitcoinTx.validateProof` call that checks the SPV proof.
53
+ bytes sweepTxInputVector;
54
+ // Data of the wallet's main UTXO. If no main UTXO exists for the given
55
+ // sweeping wallet, this parameter's fields should be zeroed to bypass
56
+ // the main UTXO validation
57
+ BitcoinTx.UTXO mainUtxo;
58
+ // Address of the vault where all swept deposits should be routed to.
59
+ // It is used to validate whether all swept deposits have been revealed
60
+ // with the same `vault` parameter. It is an optional parameter.
61
+ // Set to zero address if deposits are not routed to a vault.
62
+ address vault;
63
+ }
64
+
42
65
  /// @notice Represents an outcome of the sweep Bitcoin transaction
43
66
  /// inputs processing.
44
67
  struct DepositSweepTxInputsInfo {
@@ -83,6 +106,15 @@ library DepositSweep {
83
106
  /// @param mainUtxo Data of the wallet's main UTXO, as currently known on
84
107
  /// the Ethereum chain. If no main UTXO exists for the given wallet,
85
108
  /// this parameter is ignored
109
+ /// @param vault Optional address of the vault where all swept deposits
110
+ /// should be routed to. All deposits swept as part of the transaction
111
+ /// must have their `vault` parameters set to the same address.
112
+ /// If this parameter is set to an address of a trusted vault, swept
113
+ /// deposits are routed to that vault.
114
+ /// If this parameter is set to the zero address or to an address
115
+ /// of a non-trusted vault, swept deposits are not routed to a
116
+ /// vault but depositors' balances are increased in the Bank
117
+ /// individually.
86
118
  /// @dev Requirements:
87
119
  /// - `sweepTx` components must match the expected structure. See
88
120
  /// `BitcoinTx.Info` docs for reference. Their values must exactly
@@ -96,6 +128,9 @@ library DepositSweep {
96
128
  /// revealed deposits UTXOs. That transaction must have only
97
129
  /// one P2(W)PKH output locking funds on the 20-byte wallet public
98
130
  /// key hash.
131
+ /// - All revealed deposits that are swept by `sweepTx` must have
132
+ /// their `vault` parameters set to the same address as the address
133
+ /// passed in the `vault` function parameter.
99
134
  /// - `sweepProof` components must match the expected structure. See
100
135
  /// `BitcoinTx.Proof` docs for reference. The `bitcoinHeaders`
101
136
  /// field must contain a valid number of block headers, not less
@@ -107,7 +142,8 @@ library DepositSweep {
107
142
  BridgeState.Storage storage self,
108
143
  BitcoinTx.Info calldata sweepTx,
109
144
  BitcoinTx.Proof calldata sweepProof,
110
- BitcoinTx.UTXO calldata mainUtxo
145
+ BitcoinTx.UTXO calldata mainUtxo,
146
+ address vault
111
147
  ) external {
112
148
  // The actual transaction proof is performed here. After that point, we
113
149
  // can assume the transaction happened on Bitcoin chain and has
@@ -132,8 +168,11 @@ library DepositSweep {
132
168
  DepositSweepTxInputsInfo
133
169
  memory inputsInfo = processDepositSweepTxInputs(
134
170
  self,
135
- sweepTx.inputVector,
136
- resolvedMainUtxo
171
+ DepositSweepTxInputsProcessingInfo(
172
+ sweepTx.inputVector,
173
+ resolvedMainUtxo,
174
+ vault
175
+ )
137
176
  );
138
177
 
139
178
  // Helper variable that will hold the sum of treasury fees paid by
@@ -189,15 +228,26 @@ library DepositSweep {
189
228
  // slither-disable-next-line reentrancy-events
190
229
  emit DepositsSwept(walletPubKeyHash, sweepTxHash);
191
230
 
192
- // Update depositors balances in the Bank.
193
- self.bank.increaseBalances(
194
- inputsInfo.depositors,
195
- inputsInfo.depositedAmounts
196
- );
231
+ if (vault != address(0) && self.isVaultTrusted[vault]) {
232
+ // If the `vault` address is not zero and belongs to a trusted
233
+ // vault, route the deposits to that vault.
234
+ self.bank.increaseBalanceAndCall(
235
+ vault,
236
+ inputsInfo.depositors,
237
+ inputsInfo.depositedAmounts
238
+ );
239
+ } else {
240
+ // If the `vault` address is zero or belongs to a non-trusted
241
+ // vault, increase balances in the Bank individually for each
242
+ // depositor.
243
+ self.bank.increaseBalances(
244
+ inputsInfo.depositors,
245
+ inputsInfo.depositedAmounts
246
+ );
247
+ }
248
+
197
249
  // Pass the treasury fee to the treasury address.
198
250
  self.bank.increaseBalance(self.treasury, totalTreasuryFee);
199
-
200
- // TODO: Handle deposits having `vault` set.
201
251
  }
202
252
 
203
253
  /// @notice Resolves sweeping wallet based on the provided wallet public key
@@ -299,32 +349,23 @@ library DepositSweep {
299
349
  /// if one of the inputs cannot be recognized as a pointer to a
300
350
  /// revealed deposit or expected main UTXO.
301
351
  /// This function also marks each processed deposit as swept.
302
- /// @param sweepTxInputVector Bitcoin sweep transaction input vector.
303
- /// This function assumes vector's structure is valid so it must be
304
- /// validated using e.g. `BTCUtils.validateVin` function before
305
- /// it is passed here
306
- /// @param mainUtxo Data of the wallet's main UTXO. If no main UTXO
307
- /// exists for the given the wallet, this parameter's fields should
308
- /// be zeroed to bypass the main UTXO validation
309
- /// @return info Outcomes of the processing.
352
+ /// @return resultInfo Outcomes of the processing.
310
353
  function processDepositSweepTxInputs(
311
354
  BridgeState.Storage storage self,
312
- bytes memory sweepTxInputVector,
313
- BitcoinTx.UTXO memory mainUtxo
314
- ) internal returns (DepositSweepTxInputsInfo memory info) {
355
+ DepositSweepTxInputsProcessingInfo memory processInfo
356
+ ) internal returns (DepositSweepTxInputsInfo memory resultInfo) {
315
357
  // If the passed `mainUtxo` parameter's values are zeroed, the main UTXO
316
358
  // for the given wallet doesn't exist and it is not expected to be
317
359
  // included in the sweep transaction input vector.
318
- bool mainUtxoExpected = mainUtxo.txHash != bytes32(0);
360
+ bool mainUtxoExpected = processInfo.mainUtxo.txHash != bytes32(0);
319
361
  bool mainUtxoFound = false;
320
362
 
321
363
  // Determining the total number of sweep transaction inputs in the same
322
364
  // way as for number of outputs. See `BitcoinTx.inputVector` docs for
323
365
  // more details.
324
- (
325
- uint256 inputsCompactSizeUintLength,
326
- uint256 inputsCount
327
- ) = sweepTxInputVector.parseVarInt();
366
+ (uint256 inputsCompactSizeUintLength, uint256 inputsCount) = processInfo
367
+ .sweepTxInputVector
368
+ .parseVarInt();
328
369
 
329
370
  // To determine the first input starting index, we must jump over
330
371
  // the compactSize uint which prepends the input vector. One byte
@@ -346,11 +387,13 @@ library DepositSweep {
346
387
  // Determine the swept deposits count. If main UTXO is NOT expected,
347
388
  // all inputs should be deposits. If main UTXO is expected, one input
348
389
  // should point to that main UTXO.
349
- info.depositors = new address[](
390
+ resultInfo.depositors = new address[](
350
391
  !mainUtxoExpected ? inputsCount : inputsCount - 1
351
392
  );
352
- info.depositedAmounts = new uint256[](info.depositors.length);
353
- info.treasuryFees = new uint256[](info.depositors.length);
393
+ resultInfo.depositedAmounts = new uint256[](
394
+ resultInfo.depositors.length
395
+ );
396
+ resultInfo.treasuryFees = new uint256[](resultInfo.depositors.length);
354
397
 
355
398
  // Initialize helper variables.
356
399
  uint256 processedDepositsCount = 0;
@@ -362,7 +405,7 @@ library DepositSweep {
362
405
  uint32 outpointIndex,
363
406
  uint256 inputLength
364
407
  ) = parseDepositSweepTxInputAt(
365
- sweepTxInputVector,
408
+ processInfo.sweepTxInputVector,
366
409
  inputStartingIndex
367
410
  );
368
411
 
@@ -377,7 +420,12 @@ library DepositSweep {
377
420
  // a revealed deposit.
378
421
  require(deposit.sweptAt == 0, "Deposit already swept");
379
422
 
380
- if (processedDepositsCount == info.depositors.length) {
423
+ require(
424
+ deposit.vault == processInfo.vault,
425
+ "Deposit should be routed to another vault"
426
+ );
427
+
428
+ if (processedDepositsCount == resultInfo.depositors.length) {
381
429
  // If this condition is true, that means a deposit input
382
430
  // took place of an expected main UTXO input.
383
431
  // In other words, there is no expected main UTXO
@@ -390,22 +438,27 @@ library DepositSweep {
390
438
  /* solhint-disable-next-line not-rely-on-time */
391
439
  deposit.sweptAt = uint32(block.timestamp);
392
440
 
393
- info.depositors[processedDepositsCount] = deposit.depositor;
394
- info.depositedAmounts[processedDepositsCount] = deposit.amount;
395
- info.inputsTotalValue += info.depositedAmounts[
441
+ resultInfo.depositors[processedDepositsCount] = deposit
442
+ .depositor;
443
+ resultInfo.depositedAmounts[processedDepositsCount] = deposit
444
+ .amount;
445
+ resultInfo.inputsTotalValue += resultInfo.depositedAmounts[
396
446
  processedDepositsCount
397
447
  ];
398
- info.treasuryFees[processedDepositsCount] = deposit.treasuryFee;
448
+ resultInfo.treasuryFees[processedDepositsCount] = deposit
449
+ .treasuryFee;
399
450
 
400
451
  processedDepositsCount++;
401
452
  } else if (
402
453
  mainUtxoExpected != mainUtxoFound &&
403
- mainUtxo.txHash == outpointTxHash &&
404
- mainUtxo.txOutputIndex == outpointIndex
454
+ processInfo.mainUtxo.txHash == outpointTxHash &&
455
+ processInfo.mainUtxo.txOutputIndex == outpointIndex
405
456
  ) {
406
457
  // If we entered here, that means the input was identified as
407
458
  // the expected main UTXO.
408
- info.inputsTotalValue += mainUtxo.txOutputValue;
459
+ resultInfo.inputsTotalValue += processInfo
460
+ .mainUtxo
461
+ .txOutputValue;
409
462
  mainUtxoFound = true;
410
463
 
411
464
  // Main UTXO used as an input, mark it as spent.
@@ -426,7 +479,7 @@ library DepositSweep {
426
479
  }
427
480
 
428
481
  // Construction of the input processing loop guarantees that:
429
- // `processedDepositsCount == info.depositors.length == info.depositedAmounts.length`
482
+ // `processedDepositsCount == resultInfo.depositors.length == resultInfo.depositedAmounts.length`
430
483
  // is always true at this point. We just use the first variable
431
484
  // to assert the total count of swept deposit is bigger than zero.
432
485
  require(
@@ -441,7 +494,7 @@ library DepositSweep {
441
494
  "Expected main UTXO not present in sweep transaction inputs"
442
495
  );
443
496
 
444
- return info;
497
+ return resultInfo;
445
498
  }
446
499
 
447
500
  /// @notice Parses a Bitcoin transaction input starting at the given index.
package/export.json CHANGED
@@ -16037,6 +16037,11 @@
16037
16037
  "internalType": "struct BitcoinTx.UTXO",
16038
16038
  "name": "mainUtxo",
16039
16039
  "type": "tuple"
16040
+ },
16041
+ {
16042
+ "internalType": "address",
16043
+ "name": "vault",
16044
+ "type": "address"
16040
16045
  }
16041
16046
  ],
16042
16047
  "name": "submitDepositSweepProof",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keep-network/tbtc-v2",
3
- "version": "0.1.1-dev.63+main.68e692f8fe53043af3c81bd88afd16954759ad5d",
3
+ "version": "0.1.1-dev.64+main.d47a7754c858959c03630155ce64c823f5cfc6cf",
4
4
  "license": "MIT",
5
5
  "files": [
6
6
  "artifacts/",