@dolomite-exchange/dolomite-margin 0.2.6 → 0.2.7

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 (200) hide show
  1. package/build/contracts/Account.json +11 -11
  2. package/build/contracts/Actions.json +11 -11
  3. package/build/contracts/Address.json +1 -1
  4. package/build/contracts/Admin.json +23 -23
  5. package/build/contracts/AdminImpl.json +35 -307
  6. package/build/contracts/AdvancedMath.json +7 -7
  7. package/build/contracts/AmmRebalancerProxy.json +577 -621
  8. package/build/contracts/AmmRebalancerProxyV1.json +78 -32
  9. package/build/contracts/Babylonian.json +1 -1
  10. package/build/contracts/Bits.json +9 -9
  11. package/build/contracts/Cache.json +13 -13
  12. package/build/contracts/ChainlinkPriceOracleV1.json +16 -16
  13. package/build/contracts/Context.json +1 -1
  14. package/build/contracts/CustomTestToken.json +9 -9
  15. package/build/contracts/Decimal.json +9 -9
  16. package/build/contracts/DelayedMultiSig.json +9 -9
  17. package/build/contracts/DolomiteAmmERC20.json +11 -11
  18. package/build/contracts/DolomiteAmmFactory.json +14 -52
  19. package/build/contracts/DolomiteAmmLibrary.json +24 -24
  20. package/build/contracts/DolomiteAmmPair.json +27 -27
  21. package/build/contracts/DolomiteAmmRouterProxy.json +30 -363
  22. package/build/contracts/DolomiteMargin.json +21 -67
  23. package/build/contracts/DoubleExponentInterestSetter.json +15 -21
  24. package/build/contracts/EnumerableSet.json +7 -7
  25. package/build/contracts/ErroringOmiseToken.json +9 -9
  26. package/build/contracts/ErroringToken.json +10 -10
  27. package/build/contracts/Events.json +17 -17
  28. package/build/contracts/ExcessivelySafeCall.json +35 -35
  29. package/build/contracts/Exchange.json +15 -15
  30. package/build/contracts/Expiry.json +36 -36
  31. package/build/contracts/Getters.json +33 -33
  32. package/build/contracts/IAutoTrader.json +9 -9
  33. package/build/contracts/ICallee.json +7 -7
  34. package/build/contracts/IChainlinkAggregator.json +5 -5
  35. package/build/contracts/IDolomiteAmmERC20.json +5 -5
  36. package/build/contracts/IDolomiteAmmFactory.json +9 -9
  37. package/build/contracts/IDolomiteAmmPair.json +9 -9
  38. package/build/contracts/IDolomiteMargin.json +23 -23
  39. package/build/contracts/IERC20.json +1 -1
  40. package/build/contracts/IERC20Detailed.json +5 -5
  41. package/build/contracts/IExchangeWrapper.json +5 -5
  42. package/build/contracts/IExpiry.json +9 -9
  43. package/build/contracts/IInterestSetter.json +7 -7
  44. package/build/contracts/ILiquidationCallback.json +7 -7
  45. package/build/contracts/IMakerOracle.json +5 -5
  46. package/build/contracts/IOasisDex.json +5 -5
  47. package/build/contracts/IPriceOracle.json +7 -7
  48. package/build/contracts/IRecyclable.json +9 -9
  49. package/build/contracts/ITransferProxy.json +5 -5
  50. package/build/contracts/IUniswapV2Callee.json +5 -5
  51. package/build/contracts/IUniswapV2Factory.json +5 -5
  52. package/build/contracts/IUniswapV2Pair.json +5 -5
  53. package/build/contracts/IUniswapV2Router.json +5 -5
  54. package/build/contracts/IWETH.json +5 -5
  55. package/build/contracts/Interest.json +15 -15
  56. package/build/contracts/LiquidateOrVaporizeImpl.json +32 -83
  57. package/build/contracts/LiquidatorProxyHelper.json +23 -23
  58. package/build/contracts/LiquidatorProxyV1.json +30 -36
  59. package/build/contracts/LiquidatorProxyV1WithAmm.json +49 -105
  60. package/build/contracts/Math.json +1 -1
  61. package/build/contracts/Migrations.json +8 -14
  62. package/build/contracts/Monetary.json +7 -7
  63. package/build/contracts/MultiCall.json +8 -14
  64. package/build/contracts/MultiSig.json +7 -7
  65. package/build/contracts/OmiseToken.json +8 -8
  66. package/build/contracts/OnlyDolomiteMargin.json +11 -11
  67. package/build/contracts/Operation.json +15 -15
  68. package/build/contracts/OperationImpl.json +39 -47
  69. package/build/contracts/Ownable.json +1 -1
  70. package/build/contracts/PartiallyDelayedMultiSig.json +9 -9
  71. package/build/contracts/PayableProxy.json +17 -23
  72. package/build/contracts/Permission.json +11 -11
  73. package/build/contracts/PolynomialInterestSetter.json +13 -13
  74. package/build/contracts/RecyclableTokenProxy.json +25 -25
  75. package/build/contracts/ReentrancyGuard.json +1 -1
  76. package/build/contracts/Require.json +7 -7
  77. package/build/contracts/SafeERC20.json +1 -1
  78. package/build/contracts/SafeETH.json +7 -7
  79. package/build/contracts/SafeLiquidationCallback.json +17 -17
  80. package/build/contracts/SafeMath.json +1 -1
  81. package/build/contracts/SignedOperationProxy.json +21 -104
  82. package/build/contracts/SimpleFeeOwner.json +18 -63
  83. package/build/contracts/State.json +9 -9
  84. package/build/contracts/Storage.json +37 -37
  85. package/build/contracts/TestAmmRebalancerProxy.json +32 -58
  86. package/build/contracts/TestAutoTrader.json +22 -22
  87. package/build/contracts/TestBtcUsdChainlinkAggregator.json +10 -10
  88. package/build/contracts/TestCallee.json +19 -19
  89. package/build/contracts/TestChainlinkPriceOracleV1.json +10 -94
  90. package/build/contracts/TestCounter.json +7 -7
  91. package/build/contracts/TestDaiUsdChainlinkAggregator.json +11 -11
  92. package/build/contracts/TestDolomiteMargin.json +22 -22
  93. package/build/contracts/TestDoubleExponentInterestSetter.json +10 -10
  94. package/build/contracts/TestEthUsdChainlinkAggregator.json +11 -11
  95. package/build/contracts/TestExchangeWrapper.json +28 -28
  96. package/build/contracts/TestInterestSetter.json +13 -13
  97. package/build/contracts/TestLib.json +22 -22
  98. package/build/contracts/TestLinkUsdChainlinkAggregator.json +11 -11
  99. package/build/contracts/TestLiquidateCallback.json +719 -719
  100. package/build/contracts/TestLiquidationCallback.json +13 -13
  101. package/build/contracts/TestLrcEthChainlinkAggregator.json +11 -11
  102. package/build/contracts/TestMakerOracle.json +10 -10
  103. package/build/contracts/TestMaticUsdChainlinkAggregator.json +10 -10
  104. package/build/contracts/TestOasisDex.json +12 -12
  105. package/build/contracts/TestOperationImpl.json +14 -14
  106. package/build/contracts/TestPolynomialInterestSetter.json +10 -10
  107. package/build/contracts/TestPriceAggregator.json +9 -9
  108. package/build/contracts/TestPriceOracle.json +13 -13
  109. package/build/contracts/TestRecyclableToken.json +9 -9
  110. package/build/contracts/TestSimpleCallee.json +15 -15
  111. package/build/contracts/TestToken.json +9 -9
  112. package/build/contracts/TestTrader.json +17 -17
  113. package/build/contracts/TestUniswapAmmRebalancerProxy.json +16 -16
  114. package/build/contracts/TestUsdcUsdChainlinkAggregator.json +11 -11
  115. package/build/contracts/TestWETH.json +9 -9
  116. package/build/contracts/Time.json +9 -9
  117. package/build/contracts/Token.json +9 -9
  118. package/build/contracts/TokenA.json +10 -10
  119. package/build/contracts/TokenB.json +10 -10
  120. package/build/contracts/TokenC.json +10 -10
  121. package/build/contracts/TokenD.json +10 -10
  122. package/build/contracts/TokenE.json +10 -10
  123. package/build/contracts/TokenF.json +10 -10
  124. package/build/contracts/TransferProxy.json +22 -28
  125. package/build/contracts/TypedSignature.json +9 -9
  126. package/build/contracts/Types.json +9 -9
  127. package/build/contracts/UQ112x112.json +7 -7
  128. package/build/contracts/UniswapV2ERC20.json +7 -7
  129. package/build/contracts/UniswapV2Factory.json +12 -12
  130. package/build/contracts/UniswapV2Library.json +20 -20
  131. package/build/contracts/UniswapV2Pair.json +17 -17
  132. package/build/contracts/UniswapV2Router02.json +16 -16
  133. package/build/contracts/WETH9.json +1 -1
  134. package/contracts/external/amm/DolomiteAmmERC20.sol +135 -0
  135. package/contracts/external/amm/DolomiteAmmFactory.sol +122 -0
  136. package/contracts/external/amm/DolomiteAmmPair.sol +573 -0
  137. package/contracts/external/amm/SimpleFeeOwner.sol +107 -0
  138. package/contracts/external/helpers/LiquidatorProxyHelper.sol +252 -0
  139. package/contracts/external/helpers/OnlyDolomiteMargin.sol +63 -0
  140. package/contracts/external/interestsetters/DoubleExponentInterestSetter.sol +212 -0
  141. package/contracts/external/interestsetters/PolynomialInterestSetter.sol +205 -0
  142. package/contracts/external/interfaces/IChainlinkAggregator.sol +33 -0
  143. package/contracts/external/interfaces/IDolomiteAmmERC20.sol +52 -0
  144. package/contracts/external/interfaces/IDolomiteAmmFactory.sol +42 -0
  145. package/contracts/external/interfaces/IDolomiteAmmPair.sol +116 -0
  146. package/contracts/external/interfaces/IExpiry.sol +70 -0
  147. package/contracts/external/interfaces/IMakerOracle.sol +52 -0
  148. package/contracts/external/interfaces/IOasisDex.sol +326 -0
  149. package/contracts/external/interfaces/ITransferProxy.sol +53 -0
  150. package/contracts/external/interfaces/IUniswapV2Router.sol +134 -0
  151. package/contracts/external/lib/AdvancedMath.sol +23 -0
  152. package/contracts/external/lib/DolomiteAmmLibrary.sol +323 -0
  153. package/contracts/external/lib/TypedSignature.sol +120 -0
  154. package/contracts/external/lib/UQ112x112.sol +22 -0
  155. package/contracts/external/multisig/DelayedMultiSig.sol +206 -0
  156. package/contracts/external/multisig/MultiSig.sol +571 -0
  157. package/contracts/external/multisig/PartiallyDelayedMultiSig.sol +174 -0
  158. package/contracts/external/oracles/ChainlinkPriceOracleV1.sol +197 -0
  159. package/contracts/external/oracles/TestChainlinkPriceOracleV1.sol +98 -0
  160. package/contracts/external/proxies/AmmRebalancerProxyV1.sol +465 -0
  161. package/contracts/external/proxies/DolomiteAmmRouterProxy.sol +877 -0
  162. package/contracts/external/proxies/LiquidatorProxyV1.sol +507 -0
  163. package/contracts/external/proxies/LiquidatorProxyV1WithAmm.sol +574 -0
  164. package/contracts/external/proxies/PayableProxy.sol +146 -0
  165. package/contracts/external/proxies/RecyclableTokenProxy.sol +463 -0
  166. package/contracts/external/proxies/SignedOperationProxy.sol +553 -0
  167. package/contracts/external/proxies/TransferProxy.sol +207 -0
  168. package/contracts/external/traders/Expiry.sol +532 -0
  169. package/contracts/external/uniswap-v2/UniswapV2ERC20.sol +118 -0
  170. package/contracts/external/uniswap-v2/UniswapV2Factory.sol +67 -0
  171. package/contracts/external/uniswap-v2/UniswapV2Pair.sol +283 -0
  172. package/contracts/external/uniswap-v2/UniswapV2Router02.sol +566 -0
  173. package/contracts/external/uniswap-v2/interfaces/IUniswapV2Callee.sol +13 -0
  174. package/contracts/external/uniswap-v2/interfaces/IUniswapV2Factory.sol +18 -0
  175. package/contracts/external/uniswap-v2/interfaces/IUniswapV2Pair.sol +67 -0
  176. package/contracts/external/uniswap-v2/interfaces/IWETH.sol +7 -0
  177. package/contracts/external/uniswap-v2/libraries/SafeETH.sol +29 -0
  178. package/contracts/external/uniswap-v2/libraries/UniswapV2Library.sol +117 -0
  179. package/contracts/external/utils/MultiCall.sol +95 -0
  180. package/contracts/protocol/impl/artifacts/OperationImpl.json +80 -0
  181. package/contracts/protocol/impl/artifacts/OperationImpl_metadata.json +193 -0
  182. package/dist/build/published_contracts/AdminImpl.json +2 -2
  183. package/dist/build/published_contracts/AmmRebalancerProxyV1.json +5 -0
  184. package/dist/build/published_contracts/ChainlinkPriceOracleV1.json +1 -1
  185. package/dist/build/published_contracts/DolomiteAmmFactory.json +1 -1
  186. package/dist/build/published_contracts/DolomiteAmmRouterProxy.json +1 -1
  187. package/dist/build/published_contracts/DoubleExponentInterestSetter.json +2 -2
  188. package/dist/build/published_contracts/Expiry.json +1 -1
  189. package/dist/build/published_contracts/LiquidatorProxyV1.json +1 -1
  190. package/dist/build/published_contracts/LiquidatorProxyV1WithAmm.json +1 -1
  191. package/dist/build/published_contracts/MultiCall.json +1 -1
  192. package/dist/build/published_contracts/PayableProxy.json +2 -2
  193. package/dist/build/published_contracts/SignedOperationProxy.json +2 -2
  194. package/dist/build/published_contracts/SimpleFeeOwner.json +1 -1
  195. package/dist/build/published_contracts/TestUniswapAmmRebalancerProxy.json +140 -0
  196. package/dist/build/published_contracts/TransferProxy.json +1 -1
  197. package/dist/src/lib/Contracts.d.ts +3 -1
  198. package/dist/src/lib/Contracts.js +7 -3
  199. package/dist/src/lib/Contracts.js.map +1 -1
  200. package/package.json +2 -1
@@ -534,15 +534,15 @@
534
534
  "type": "function"
535
535
  }
536
536
  ],
537
- "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dolomiteMargin\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"operational\",\"type\":\"bool\"}],\"name\":\"ContractStatusSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"operationHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"canceler\",\"type\":\"address\"}],\"name\":\"LogOperationCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"operationHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"LogOperationExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"DOLOMITE_MARGIN\",\"outputs\":[{\"internalType\":\"contract IDolomiteMargin\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"EIP712_DOMAIN_HASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info[]\",\"name\":\"accounts\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"enum Actions.ActionType\",\"name\":\"actionType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"accountId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.AssetAmount\",\"name\":\"amount\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"primaryMarketId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryMarketId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"otherAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"otherAccountId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Actions.ActionArgs[]\",\"name\":\"actions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"numActions\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"internalType\":\"struct SignedOperationProxy.OperationHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct SignedOperationProxy.Authorization\",\"name\":\"auth\",\"type\":\"tuple\"}],\"name\":\"cancel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"g_invalidated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"g_isOperational\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"operationHashes\",\"type\":\"bytes32[]\"}],\"name\":\"getOperationsAreInvalid\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"\",\"type\":\"bool[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info[]\",\"name\":\"accounts\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"enum Actions.ActionType\",\"name\":\"actionType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"accountId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.AssetAmount\",\"name\":\"amount\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"primaryMarketId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryMarketId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"otherAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"otherAccountId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Actions.ActionArgs[]\",\"name\":\"actions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"numActions\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"internalType\":\"struct SignedOperationProxy.OperationHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct SignedOperationProxy.Authorization[]\",\"name\":\"auths\",\"type\":\"tuple[]\"}],\"name\":\"operate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"shutDown\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"startUp\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"dYdX * Contract for sending operations on behalf of others\",\"methods\":{\"cancel((address,uint256)[],(uint8,uint256,(bool,uint8,uint8,uint256),uint256,uint256,address,uint256,bytes)[],(uint256,(uint256,uint256,address,address),bytes))\":{\"params\":{\"accounts\":\"The accounts involved in the operation\",\"actions\":\"The actions involved in the operation\",\"auth\":\"The unsigned authorization of the operation\"}},\"isOwner()\":{\"details\":\"Returns true if the caller is the current owner.\"},\"operate((address,uint256)[],(uint8,uint256,(bool,uint8,uint8,uint256),uint256,uint256,address,uint256,bytes)[],(uint256,(uint256,uint256,address,address),bytes)[])\":{\"params\":{\"accounts\":\"The accounts to forward to DolomiteMargin.operate()\",\"actions\":\"The actions to forward to DolomiteMargin.operate()\",\"auths\":\"The signed authorizations for each group of actions (or unsigned if msg.sender is already authorized)\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. * NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"SignedOperationProxy\"},\"userdoc\":{\"methods\":{\"cancel((address,uint256)[],(uint8,uint256,(bool,uint8,uint8,uint256),uint256,uint256,address,uint256,bytes)[],(uint256,(uint256,uint256,address,address),bytes))\":{\"notice\":\"Allows a signer to permanently cancel an operation on-chain.\"},\"getOperationsAreInvalid(bytes32[])\":{\"notice\":\"Returns a bool for each operation. True if the operation is invalid (from being canceled or previously executed).\"},\"operate((address,uint256)[],(uint8,uint256,(bool,uint8,uint8,uint256),uint256,uint256,address,uint256,bytes)[],(uint256,(uint256,uint256,address,address),bytes)[])\":{\"notice\":\"Submits an operation to DolomiteMargin. Actions for accounts that the msg.sender does not control must be authorized by a signed message. Each authorization can apply to multiple actions at once which must occur in-order next to each other. An empty authorization must be supplied explicitly for each group of actions that do not require a signed message.\"},\"shutDown()\":{\"notice\":\"The owner can shut down the exchange.\"},\"startUp()\":{\"notice\":\"The owner can start back up the exchange.\"}}}},\"settings\":{\"compilationTarget\":{\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/proxies/SignedOperationProxy.sol\":\"SignedOperationProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/helpers/OnlyDolomiteMargin.sol\":{\"keccak256\":\"0xfc9ce2f5a274ec66668c133f09fe213bc1a6a739f9147f4357a3493094de8deb\",\"urls\":[\"bzz-raw://e45442587f111fa0d85dd85a4e07993f5fecd1afce4f457ed21441f8b0abb937\",\"dweb:/ipfs/QmaNq3j3PUwb8Wrx2gEmFFsVa2GByDEkDCPGdwo2qvMeKh\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/lib/TypedSignature.sol\":{\"keccak256\":\"0x4b4eb5fd2869d6c410948f78163773442c11bc82e393307e41359bbdb21577bf\",\"urls\":[\"bzz-raw://9c9c3abae44173086bc08f5479fbc67151d5905f60e1032ec6f9e40f841f3365\",\"dweb:/ipfs/QmbsQRX3gmcpimjFEW5ULJVavHQtViyg7NSQ2Q8Qcu6F6V\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/proxies/SignedOperationProxy.sol\":{\"keccak256\":\"0x4f66ed752fe78ff6470c860a9562e50f710fa8de58152673e2618a65ae37a799\",\"urls\":[\"bzz-raw://7430fd21158620acb6764dda24b2b2292b63a05d571e17e8403a150c1819c939\",\"dweb:/ipfs/QmScC8bmMynetrpmQJiPbMYfxPUm2CctQ4sa3jDY1igQZV\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IDolomiteMargin.sol\":{\"keccak256\":\"0x1e73364879c267fdd2bfd871e62ee58ee3d65fbef3b71e3cc104fbff499eca6c\",\"urls\":[\"bzz-raw://e3b1327980a5949afd52cff4713f47ee4fdee9a8b376ceaa3402f5c9696b8c1b\",\"dweb:/ipfs/QmbhQzVEdaraPJizT5DTtk6CDzH3guHNipHW5T23uTtFkX\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IERC20Detailed.sol\":{\"keccak256\":\"0x22a62e2a8155e70300773721902f4b9118e17aa0bb5d9d1b046050a014cfb223\",\"urls\":[\"bzz-raw://03af737a33c552fbe58f6f1fbd5496854fdc28dd57be4365d56663725c083a18\",\"dweb:/ipfs/QmbgLqGAQEd6tXsZB8QaPNCAMiU6nNzP75wNbKdS65BuUF\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IInterestSetter.sol\":{\"keccak256\":\"0x546825f65490a30e29d0f6446acec49c1e895ce6b33d48ca5c05092725a63a57\",\"urls\":[\"bzz-raw://6ad3013aed985bdf6e6234ae0f7f37e6bba76c3470c33bfa24678cf19b3b412c\",\"dweb:/ipfs/QmfYaSBzxGpgiHoR7ontMJY66S5L26XwkLYoEuzsEjpbQH\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3f7c3d1397390ea44c6d5e5730d49476431c3df3b28334fe38218de5edc31138\",\"urls\":[\"bzz-raw://63ebf926fca9ce33aaabaf93805686acc25daded1648d6dab59c8c4d05116918\",\"dweb:/ipfs/QmeGkDp7ycYstpfqCYBiqoCYwy876gabx8r42o5koj3H5A\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Account.sol\":{\"keccak256\":\"0x0ab9a3fabc89984dff748af63d4319ee134051de2d7fc560e34ebaac86198396\",\"urls\":[\"bzz-raw://ab67f499a8ef83dc7e7cf7176a0f66eced40fa228eda8dd2d47e066ab985cf42\",\"dweb:/ipfs/QmXRHbsEYxr2Qsfsj5psXGV5LaPZHuzLiEXzSQJ77WSE27\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Actions.sol\":{\"keccak256\":\"0x44ec62b766a88a2f65267991e76cab88711e733b826dc9e578cb6ad6b38b2445\",\"urls\":[\"bzz-raw://731a8d44e57c9dcd7fbdefc37a6b5889c0d06defb3bd66b921b2a7db0edf0103\",\"dweb:/ipfs/QmcVbXc9oi5DMxjPtsBF76oJzD6zVjm7RuXgJfP3Goqrrb\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Bits.sol\":{\"keccak256\":\"0x425bf5764368faca16cc30a64b79d9bbe01fd8150444b58a464971c32450bd85\",\"urls\":[\"bzz-raw://064baf3155da634c5c80cea70bba0dda7a33af934b34f75f596961b4ab9aeafe\",\"dweb:/ipfs/QmTUHXoi9L6CkERyfhFs1jhxU66u2sbc6XRR5cH4TeHEqL\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Cache.sol\":{\"keccak256\":\"0x1e6ff383f285e311d07374edda353e14ac4f29201726b0062a2f046c1a2b482c\",\"urls\":[\"bzz-raw://fd11c5db01039bf2c95f3561b08d271b80b7b1cb9fd7f75da887f7609807c5a7\",\"dweb:/ipfs/QmcY6CugdEHaYUa8ZKSnUDhvtVuoLfpDscZcmC91koAn1t\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Decimal.sol\":{\"keccak256\":\"0x66990bbe3c58d0edf57d3f67ab5280e2a53958ce44f75c335c4c50542321bccb\",\"urls\":[\"bzz-raw://724cfdb5c99121aab5262679e46766a2883e344749870d7dbfa92d1617f68bf2\",\"dweb:/ipfs/QmYjAsS45f6UG2u3zuTks2HVfMYtyFCVMgUvD7Gt7XtU3R\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/EnumerableSet.sol\":{\"keccak256\":\"0x9710b0ab43cc2d964d8722a0aabbedbf7e9d4756dcc0b4ab7c46c1ee68653042\",\"urls\":[\"bzz-raw://2405593d37f0f224bfca556f01634a9755bb0ed626f74dd15293106a8b4dd7d3\",\"dweb:/ipfs/QmTZ16S336jsoDnK5p3vAZRzimBkmdEJibncHVBJxBt469\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Interest.sol\":{\"keccak256\":\"0x73e75454568c5dfc3bdcf7dbf2ddce6ab8d3d317618bc1f1957f7667e15d3799\",\"urls\":[\"bzz-raw://7b1c8a9a79c8ffdbb0fa633f713ae3dfeac93b31d2b1639614ac32d473fb8250\",\"dweb:/ipfs/QmfARP93W2mgeVwD9Lkd3yVmbCLF2Mos7o8HJ1x6WYQmxZ\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Math.sol\":{\"keccak256\":\"0x0c0c913b6ccdb69063f9ec84879fcad20a1ee6f44402c9f5ec2b4f5b9f2fa16b\",\"urls\":[\"bzz-raw://89b32eefb57e5e63ad8c6e079ae7bf2d2c8622776cd45af0cf304e1cafd6e078\",\"dweb:/ipfs/Qmcj7yRnYuTgKC3ZqZqe8rynHGYVDS3UrFExcVGcqeaDHY\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Monetary.sol\":{\"keccak256\":\"0x5257274f2d4d3605f3e97ec45fb902111fe9a22506f0b4cf308ea933bc81bfe2\",\"urls\":[\"bzz-raw://85b8023b78805063a2ec8d376f1f5983994eabd96efd8ceadb0224dbb71c5678\",\"dweb:/ipfs/QmaDhzCzRqsuHuJfhToEC4pATQHwhh7yWWsjwfuRzFT1kG\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Require.sol\":{\"keccak256\":\"0xe641662503ea29ca959e84674188c3e9deaaf64c5623fb9560a4301c521ca1d3\",\"urls\":[\"bzz-raw://b10a04c7d014b99eb792c8c774e203c846d070b30cf0b715325fc07838ed6a6d\",\"dweb:/ipfs/QmUqZWnbchfEY9jM647yQamHe4GzspfUeRQF9k2nn1Hixd\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Storage.sol\":{\"keccak256\":\"0xf930fbde3ab43ec8f079dbad062453b502542f53b7eec670c8e86c7a2e47dd9a\",\"urls\":[\"bzz-raw://e1c402fc55471e8372be478e99f91c28373f096e31f0ef1d5072dfdb81541c29\",\"dweb:/ipfs/QmTc8WSfFCbxNQqNpq1vptUVFxteKQ8HWEhyXREyPZ2neu\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Time.sol\":{\"keccak256\":\"0x233d6ebf965711bf980f4bb2e672fb1a11b4b879fd41c884b3c2b704417d0d0c\",\"urls\":[\"bzz-raw://6478ff81706d531f9438b96274a7b904abbbd9c631540c68c6a89c3accf27abf\",\"dweb:/ipfs/QmWe9vkz3qwVjrcbmcTL8wgkjLPsrEqxcqPJL9ujM8PPbp\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Token.sol\":{\"keccak256\":\"0xd7bcae9e3c570544fc946a00cc7695106a64c20bc130d0183612c0410a531d19\",\"urls\":[\"bzz-raw://0ff5ffd6abb9ed223a64128c131afd962bec07fb9867cb62593906b339c76920\",\"dweb:/ipfs/QmbTrJL4bekvBqqaw6wXnBhYzS9uAqULSWF2VzW4cdfsM5\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Types.sol\":{\"keccak256\":\"0xab134538648a2e223a7fe61db03c14f687657a5d37147f93c9088f11735aa311\",\"urls\":[\"bzz-raw://79dc7d2b30576d2349b99267642ac8d5fb7939c920b8d8045379d3614238bdc3\",\"dweb:/ipfs/QmaQJYg1nirHoWSC6G38Cjsk9pZBzEaNrGXKqTsvAzbyES\"]},\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0x90a3995645af7562d84b9d69363ffa5ae7217714ab61e951bf7bc450f40e4061\",\"urls\":[\"bzz-raw://216ef9d6b614db4eb46970b4e84903f2534a45572dd30a79f0041f1a5830f436\",\"dweb:/ipfs/QmNPrJ4MWKUAWzKXpUqeyKRUfosaoANZAqXgvepdrCwZAG\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/ownership/Ownable.sol\":{\"keccak256\":\"0x6fb9d7889769d7cc161225f9ef7a90e468ba9788b253816f8d8b6894d3472c24\",\"urls\":[\"bzz-raw://cf4c00fc3c37cc5acf0c82ec6fd97bab67d72c2567fdc0ebf023d9c09b30a08e\",\"dweb:/ipfs/Qmb7TChG6DsEDX7LooJ4vmxot19f7VXX8S1zUGPeJTWbwZ\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzz-raw://59fd025151435da35faa8093a5c7a17de02de9d08ad27275c5cdf05050820d91\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]}},\"version\":1}",
538
- "bytecode": "0x60806040523480156200001157600080fd5b506040516200399e3803806200399e8339810160408190526200003491620001e2565b600080546001600160a01b0319166001600160a01b03841617815562000059620001be565b600180546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506003805460ff19166001179055604051620000c59060200162000391565b60408051601f1981840301815290829052620000e4916020016200037c565b60408051601f1981840301815282825280516020918201208383018352601484527f5369676e65644f7065726174696f6e50726f787900000000000000000000000093820193909352815180830183526003815262312e3160e81b9082015290516200019a92917fcefe97a0ba2f870a5405632ee9957acc8f7015bb8dbd346fb5ce3f06f3571dc3917f722c0e0c80487266e8c6a45e3a1a803aab23378a9c32e6ebe029d4fad7bfc965918691309101620003df565b604051602081830303815290604052805190602001206002819055505050620004b2565b3390565b8051620001cf816200048d565b92915050565b8051620001cf81620004a7565b60008060408385031215620001f657600080fd5b6000620002048585620001c2565b92505060206200021785828601620001d5565b9150509250929050565b6200022c816200043e565b82525050565b6200022c816200044b565b60006200024a8262000435565b62000256818562000439565b9350620002688185602086016200045a565b9290920192915050565b600062000281600c8362000439565b6b1cdd1c9a5b99c81b985b594b60a21b8152600c0192915050565b6000620002ab60198362000439565b7f6164647265737320766572696679696e67436f6e747261637400000000000000815260190192915050565b6000620002e660108362000439565b6f1d5a5b9d0c8d4d8818da185a5b92590b60821b815260100192915050565b60006200031460018362000439565b602960f81b815260010192915050565b600062000333600f8362000439565b6e1cdd1c9a5b99c81d995c9cda5bdb8b608a1b8152600f0192915050565b600062000360600d8362000439565b6c08a92a06e626488dedac2d2dc5609b1b8152600d0192915050565b60006200038a82846200023d565b9392505050565b60006200039e8262000351565b9150620003ab8262000272565b9150620003b88262000324565b9150620003c582620002d7565b9150620003d2826200029c565b9150620001cf8262000305565b60a08101620003ef828862000232565b620003fe602083018762000232565b6200040d604083018662000232565b6200041c606083018562000232565b6200042b608083018462000221565b9695505050505050565b5190565b919050565b6000620001cf826200044e565b90565b6001600160a01b031690565b60005b83811015620004775781810151838201526020016200045d565b8381111562000487576000848401525b50505050565b62000498816200043e565b8114620004a457600080fd5b50565b62000498816200044b565b6134dc80620004c26000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638da5cb5b1161008c578063baf7413f11610066578063baf7413f1461018c578063e306f7791461019f578063f2fde38b146101b4578063f72ac9cb146101c7576100df565b80638da5cb5b1461015c5780638f32d59b146101715780639ef90ea214610179576100df565b80633b84a304116100bd5780633b84a304146101145780635b9ddfdc14610134578063715018a614610154576100df565b806310b9e583146100e457806315c14a4a146100ee57806330e4a7841461010c575b600080fd5b6100ec6101cf565b005b6100f6610279565b6040516101039190613279565b60405180910390f35b6100ec610295565b6101276101223660046122e0565b61032f565b60405161010391906130da565b610147610142366004612451565b6103d3565b6040516101039190613110565b6100ec6103e8565b610164610495565b6040516101039190613088565b6101476104b1565b6100ec610187366004612315565b6104f1565b6100ec61019a3660046123a9565b610b86565b6101a7610c7f565b604051610103919061311e565b6100ec6101c23660046122c2565b610c85565b610147610ccf565b6101d76104b1565b610216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020d906132b8565b60405180910390fd5b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f800e9acf7ef6d84d7bc26116f2ecb9d8fc6e4a2562cda6d1c411f66ea72054819061026f90600090613110565b60405180910390a1565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b61029d6104b1565b6102d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020d906132b8565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556040517f800e9acf7ef6d84d7bc26116f2ecb9d8fc6e4a2562cda6d1c411f66ea72054819161026f91613110565b6060600082519050606081604051908082528060200260200182016040528015610363578160200160208202803883390190505b50905060005b828110156103c9576004600086838151811061038157fe5b6020026020010151815260200190815260200160002060009054906101000a900460ff168282815181106103b157fe5b91151560209283029190910190910152600101610369565b509150505b919050565b60046020526000908152604090205460ff1681565b6103f06104b1565b610426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020d906132b8565b60015460405160009173ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60015473ffffffffffffffffffffffffffffffffffffffff1690565b60015460009073ffffffffffffffffffffffffffffffffffffffff166104d5610cd8565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6003546105429060ff167f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f436f6e7472616374206973206e6f74206f7065726174696f6e616c0000000000610cdc565b6000805b8251811015610aa757610557611d04565b83828151811061056357fe5b602002602001015190506105d48160200151600001516000148061058c57506020820151514211155b7f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f5369676e6564206f7065726174696f6e2069732065787069726564000000000085610d6b565b6020810151604001516106689073ffffffffffffffffffffffffffffffffffffffff161580610620575060208201516040015173ffffffffffffffffffffffffffffffffffffffff1633145b7f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f4f7065726174696f6e2073656e646572206d69736d617463680000000000000085610d6b565b6040810151513390156107f057600061068388888588610e09565b6000818152600460205260409020549091506106e59060ff16157f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f4861736820616c72656164792075736564206f722063616e63656c656400000084610f24565b6106f3818460400151610f86565b91506107768273ffffffffffffffffffffffffffffffffffffffff1684602001516060015173ffffffffffffffffffffffffffffffffffffffff16147f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f496e76616c6964207369676e6174757265000000000000000000000000000000610cdc565b60008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905551339173ffffffffffffffffffffffffffffffffffffffff85169184917fc567efce0a7476d41074b5c204ed0e44fd548b306cf1dc0c27b8cfac27bc0c2d91a4505b815160009061080690869063ffffffff6111b916565b9050845b81811015610a9a5761081a611d2b565b88828151811061082657fe5b602002602001015190506108558a82602001518151811061084357fe5b602002602001015160000151856111ff565b60028151600881111561086457fe5b14156108825761087d8a8260c001518151811061084357fe5b610a91565b6108dd60068251600881111561089457fe5b14157f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f43616e6e6f7420706572666f726d206c69717569646174696f6e730000000000610cdc565b6005815160088111156108ec57fe5b14801561099d575060005460a08201516040517ff1061ba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163f1061ba89161094d91600401613088565b60206040518083038186803b15801561096557600080fd5b505afa158015610979573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061099d9190810190612433565b15610a91576000546040517f052f72d7000000000000000000000000000000000000000000000000000000008152610a919173ffffffffffffffffffffffffffffffffffffffff169063052f72d7906109fa903390600401613096565b60206040518083038186803b158015610a1257600080fd5b505afa158015610a26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a4a9190810190612433565b7f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f556e7065726d697373696f6e6564207472616465206f70657261746f72000000610cdc565b5060010161080a565b5093505050600101610546565b50610af6835182147f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f4e6f7420616c6c20616374696f6e7320617265207369676e6564000000000000610cdc565b6000546040517fa67a6a4500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063a67a6a4590610b4e90879087906004016130eb565b600060405180830381600087803b158015610b6857600080fd5b505af1158015610b7c573d6000803e3d6000fd5b5050505050505050565b6000610b958484846000610e09565b9050610c183373ffffffffffffffffffffffffffffffffffffffff1683602001516060015173ffffffffffffffffffffffffffffffffffffffff16147f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f43616e63656c6572206d757374206265207369676e6572000000000000000000610cdc565b60008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905551339183917feb98d4ec98d06fd7735ff893b47d492a6f12700b6093a6c5bd5a932608727afb9190a350505050565b60025481565b610c8d6104b1565b610cc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020d906132b8565b610ccc816113fa565b50565b60035460ff1681565b3390565b82610d6657610cea826114d5565b7f3a20000000000000000000000000000000000000000000000000000000000000610d14836114d5565b604051602001610d2693929190612ea7565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261020d91600401613287565b505050565b83610e0357610d79836114d5565b7f3a20000000000000000000000000000000000000000000000000000000000000610da3846114d5565b7f203c000000000000000000000000000000000000000000000000000000000000610dcd8561158b565b604051610d269594939291907f3e0000000000000000000000000000000000000000000000000000000000000090602001612ecf565b50505050565b600080610e188686868661169a565b90506000604051602001610e2b90612f8b565b604051602081830303815290604052604051602001610e4990612fd8565b604051602081830303815290604052604051602001610e6790613051565b60408051601f1981840301815290829052610e86939291602001612f67565b60405160208183030381529060405280519060200120828660200151604051602001610eb493929190613178565b60408051601f19818403018152908290528051602091820120600254909350610f01927f190100000000000000000000000000000000000000000000000000000000000092859101612e4f565b60405160208183030381529060405280519060200120925050505b949350505050565b83610e0357610f32836114d5565b7f3a20000000000000000000000000000000000000000000000000000000000000610f5c846114d5565b7f203c000000000000000000000000000000000000000000000000000000000000610dcd856117ca565b6000610fd760428351147f54797065645369676e61747572650000000000000000000000000000000000007f496e76616c6964207369676e6174757265206c656e6774680000000000000000610cdc565b602082015160408301516060840151600081901a9060011a61103d600382107f54797065645369676e61747572650000000000000000000000000000000000007f496e76616c6964207369676e6174757265207479706500000000000000000000610cdc565b60008160ff16600381111561104e57fe5b905060008082600381111561105f57fe5b141561106c57508761115b565b600182600381111561107a57fe5b14156110e5576040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250896040516020016110c8929190612f2d565b60405160208183030381529060405280519060200120905061115b565b60028260038111156110f357fe5b146110fa57fe5b6040518060400160405280601b81526020017f19457468657265756d205369676e6564204d6573736167653a0a20000000000081525089604051602001611142929190612f2d565b6040516020818303038152906040528051906020012090505b6001818588886040516000815260200160405260405161117e9493929190613244565b6020604051602081039080840390855afa1580156111a0573d6000803e3d6000fd5b5050506020604051035196505050505050505b92915050565b6000828201838110156111f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020d906132a8565b9392505050565b60003373ffffffffffffffffffffffffffffffffffffffff8416148061125057508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806112fe57506000546040517f3a031bf000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633a031bf0906112ae90869033906004016130bf565b60206040518083038186803b1580156112c657600080fd5b505afa1580156112da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112fe9190810190612433565b806113ac57506000546040517f3a031bf000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633a031bf09061135c90869086906004016130a4565b60206040518083038186803b15801561137457600080fd5b505afa158015611388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113ac9190810190612433565b9050610d66817f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f5369676e6572206e6f7420617574686f72697a656400000000000000000000008561192d565b73ffffffffffffffffffffffffffffffffffffffff8116611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020d90613298565b60015460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b606080826040516020016114e99190612e86565b60408051601f19818403018152919052905060205b80156115745781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019082908290811061153757fe5b01602001517fff00000000000000000000000000000000000000000000000000000000000000161561156f57600101815290506103ce565b6114fe565b505060408051600081526020810190915292915050565b6060816115cc575060408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201526103ce565b8160005b81156115e457600101600a820491506115d0565b6060816040519080825280601f01601f191660200182016040528015611611576020820181803883390190505b508593509050815b8015611691577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600a840660300160f81b82828151811061165757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350611619565b50949350505050565b6000606083600001516040519080825280602002602001820160405280156116cc578160200160208202803883390190505b50905060005b8451811015611797576116e3611d2b565b86828601815181106116f157fe5b60200260200101519050611703611d8a565b600082516117109061198f565b600281111561171b57fe5b1461173d57888260c001518151811061173057fe5b6020026020010151611752565b60408051808201909152600080825260208201525b9050611776828a84602001518151811061176857fe5b6020026020010151836119fd565b84848151811061178257fe5b602090810291909101015250506001016116d2565b50806040516020016117a99190612e43565b60405160208183030381529060405280519060200120915050949350505050565b6040805160428082526080820190925260609183918391602082018180388339019050509050603060f81b8160008151811061180257fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b8160018151811061184357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b60208110156103c9576002810261188e600f8516611ae2565b83826041038151811061189d57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c93506118df600f8516611ae2565b8382604003815181106118ee57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c91600101611875565b83610e035761193b836114d5565b7f3a20000000000000000000000000000000000000000000000000000000000000611965846114d5565b7f203c000000000000000000000000000000000000000000000000000000000000610dcd85611b04565b6000600282600881111561199f57fe5b14806119b6575060058260088111156119b457fe5b145b156119c3575060016103ce565b60068260088111156119d157fe5b14806119e8575060078260088111156119e657fe5b145b156119f5575060026103ce565b506000919050565b6000604051602001611a0e90612fd8565b604051602081830303815290604052604051602001611a2c90613051565b60408051601f1981840301815290829052611a4a9291602001612f4f565b60405160208183030381529060405280519060200120846000015184600001518560200151611a7c8860400151611c7b565b606089015160808a015160a08b0151895160208b015160e08e0151604051611aa49190612e9b565b604051908190038120611ac39b9a9998979695949392916020016131a0565b6040516020818303038152906040528051906020012090509392505050565b6000600a821015611afa57506030810160f81b6103ce565b5060570160f81b90565b60408051602a808252606082810190935273ffffffffffffffffffffffffffffffffffffffff8416918391602082018180388339019050509050603060f81b81600081518110611b5057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b81600181518110611b9157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b60148110156103c95760028102611bdc600f8516611ae2565b838260290381518110611beb57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c9350611c2d600f8516611ae2565b838260280381518110611c3c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c91600101611bc3565b6000604051602001611c8c90613051565b60408051601f1981840301815290829052611ca991602001612e9b565b604051602081830303815290604052805190602001208260000151836020015184604001518560600151604051602001611ce795949392919061312c565b604051602081830303815290604052805190602001209050919050565b604051806060016040528060008152602001611d1e611da1565b8152602001606081525090565b604080516101008101825260008082526020820152908101611d4b611df5565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b604080518082019091526000808252602082015290565b60405180608001604052806000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b604080516080810190915260008082526020820190815260200160008152602001600081525090565b80356111b381613459565b600082601f830112611e3a57600080fd5b8135611e4d611e48826132ef565b6132c8565b91508181835260208401935060208101905083856020840282011115611e7257600080fd5b60005b83811015611e9e5781611e888882611fea565b8452506020928301929190910190600101611e75565b5050505092915050565b600082601f830112611eb957600080fd5b8135611ec7611e48826132ef565b81815260209384019390925082018360005b83811015611e9e5781358601611eef888261205a565b8452506020928301929190910190600101611ed9565b600082601f830112611f1657600080fd5b8135611f24611e48826132ef565b81815260209384019390925082018360005b83811015611e9e5781358601611f4c88826121a5565b8452506020928301929190910190600101611f36565b600082601f830112611f7357600080fd5b8135611f81611e48826132ef565b91508181835260208401935060208101905083856040840282011115611fa657600080fd5b60005b83811015611e9e5781611fbc8882612218565b84525060209092019160409190910190600101611fa9565b80356111b38161346d565b80516111b38161346d565b80356111b381613476565b600082601f83011261200657600080fd5b8135612014611e4882613310565b9150808252602083016020830185838301111561203057600080fd5b61203b838284613403565b50505092915050565b80356111b38161347f565b80356111b38161348c565b6000610160828403121561206d57600080fd5b6120786101006132c8565b905060006120868484612044565b825250602061209784848301611fea565b60208301525060406120ab84828501612136565b60408301525060c06120bf84828501611fea565b60608301525060e06120d384828501611fea565b6080830152506101006120e884828501611e1e565b60a0830152506101206120fd84828501611fea565b60c08301525061014082013567ffffffffffffffff81111561211e57600080fd5b61212a84828501611ff5565b60e08301525092915050565b60006080828403121561214857600080fd5b61215260806132c8565b905060006121608484611fd4565b82525060206121718484830161204f565b60208301525060406121858482850161204f565b604083015250606061219984828501611fea565b60608301525092915050565b600060c082840312156121b757600080fd5b6121c160606132c8565b905060006121cf8484611fea565b82525060206121e08484830161225f565b60208301525060a082013567ffffffffffffffff81111561220057600080fd5b61220c84828501611ff5565b60408301525092915050565b60006040828403121561222a57600080fd5b61223460406132c8565b905060006122428484611e1e565b825250602061225384848301611fea565b60208301525092915050565b60006080828403121561227157600080fd5b61227b60806132c8565b905060006122898484611fea565b825250602061229a84848301611fea565b60208301525060406122ae84828501611e1e565b604083015250606061219984828501611e1e565b6000602082840312156122d457600080fd5b6000610f1c8484611e1e565b6000602082840312156122f257600080fd5b813567ffffffffffffffff81111561230957600080fd5b610f1c84828501611e29565b60008060006060848603121561232a57600080fd5b833567ffffffffffffffff81111561234157600080fd5b61234d86828701611f62565b935050602084013567ffffffffffffffff81111561236a57600080fd5b61237686828701611ea8565b925050604084013567ffffffffffffffff81111561239357600080fd5b61239f86828701611f05565b9150509250925092565b6000806000606084860312156123be57600080fd5b833567ffffffffffffffff8111156123d557600080fd5b6123e186828701611f62565b935050602084013567ffffffffffffffff8111156123fe57600080fd5b61240a86828701611ea8565b925050604084013567ffffffffffffffff81111561242757600080fd5b61239f868287016121a5565b60006020828403121561244557600080fd5b6000610f1c8484611fdf565b60006020828403121561246357600080fd5b6000610f1c8484611fea565b600061247b838361262a565b505060200190565b600061247b8383612650565b60006111f88383612cd7565b60006124a78383612dcc565b505060400190565b6124b8816133db565b82525050565b6124b88161334b565b60006124d28261333e565b6124dc8185613342565b93506124e783613338565b8060005b838110156125155781516124ff888261246f565b975061250a83613338565b9250506001016124eb565b509495945050505050565b600061252b8261333e565b61253581856103ce565b935061254083613338565b8060005b838110156125155781516125588882612483565b975061256383613338565b925050600101612544565b60006125798261333e565b6125838185613342565b93508360208202850161259585613338565b8060005b858110156125cf57848403895281516125b2858261248f565b94506125bd83613338565b60209a909a0199925050600101612599565b5091979650505050505050565b60006125e78261333e565b6125f18185613342565b93506125fc83613338565b8060005b83811015612515578151612614888261249b565b975061261f83613338565b925050600101612600565b6124b881613356565b6124b861263f8261335b565b6133a5565b6124b861263f82613380565b6124b8816133a5565b6124b861263f826133a5565b60006126708261333e565b61267a81856103ce565b935061268a81856020860161340f565b9290920192915050565b600061269f8261333e565b6126a98185613342565b93506126b981856020860161340f565b6126c28161343b565b9093019392505050565b6124b8816133e2565b6124b8816133ed565b6124b8816133f8565b60006126f46013836103ce565b7f75696e74382064656e6f6d696e6174696f6e2c00000000000000000000000000815260130192915050565b600061272d600f836103ce565b7f616464726573732073656e6465722c00000000000000000000000000000000008152600f0192915050565b6000612766600a836103ce565b7f4f7065726174696f6e28000000000000000000000000000000000000000000008152600a0192915050565b600061279f602683613342565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181527f6464726573730000000000000000000000000000000000000000000000000000602082015260400192915050565b60006127fe6011836103ce565b7f416374696f6e5b5d20616374696f6e732c000000000000000000000000000000815260110192915050565b6000612837600a836103ce565b7f626f6f6c207369676e2c000000000000000000000000000000000000000000008152600a0192915050565b6000612870601b83613342565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b60006128a96018836103ce565b7f75696e74323536207072696d6172794d61726b657449642c0000000000000000815260180192915050565b60006128e2600d836103ce565b7f75696e743235362076616c7565000000000000000000000000000000000000008152600d0192915050565b600061291b6001836103ce565b7f2900000000000000000000000000000000000000000000000000000000000000815260010192915050565b60006129546007836103ce565b7f416374696f6e2800000000000000000000000000000000000000000000000000815260070192915050565b600061298d601b836103ce565b7f75696e74323536206f746865724163636f756e744e756d6265722c00000000008152601b0192915050565b60006129c6600c836103ce565b7f4173736574416d6f756e742800000000000000000000000000000000000000008152600c0192915050565b60006129ff601a836103ce565b7f61646472657373206f746865724163636f756e744f776e65722c0000000000008152601a0192915050565b6000612a38600d836103ce565b7f75696e743235362073616c742c000000000000000000000000000000000000008152600d0192915050565b6000612a716015836103ce565b7f61646472657373206163636f756e744f776e65722c0000000000000000000000815260150192915050565b6000612aaa600e836103ce565b7f61646472657373207369676e65720000000000000000000000000000000000008152600e0192915050565b6000612ae3600a836103ce565b7f62797465732064617461000000000000000000000000000000000000000000008152600a0192915050565b6000612b1c602083613342565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b6000612b55600a836103ce565b7f75696e7438207265662c000000000000000000000000000000000000000000008152600a0192915050565b6000612b8e6018836103ce565b7f4173736574416d6f756e74206173736574416d6f756e742c0000000000000000815260180192915050565b6000612bc76013836103ce565b7f75696e743235362065787069726174696f6e2c00000000000000000000000000815260130192915050565b6000612c006016836103ce565b7f75696e74323536206163636f756e744e756d6265722c00000000000000000000815260160192915050565b6000612c396011836103ce565b7f75696e743820616374696f6e547970652c000000000000000000000000000000815260110192915050565b6000612c726015836103ce565b7f61646472657373206f74686572416464726573732c0000000000000000000000815260150192915050565b6000612cab601a836103ce565b7f75696e74323536207365636f6e646172794d61726b657449642c0000000000008152601a0192915050565b8051600090610160840190612cec85826126d5565b506020830151612cff6020860182612650565b506040830151612d126040860182612d82565b506060830151612d2560c0860182612650565b506080830151612d3860e0860182612650565b5060a0830151612d4c6101008601826124be565b5060c0830151612d60610120860182612650565b5060e0830151848203610140860152612d798282612694565b95945050505050565b80516080830190612d93848261262a565b506020820151612da660208501826126de565b506040820151612db960408501826126de565b506060820151610e036060850182612650565b80516040830190612ddd84826124be565b506020820151610e036020850182612650565b80516080830190612e018482612650565b506020820151612e146020850182612650565b506040820151612e2760408501826124be565b506060820151610e0360608501826124be565b6124b8816133d5565b60006111f88284612520565b6000612e5b8286612644565b600282019150612e6b8285612659565b602082019150612e7b8284612659565b506020019392505050565b6000612e928284612659565b50602001919050565b60006111f88284612665565b6000612eb38286612665565b9150612ebf8285612644565b600282019150612d798284612665565b6000612edb8289612665565b9150612ee78288612644565b600282019150612ef78287612665565b9150612f038286612644565b600282019150612f138285612665565b9150612f1f8284612633565b506001019695505050505050565b6000612f398285612665565b9150612f458284612659565b5060200192915050565b6000612f5b8285612665565b9150610f1c8284612665565b6000612f738286612665565b9150612f7f8285612665565b9150612d798284612665565b6000612f9682612759565b9150612fa1826127f1565b9150612fac82612bba565b9150612fb782612a2b565b9150612fc282612720565b9150612fcd82612a9d565b91506111b38261290e565b6000612fe382612947565b9150612fee82612c2c565b9150612ff982612a64565b915061300482612bf3565b915061300f82612b81565b915061301a8261289c565b915061302582612c9e565b915061303082612c65565b915061303b826129f2565b915061304682612980565b9150612fcd82612ad6565b600061305c826129b9565b91506130678261282a565b9150613072826126e7565b915061307d82612b48565b9150612fcd826128d5565b602081016111b382846124be565b602081016111b382846124af565b604081016130b282856124be565b6111f860208301846124be565b604081016130cd82856124be565b6111f860208301846124af565b602080825281016111f881846124c7565b604080825281016130fc81856125dc565b90508181036020830152610f1c818461256e565b602081016111b3828461262a565b602081016111b38284612650565b60a0810161313a8288612650565b613147602083018761262a565b61315460408301866126de565b61316160608301856126de565b61316e6080830184612650565b9695505050505050565b60c081016131868286612650565b6131936020830185612650565b610f1c6040830184612df0565b61016081016131af828e612650565b6131bc602083018d6126d5565b6131c9604083018c6124be565b6131d6606083018b612650565b6131e3608083018a612650565b6131f060a0830189612650565b6131fd60c0830188612650565b61320a60e08301876124be565b6132186101008301866124be565b613226610120830185612650565b613234610140830184612650565b9c9b505050505050505050505050565b608081016132528287612650565b61325f6020830186612e3a565b61326c6040830185612650565b612d796060830184612650565b602081016111b382846126cc565b602080825281016111f88184612694565b602080825281016111b381612792565b602080825281016111b381612863565b602080825281016111b381612b0f565b60405181810167ffffffffffffffff811182821017156132e757600080fd5b604052919050565b600067ffffffffffffffff82111561330657600080fd5b5060209081020190565b600067ffffffffffffffff82111561332757600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b60006111b3826133bc565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b90565b806103ce81613445565b806103ce8161344f565b73ffffffffffffffffffffffffffffffffffffffff1690565b60ff1690565b60006111b3825b60006111b38261334b565b60006111b3826133a8565b60006111b3826133b2565b82818337506000910152565b60005b8381101561342a578181015183820152602001613412565b83811115610e035750506000910152565b601f01601f191690565b60098110610ccc57fe5b60028110610ccc57fe5b6134628161334b565b8114610ccc57600080fd5b61346281613356565b613462816133a5565b60098110610ccc57600080fd5b60028110610ccc57600080fdfea365627a7a72315820309636cf4565618237f027893c46a683cc19dd45747791d8e420c0033a91b2256c6578706572696d656e74616cf564736f6c63430005100040",
539
- "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100df5760003560e01c80638da5cb5b1161008c578063baf7413f11610066578063baf7413f1461018c578063e306f7791461019f578063f2fde38b146101b4578063f72ac9cb146101c7576100df565b80638da5cb5b1461015c5780638f32d59b146101715780639ef90ea214610179576100df565b80633b84a304116100bd5780633b84a304146101145780635b9ddfdc14610134578063715018a614610154576100df565b806310b9e583146100e457806315c14a4a146100ee57806330e4a7841461010c575b600080fd5b6100ec6101cf565b005b6100f6610279565b6040516101039190613279565b60405180910390f35b6100ec610295565b6101276101223660046122e0565b61032f565b60405161010391906130da565b610147610142366004612451565b6103d3565b6040516101039190613110565b6100ec6103e8565b610164610495565b6040516101039190613088565b6101476104b1565b6100ec610187366004612315565b6104f1565b6100ec61019a3660046123a9565b610b86565b6101a7610c7f565b604051610103919061311e565b6100ec6101c23660046122c2565b610c85565b610147610ccf565b6101d76104b1565b610216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020d906132b8565b60405180910390fd5b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f800e9acf7ef6d84d7bc26116f2ecb9d8fc6e4a2562cda6d1c411f66ea72054819061026f90600090613110565b60405180910390a1565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b61029d6104b1565b6102d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020d906132b8565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556040517f800e9acf7ef6d84d7bc26116f2ecb9d8fc6e4a2562cda6d1c411f66ea72054819161026f91613110565b6060600082519050606081604051908082528060200260200182016040528015610363578160200160208202803883390190505b50905060005b828110156103c9576004600086838151811061038157fe5b6020026020010151815260200190815260200160002060009054906101000a900460ff168282815181106103b157fe5b91151560209283029190910190910152600101610369565b509150505b919050565b60046020526000908152604090205460ff1681565b6103f06104b1565b610426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020d906132b8565b60015460405160009173ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60015473ffffffffffffffffffffffffffffffffffffffff1690565b60015460009073ffffffffffffffffffffffffffffffffffffffff166104d5610cd8565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6003546105429060ff167f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f436f6e7472616374206973206e6f74206f7065726174696f6e616c0000000000610cdc565b6000805b8251811015610aa757610557611d04565b83828151811061056357fe5b602002602001015190506105d48160200151600001516000148061058c57506020820151514211155b7f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f5369676e6564206f7065726174696f6e2069732065787069726564000000000085610d6b565b6020810151604001516106689073ffffffffffffffffffffffffffffffffffffffff161580610620575060208201516040015173ffffffffffffffffffffffffffffffffffffffff1633145b7f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f4f7065726174696f6e2073656e646572206d69736d617463680000000000000085610d6b565b6040810151513390156107f057600061068388888588610e09565b6000818152600460205260409020549091506106e59060ff16157f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f4861736820616c72656164792075736564206f722063616e63656c656400000084610f24565b6106f3818460400151610f86565b91506107768273ffffffffffffffffffffffffffffffffffffffff1684602001516060015173ffffffffffffffffffffffffffffffffffffffff16147f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f496e76616c6964207369676e6174757265000000000000000000000000000000610cdc565b60008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905551339173ffffffffffffffffffffffffffffffffffffffff85169184917fc567efce0a7476d41074b5c204ed0e44fd548b306cf1dc0c27b8cfac27bc0c2d91a4505b815160009061080690869063ffffffff6111b916565b9050845b81811015610a9a5761081a611d2b565b88828151811061082657fe5b602002602001015190506108558a82602001518151811061084357fe5b602002602001015160000151856111ff565b60028151600881111561086457fe5b14156108825761087d8a8260c001518151811061084357fe5b610a91565b6108dd60068251600881111561089457fe5b14157f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f43616e6e6f7420706572666f726d206c69717569646174696f6e730000000000610cdc565b6005815160088111156108ec57fe5b14801561099d575060005460a08201516040517ff1061ba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163f1061ba89161094d91600401613088565b60206040518083038186803b15801561096557600080fd5b505afa158015610979573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061099d9190810190612433565b15610a91576000546040517f052f72d7000000000000000000000000000000000000000000000000000000008152610a919173ffffffffffffffffffffffffffffffffffffffff169063052f72d7906109fa903390600401613096565b60206040518083038186803b158015610a1257600080fd5b505afa158015610a26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a4a9190810190612433565b7f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f556e7065726d697373696f6e6564207472616465206f70657261746f72000000610cdc565b5060010161080a565b5093505050600101610546565b50610af6835182147f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f4e6f7420616c6c20616374696f6e7320617265207369676e6564000000000000610cdc565b6000546040517fa67a6a4500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063a67a6a4590610b4e90879087906004016130eb565b600060405180830381600087803b158015610b6857600080fd5b505af1158015610b7c573d6000803e3d6000fd5b5050505050505050565b6000610b958484846000610e09565b9050610c183373ffffffffffffffffffffffffffffffffffffffff1683602001516060015173ffffffffffffffffffffffffffffffffffffffff16147f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f43616e63656c6572206d757374206265207369676e6572000000000000000000610cdc565b60008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905551339183917feb98d4ec98d06fd7735ff893b47d492a6f12700b6093a6c5bd5a932608727afb9190a350505050565b60025481565b610c8d6104b1565b610cc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020d906132b8565b610ccc816113fa565b50565b60035460ff1681565b3390565b82610d6657610cea826114d5565b7f3a20000000000000000000000000000000000000000000000000000000000000610d14836114d5565b604051602001610d2693929190612ea7565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261020d91600401613287565b505050565b83610e0357610d79836114d5565b7f3a20000000000000000000000000000000000000000000000000000000000000610da3846114d5565b7f203c000000000000000000000000000000000000000000000000000000000000610dcd8561158b565b604051610d269594939291907f3e0000000000000000000000000000000000000000000000000000000000000090602001612ecf565b50505050565b600080610e188686868661169a565b90506000604051602001610e2b90612f8b565b604051602081830303815290604052604051602001610e4990612fd8565b604051602081830303815290604052604051602001610e6790613051565b60408051601f1981840301815290829052610e86939291602001612f67565b60405160208183030381529060405280519060200120828660200151604051602001610eb493929190613178565b60408051601f19818403018152908290528051602091820120600254909350610f01927f190100000000000000000000000000000000000000000000000000000000000092859101612e4f565b60405160208183030381529060405280519060200120925050505b949350505050565b83610e0357610f32836114d5565b7f3a20000000000000000000000000000000000000000000000000000000000000610f5c846114d5565b7f203c000000000000000000000000000000000000000000000000000000000000610dcd856117ca565b6000610fd760428351147f54797065645369676e61747572650000000000000000000000000000000000007f496e76616c6964207369676e6174757265206c656e6774680000000000000000610cdc565b602082015160408301516060840151600081901a9060011a61103d600382107f54797065645369676e61747572650000000000000000000000000000000000007f496e76616c6964207369676e6174757265207479706500000000000000000000610cdc565b60008160ff16600381111561104e57fe5b905060008082600381111561105f57fe5b141561106c57508761115b565b600182600381111561107a57fe5b14156110e5576040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250896040516020016110c8929190612f2d565b60405160208183030381529060405280519060200120905061115b565b60028260038111156110f357fe5b146110fa57fe5b6040518060400160405280601b81526020017f19457468657265756d205369676e6564204d6573736167653a0a20000000000081525089604051602001611142929190612f2d565b6040516020818303038152906040528051906020012090505b6001818588886040516000815260200160405260405161117e9493929190613244565b6020604051602081039080840390855afa1580156111a0573d6000803e3d6000fd5b5050506020604051035196505050505050505b92915050565b6000828201838110156111f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020d906132a8565b9392505050565b60003373ffffffffffffffffffffffffffffffffffffffff8416148061125057508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806112fe57506000546040517f3a031bf000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633a031bf0906112ae90869033906004016130bf565b60206040518083038186803b1580156112c657600080fd5b505afa1580156112da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112fe9190810190612433565b806113ac57506000546040517f3a031bf000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633a031bf09061135c90869086906004016130a4565b60206040518083038186803b15801561137457600080fd5b505afa158015611388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113ac9190810190612433565b9050610d66817f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f5369676e6572206e6f7420617574686f72697a656400000000000000000000008561192d565b73ffffffffffffffffffffffffffffffffffffffff8116611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020d90613298565b60015460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b606080826040516020016114e99190612e86565b60408051601f19818403018152919052905060205b80156115745781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019082908290811061153757fe5b01602001517fff00000000000000000000000000000000000000000000000000000000000000161561156f57600101815290506103ce565b6114fe565b505060408051600081526020810190915292915050565b6060816115cc575060408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201526103ce565b8160005b81156115e457600101600a820491506115d0565b6060816040519080825280601f01601f191660200182016040528015611611576020820181803883390190505b508593509050815b8015611691577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600a840660300160f81b82828151811061165757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350611619565b50949350505050565b6000606083600001516040519080825280602002602001820160405280156116cc578160200160208202803883390190505b50905060005b8451811015611797576116e3611d2b565b86828601815181106116f157fe5b60200260200101519050611703611d8a565b600082516117109061198f565b600281111561171b57fe5b1461173d57888260c001518151811061173057fe5b6020026020010151611752565b60408051808201909152600080825260208201525b9050611776828a84602001518151811061176857fe5b6020026020010151836119fd565b84848151811061178257fe5b602090810291909101015250506001016116d2565b50806040516020016117a99190612e43565b60405160208183030381529060405280519060200120915050949350505050565b6040805160428082526080820190925260609183918391602082018180388339019050509050603060f81b8160008151811061180257fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b8160018151811061184357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b60208110156103c9576002810261188e600f8516611ae2565b83826041038151811061189d57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c93506118df600f8516611ae2565b8382604003815181106118ee57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c91600101611875565b83610e035761193b836114d5565b7f3a20000000000000000000000000000000000000000000000000000000000000611965846114d5565b7f203c000000000000000000000000000000000000000000000000000000000000610dcd85611b04565b6000600282600881111561199f57fe5b14806119b6575060058260088111156119b457fe5b145b156119c3575060016103ce565b60068260088111156119d157fe5b14806119e8575060078260088111156119e657fe5b145b156119f5575060026103ce565b506000919050565b6000604051602001611a0e90612fd8565b604051602081830303815290604052604051602001611a2c90613051565b60408051601f1981840301815290829052611a4a9291602001612f4f565b60405160208183030381529060405280519060200120846000015184600001518560200151611a7c8860400151611c7b565b606089015160808a015160a08b0151895160208b015160e08e0151604051611aa49190612e9b565b604051908190038120611ac39b9a9998979695949392916020016131a0565b6040516020818303038152906040528051906020012090509392505050565b6000600a821015611afa57506030810160f81b6103ce565b5060570160f81b90565b60408051602a808252606082810190935273ffffffffffffffffffffffffffffffffffffffff8416918391602082018180388339019050509050603060f81b81600081518110611b5057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b81600181518110611b9157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b60148110156103c95760028102611bdc600f8516611ae2565b838260290381518110611beb57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c9350611c2d600f8516611ae2565b838260280381518110611c3c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c91600101611bc3565b6000604051602001611c8c90613051565b60408051601f1981840301815290829052611ca991602001612e9b565b604051602081830303815290604052805190602001208260000151836020015184604001518560600151604051602001611ce795949392919061312c565b604051602081830303815290604052805190602001209050919050565b604051806060016040528060008152602001611d1e611da1565b8152602001606081525090565b604080516101008101825260008082526020820152908101611d4b611df5565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b604080518082019091526000808252602082015290565b60405180608001604052806000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b604080516080810190915260008082526020820190815260200160008152602001600081525090565b80356111b381613459565b600082601f830112611e3a57600080fd5b8135611e4d611e48826132ef565b6132c8565b91508181835260208401935060208101905083856020840282011115611e7257600080fd5b60005b83811015611e9e5781611e888882611fea565b8452506020928301929190910190600101611e75565b5050505092915050565b600082601f830112611eb957600080fd5b8135611ec7611e48826132ef565b81815260209384019390925082018360005b83811015611e9e5781358601611eef888261205a565b8452506020928301929190910190600101611ed9565b600082601f830112611f1657600080fd5b8135611f24611e48826132ef565b81815260209384019390925082018360005b83811015611e9e5781358601611f4c88826121a5565b8452506020928301929190910190600101611f36565b600082601f830112611f7357600080fd5b8135611f81611e48826132ef565b91508181835260208401935060208101905083856040840282011115611fa657600080fd5b60005b83811015611e9e5781611fbc8882612218565b84525060209092019160409190910190600101611fa9565b80356111b38161346d565b80516111b38161346d565b80356111b381613476565b600082601f83011261200657600080fd5b8135612014611e4882613310565b9150808252602083016020830185838301111561203057600080fd5b61203b838284613403565b50505092915050565b80356111b38161347f565b80356111b38161348c565b6000610160828403121561206d57600080fd5b6120786101006132c8565b905060006120868484612044565b825250602061209784848301611fea565b60208301525060406120ab84828501612136565b60408301525060c06120bf84828501611fea565b60608301525060e06120d384828501611fea565b6080830152506101006120e884828501611e1e565b60a0830152506101206120fd84828501611fea565b60c08301525061014082013567ffffffffffffffff81111561211e57600080fd5b61212a84828501611ff5565b60e08301525092915050565b60006080828403121561214857600080fd5b61215260806132c8565b905060006121608484611fd4565b82525060206121718484830161204f565b60208301525060406121858482850161204f565b604083015250606061219984828501611fea565b60608301525092915050565b600060c082840312156121b757600080fd5b6121c160606132c8565b905060006121cf8484611fea565b82525060206121e08484830161225f565b60208301525060a082013567ffffffffffffffff81111561220057600080fd5b61220c84828501611ff5565b60408301525092915050565b60006040828403121561222a57600080fd5b61223460406132c8565b905060006122428484611e1e565b825250602061225384848301611fea565b60208301525092915050565b60006080828403121561227157600080fd5b61227b60806132c8565b905060006122898484611fea565b825250602061229a84848301611fea565b60208301525060406122ae84828501611e1e565b604083015250606061219984828501611e1e565b6000602082840312156122d457600080fd5b6000610f1c8484611e1e565b6000602082840312156122f257600080fd5b813567ffffffffffffffff81111561230957600080fd5b610f1c84828501611e29565b60008060006060848603121561232a57600080fd5b833567ffffffffffffffff81111561234157600080fd5b61234d86828701611f62565b935050602084013567ffffffffffffffff81111561236a57600080fd5b61237686828701611ea8565b925050604084013567ffffffffffffffff81111561239357600080fd5b61239f86828701611f05565b9150509250925092565b6000806000606084860312156123be57600080fd5b833567ffffffffffffffff8111156123d557600080fd5b6123e186828701611f62565b935050602084013567ffffffffffffffff8111156123fe57600080fd5b61240a86828701611ea8565b925050604084013567ffffffffffffffff81111561242757600080fd5b61239f868287016121a5565b60006020828403121561244557600080fd5b6000610f1c8484611fdf565b60006020828403121561246357600080fd5b6000610f1c8484611fea565b600061247b838361262a565b505060200190565b600061247b8383612650565b60006111f88383612cd7565b60006124a78383612dcc565b505060400190565b6124b8816133db565b82525050565b6124b88161334b565b60006124d28261333e565b6124dc8185613342565b93506124e783613338565b8060005b838110156125155781516124ff888261246f565b975061250a83613338565b9250506001016124eb565b509495945050505050565b600061252b8261333e565b61253581856103ce565b935061254083613338565b8060005b838110156125155781516125588882612483565b975061256383613338565b925050600101612544565b60006125798261333e565b6125838185613342565b93508360208202850161259585613338565b8060005b858110156125cf57848403895281516125b2858261248f565b94506125bd83613338565b60209a909a0199925050600101612599565b5091979650505050505050565b60006125e78261333e565b6125f18185613342565b93506125fc83613338565b8060005b83811015612515578151612614888261249b565b975061261f83613338565b925050600101612600565b6124b881613356565b6124b861263f8261335b565b6133a5565b6124b861263f82613380565b6124b8816133a5565b6124b861263f826133a5565b60006126708261333e565b61267a81856103ce565b935061268a81856020860161340f565b9290920192915050565b600061269f8261333e565b6126a98185613342565b93506126b981856020860161340f565b6126c28161343b565b9093019392505050565b6124b8816133e2565b6124b8816133ed565b6124b8816133f8565b60006126f46013836103ce565b7f75696e74382064656e6f6d696e6174696f6e2c00000000000000000000000000815260130192915050565b600061272d600f836103ce565b7f616464726573732073656e6465722c00000000000000000000000000000000008152600f0192915050565b6000612766600a836103ce565b7f4f7065726174696f6e28000000000000000000000000000000000000000000008152600a0192915050565b600061279f602683613342565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181527f6464726573730000000000000000000000000000000000000000000000000000602082015260400192915050565b60006127fe6011836103ce565b7f416374696f6e5b5d20616374696f6e732c000000000000000000000000000000815260110192915050565b6000612837600a836103ce565b7f626f6f6c207369676e2c000000000000000000000000000000000000000000008152600a0192915050565b6000612870601b83613342565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b60006128a96018836103ce565b7f75696e74323536207072696d6172794d61726b657449642c0000000000000000815260180192915050565b60006128e2600d836103ce565b7f75696e743235362076616c7565000000000000000000000000000000000000008152600d0192915050565b600061291b6001836103ce565b7f2900000000000000000000000000000000000000000000000000000000000000815260010192915050565b60006129546007836103ce565b7f416374696f6e2800000000000000000000000000000000000000000000000000815260070192915050565b600061298d601b836103ce565b7f75696e74323536206f746865724163636f756e744e756d6265722c00000000008152601b0192915050565b60006129c6600c836103ce565b7f4173736574416d6f756e742800000000000000000000000000000000000000008152600c0192915050565b60006129ff601a836103ce565b7f61646472657373206f746865724163636f756e744f776e65722c0000000000008152601a0192915050565b6000612a38600d836103ce565b7f75696e743235362073616c742c000000000000000000000000000000000000008152600d0192915050565b6000612a716015836103ce565b7f61646472657373206163636f756e744f776e65722c0000000000000000000000815260150192915050565b6000612aaa600e836103ce565b7f61646472657373207369676e65720000000000000000000000000000000000008152600e0192915050565b6000612ae3600a836103ce565b7f62797465732064617461000000000000000000000000000000000000000000008152600a0192915050565b6000612b1c602083613342565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b6000612b55600a836103ce565b7f75696e7438207265662c000000000000000000000000000000000000000000008152600a0192915050565b6000612b8e6018836103ce565b7f4173736574416d6f756e74206173736574416d6f756e742c0000000000000000815260180192915050565b6000612bc76013836103ce565b7f75696e743235362065787069726174696f6e2c00000000000000000000000000815260130192915050565b6000612c006016836103ce565b7f75696e74323536206163636f756e744e756d6265722c00000000000000000000815260160192915050565b6000612c396011836103ce565b7f75696e743820616374696f6e547970652c000000000000000000000000000000815260110192915050565b6000612c726015836103ce565b7f61646472657373206f74686572416464726573732c0000000000000000000000815260150192915050565b6000612cab601a836103ce565b7f75696e74323536207365636f6e646172794d61726b657449642c0000000000008152601a0192915050565b8051600090610160840190612cec85826126d5565b506020830151612cff6020860182612650565b506040830151612d126040860182612d82565b506060830151612d2560c0860182612650565b506080830151612d3860e0860182612650565b5060a0830151612d4c6101008601826124be565b5060c0830151612d60610120860182612650565b5060e0830151848203610140860152612d798282612694565b95945050505050565b80516080830190612d93848261262a565b506020820151612da660208501826126de565b506040820151612db960408501826126de565b506060820151610e036060850182612650565b80516040830190612ddd84826124be565b506020820151610e036020850182612650565b80516080830190612e018482612650565b506020820151612e146020850182612650565b506040820151612e2760408501826124be565b506060820151610e0360608501826124be565b6124b8816133d5565b60006111f88284612520565b6000612e5b8286612644565b600282019150612e6b8285612659565b602082019150612e7b8284612659565b506020019392505050565b6000612e928284612659565b50602001919050565b60006111f88284612665565b6000612eb38286612665565b9150612ebf8285612644565b600282019150612d798284612665565b6000612edb8289612665565b9150612ee78288612644565b600282019150612ef78287612665565b9150612f038286612644565b600282019150612f138285612665565b9150612f1f8284612633565b506001019695505050505050565b6000612f398285612665565b9150612f458284612659565b5060200192915050565b6000612f5b8285612665565b9150610f1c8284612665565b6000612f738286612665565b9150612f7f8285612665565b9150612d798284612665565b6000612f9682612759565b9150612fa1826127f1565b9150612fac82612bba565b9150612fb782612a2b565b9150612fc282612720565b9150612fcd82612a9d565b91506111b38261290e565b6000612fe382612947565b9150612fee82612c2c565b9150612ff982612a64565b915061300482612bf3565b915061300f82612b81565b915061301a8261289c565b915061302582612c9e565b915061303082612c65565b915061303b826129f2565b915061304682612980565b9150612fcd82612ad6565b600061305c826129b9565b91506130678261282a565b9150613072826126e7565b915061307d82612b48565b9150612fcd826128d5565b602081016111b382846124be565b602081016111b382846124af565b604081016130b282856124be565b6111f860208301846124be565b604081016130cd82856124be565b6111f860208301846124af565b602080825281016111f881846124c7565b604080825281016130fc81856125dc565b90508181036020830152610f1c818461256e565b602081016111b3828461262a565b602081016111b38284612650565b60a0810161313a8288612650565b613147602083018761262a565b61315460408301866126de565b61316160608301856126de565b61316e6080830184612650565b9695505050505050565b60c081016131868286612650565b6131936020830185612650565b610f1c6040830184612df0565b61016081016131af828e612650565b6131bc602083018d6126d5565b6131c9604083018c6124be565b6131d6606083018b612650565b6131e3608083018a612650565b6131f060a0830189612650565b6131fd60c0830188612650565b61320a60e08301876124be565b6132186101008301866124be565b613226610120830185612650565b613234610140830184612650565b9c9b505050505050505050505050565b608081016132528287612650565b61325f6020830186612e3a565b61326c6040830185612650565b612d796060830184612650565b602081016111b382846126cc565b602080825281016111f88184612694565b602080825281016111b381612792565b602080825281016111b381612863565b602080825281016111b381612b0f565b60405181810167ffffffffffffffff811182821017156132e757600080fd5b604052919050565b600067ffffffffffffffff82111561330657600080fd5b5060209081020190565b600067ffffffffffffffff82111561332757600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b60006111b3826133bc565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b90565b806103ce81613445565b806103ce8161344f565b73ffffffffffffffffffffffffffffffffffffffff1690565b60ff1690565b60006111b3825b60006111b38261334b565b60006111b3826133a8565b60006111b3826133b2565b82818337506000910152565b60005b8381101561342a578181015183820152602001613412565b83811115610e035750506000910152565b601f01601f191690565b60098110610ccc57fe5b60028110610ccc57fe5b6134628161334b565b8114610ccc57600080fd5b61346281613356565b613462816133a5565b60098110610ccc57600080fd5b60028110610ccc57600080fdfea365627a7a72315820309636cf4565618237f027893c46a683cc19dd45747791d8e420c0033a91b2256c6578706572696d656e74616cf564736f6c63430005100040",
537
+ "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dolomiteMargin\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"operational\",\"type\":\"bool\"}],\"name\":\"ContractStatusSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"operationHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"canceler\",\"type\":\"address\"}],\"name\":\"LogOperationCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"operationHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"LogOperationExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"DOLOMITE_MARGIN\",\"outputs\":[{\"internalType\":\"contract IDolomiteMargin\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"EIP712_DOMAIN_HASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info[]\",\"name\":\"accounts\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"enum Actions.ActionType\",\"name\":\"actionType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"accountId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.AssetAmount\",\"name\":\"amount\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"primaryMarketId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryMarketId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"otherAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"otherAccountId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Actions.ActionArgs[]\",\"name\":\"actions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"numActions\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"internalType\":\"struct SignedOperationProxy.OperationHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct SignedOperationProxy.Authorization\",\"name\":\"auth\",\"type\":\"tuple\"}],\"name\":\"cancel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"g_invalidated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"g_isOperational\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"operationHashes\",\"type\":\"bytes32[]\"}],\"name\":\"getOperationsAreInvalid\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"\",\"type\":\"bool[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info[]\",\"name\":\"accounts\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"enum Actions.ActionType\",\"name\":\"actionType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"accountId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.AssetAmount\",\"name\":\"amount\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"primaryMarketId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryMarketId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"otherAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"otherAccountId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Actions.ActionArgs[]\",\"name\":\"actions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"numActions\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"internalType\":\"struct SignedOperationProxy.OperationHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct SignedOperationProxy.Authorization[]\",\"name\":\"auths\",\"type\":\"tuple[]\"}],\"name\":\"operate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"shutDown\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"startUp\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"dYdX * Contract for sending operations on behalf of others\",\"methods\":{\"cancel((address,uint256)[],(uint8,uint256,(bool,uint8,uint8,uint256),uint256,uint256,address,uint256,bytes)[],(uint256,(uint256,uint256,address,address),bytes))\":{\"params\":{\"accounts\":\"The accounts involved in the operation\",\"actions\":\"The actions involved in the operation\",\"auth\":\"The unsigned authorization of the operation\"}},\"isOwner()\":{\"details\":\"Returns true if the caller is the current owner.\"},\"operate((address,uint256)[],(uint8,uint256,(bool,uint8,uint8,uint256),uint256,uint256,address,uint256,bytes)[],(uint256,(uint256,uint256,address,address),bytes)[])\":{\"params\":{\"accounts\":\"The accounts to forward to DolomiteMargin.operate()\",\"actions\":\"The actions to forward to DolomiteMargin.operate()\",\"auths\":\"The signed authorizations for each group of actions (or unsigned if msg.sender is already authorized)\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. * NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"SignedOperationProxy\"},\"userdoc\":{\"methods\":{\"cancel((address,uint256)[],(uint8,uint256,(bool,uint8,uint8,uint256),uint256,uint256,address,uint256,bytes)[],(uint256,(uint256,uint256,address,address),bytes))\":{\"notice\":\"Allows a signer to permanently cancel an operation on-chain.\"},\"getOperationsAreInvalid(bytes32[])\":{\"notice\":\"Returns a bool for each operation. True if the operation is invalid (from being canceled or previously executed).\"},\"operate((address,uint256)[],(uint8,uint256,(bool,uint8,uint8,uint256),uint256,uint256,address,uint256,bytes)[],(uint256,(uint256,uint256,address,address),bytes)[])\":{\"notice\":\"Submits an operation to DolomiteMargin. Actions for accounts that the msg.sender does not control must be authorized by a signed message. Each authorization can apply to multiple actions at once which must occur in-order next to each other. An empty authorization must be supplied explicitly for each group of actions that do not require a signed message.\"},\"shutDown()\":{\"notice\":\"The owner can shut down the exchange.\"},\"startUp()\":{\"notice\":\"The owner can start back up the exchange.\"}}}},\"settings\":{\"compilationTarget\":{\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/proxies/SignedOperationProxy.sol\":\"SignedOperationProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/helpers/OnlyDolomiteMargin.sol\":{\"keccak256\":\"0xfc9ce2f5a274ec66668c133f09fe213bc1a6a739f9147f4357a3493094de8deb\",\"urls\":[\"bzz-raw://e45442587f111fa0d85dd85a4e07993f5fecd1afce4f457ed21441f8b0abb937\",\"dweb:/ipfs/QmaNq3j3PUwb8Wrx2gEmFFsVa2GByDEkDCPGdwo2qvMeKh\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/lib/TypedSignature.sol\":{\"keccak256\":\"0x4b4eb5fd2869d6c410948f78163773442c11bc82e393307e41359bbdb21577bf\",\"urls\":[\"bzz-raw://9c9c3abae44173086bc08f5479fbc67151d5905f60e1032ec6f9e40f841f3365\",\"dweb:/ipfs/QmbsQRX3gmcpimjFEW5ULJVavHQtViyg7NSQ2Q8Qcu6F6V\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/proxies/SignedOperationProxy.sol\":{\"keccak256\":\"0x4f66ed752fe78ff6470c860a9562e50f710fa8de58152673e2618a65ae37a799\",\"urls\":[\"bzz-raw://7430fd21158620acb6764dda24b2b2292b63a05d571e17e8403a150c1819c939\",\"dweb:/ipfs/QmScC8bmMynetrpmQJiPbMYfxPUm2CctQ4sa3jDY1igQZV\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/interfaces/IDolomiteMargin.sol\":{\"keccak256\":\"0x1e73364879c267fdd2bfd871e62ee58ee3d65fbef3b71e3cc104fbff499eca6c\",\"urls\":[\"bzz-raw://e3b1327980a5949afd52cff4713f47ee4fdee9a8b376ceaa3402f5c9696b8c1b\",\"dweb:/ipfs/QmbhQzVEdaraPJizT5DTtk6CDzH3guHNipHW5T23uTtFkX\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/interfaces/IERC20Detailed.sol\":{\"keccak256\":\"0x22a62e2a8155e70300773721902f4b9118e17aa0bb5d9d1b046050a014cfb223\",\"urls\":[\"bzz-raw://03af737a33c552fbe58f6f1fbd5496854fdc28dd57be4365d56663725c083a18\",\"dweb:/ipfs/QmbgLqGAQEd6tXsZB8QaPNCAMiU6nNzP75wNbKdS65BuUF\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/interfaces/IInterestSetter.sol\":{\"keccak256\":\"0x546825f65490a30e29d0f6446acec49c1e895ce6b33d48ca5c05092725a63a57\",\"urls\":[\"bzz-raw://6ad3013aed985bdf6e6234ae0f7f37e6bba76c3470c33bfa24678cf19b3b412c\",\"dweb:/ipfs/QmfYaSBzxGpgiHoR7ontMJY66S5L26XwkLYoEuzsEjpbQH\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3f7c3d1397390ea44c6d5e5730d49476431c3df3b28334fe38218de5edc31138\",\"urls\":[\"bzz-raw://63ebf926fca9ce33aaabaf93805686acc25daded1648d6dab59c8c4d05116918\",\"dweb:/ipfs/QmeGkDp7ycYstpfqCYBiqoCYwy876gabx8r42o5koj3H5A\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Account.sol\":{\"keccak256\":\"0x0ab9a3fabc89984dff748af63d4319ee134051de2d7fc560e34ebaac86198396\",\"urls\":[\"bzz-raw://ab67f499a8ef83dc7e7cf7176a0f66eced40fa228eda8dd2d47e066ab985cf42\",\"dweb:/ipfs/QmXRHbsEYxr2Qsfsj5psXGV5LaPZHuzLiEXzSQJ77WSE27\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Actions.sol\":{\"keccak256\":\"0x44ec62b766a88a2f65267991e76cab88711e733b826dc9e578cb6ad6b38b2445\",\"urls\":[\"bzz-raw://731a8d44e57c9dcd7fbdefc37a6b5889c0d06defb3bd66b921b2a7db0edf0103\",\"dweb:/ipfs/QmcVbXc9oi5DMxjPtsBF76oJzD6zVjm7RuXgJfP3Goqrrb\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Bits.sol\":{\"keccak256\":\"0x425bf5764368faca16cc30a64b79d9bbe01fd8150444b58a464971c32450bd85\",\"urls\":[\"bzz-raw://064baf3155da634c5c80cea70bba0dda7a33af934b34f75f596961b4ab9aeafe\",\"dweb:/ipfs/QmTUHXoi9L6CkERyfhFs1jhxU66u2sbc6XRR5cH4TeHEqL\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Cache.sol\":{\"keccak256\":\"0x1e6ff383f285e311d07374edda353e14ac4f29201726b0062a2f046c1a2b482c\",\"urls\":[\"bzz-raw://fd11c5db01039bf2c95f3561b08d271b80b7b1cb9fd7f75da887f7609807c5a7\",\"dweb:/ipfs/QmcY6CugdEHaYUa8ZKSnUDhvtVuoLfpDscZcmC91koAn1t\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Decimal.sol\":{\"keccak256\":\"0x66990bbe3c58d0edf57d3f67ab5280e2a53958ce44f75c335c4c50542321bccb\",\"urls\":[\"bzz-raw://724cfdb5c99121aab5262679e46766a2883e344749870d7dbfa92d1617f68bf2\",\"dweb:/ipfs/QmYjAsS45f6UG2u3zuTks2HVfMYtyFCVMgUvD7Gt7XtU3R\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/EnumerableSet.sol\":{\"keccak256\":\"0x9710b0ab43cc2d964d8722a0aabbedbf7e9d4756dcc0b4ab7c46c1ee68653042\",\"urls\":[\"bzz-raw://2405593d37f0f224bfca556f01634a9755bb0ed626f74dd15293106a8b4dd7d3\",\"dweb:/ipfs/QmTZ16S336jsoDnK5p3vAZRzimBkmdEJibncHVBJxBt469\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Interest.sol\":{\"keccak256\":\"0x73e75454568c5dfc3bdcf7dbf2ddce6ab8d3d317618bc1f1957f7667e15d3799\",\"urls\":[\"bzz-raw://7b1c8a9a79c8ffdbb0fa633f713ae3dfeac93b31d2b1639614ac32d473fb8250\",\"dweb:/ipfs/QmfARP93W2mgeVwD9Lkd3yVmbCLF2Mos7o8HJ1x6WYQmxZ\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Math.sol\":{\"keccak256\":\"0x0c0c913b6ccdb69063f9ec84879fcad20a1ee6f44402c9f5ec2b4f5b9f2fa16b\",\"urls\":[\"bzz-raw://89b32eefb57e5e63ad8c6e079ae7bf2d2c8622776cd45af0cf304e1cafd6e078\",\"dweb:/ipfs/Qmcj7yRnYuTgKC3ZqZqe8rynHGYVDS3UrFExcVGcqeaDHY\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Monetary.sol\":{\"keccak256\":\"0x5257274f2d4d3605f3e97ec45fb902111fe9a22506f0b4cf308ea933bc81bfe2\",\"urls\":[\"bzz-raw://85b8023b78805063a2ec8d376f1f5983994eabd96efd8ceadb0224dbb71c5678\",\"dweb:/ipfs/QmaDhzCzRqsuHuJfhToEC4pATQHwhh7yWWsjwfuRzFT1kG\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Require.sol\":{\"keccak256\":\"0xe641662503ea29ca959e84674188c3e9deaaf64c5623fb9560a4301c521ca1d3\",\"urls\":[\"bzz-raw://b10a04c7d014b99eb792c8c774e203c846d070b30cf0b715325fc07838ed6a6d\",\"dweb:/ipfs/QmUqZWnbchfEY9jM647yQamHe4GzspfUeRQF9k2nn1Hixd\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Storage.sol\":{\"keccak256\":\"0xf930fbde3ab43ec8f079dbad062453b502542f53b7eec670c8e86c7a2e47dd9a\",\"urls\":[\"bzz-raw://e1c402fc55471e8372be478e99f91c28373f096e31f0ef1d5072dfdb81541c29\",\"dweb:/ipfs/QmTc8WSfFCbxNQqNpq1vptUVFxteKQ8HWEhyXREyPZ2neu\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Time.sol\":{\"keccak256\":\"0x233d6ebf965711bf980f4bb2e672fb1a11b4b879fd41c884b3c2b704417d0d0c\",\"urls\":[\"bzz-raw://6478ff81706d531f9438b96274a7b904abbbd9c631540c68c6a89c3accf27abf\",\"dweb:/ipfs/QmWe9vkz3qwVjrcbmcTL8wgkjLPsrEqxcqPJL9ujM8PPbp\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Token.sol\":{\"keccak256\":\"0xd7bcae9e3c570544fc946a00cc7695106a64c20bc130d0183612c0410a531d19\",\"urls\":[\"bzz-raw://0ff5ffd6abb9ed223a64128c131afd962bec07fb9867cb62593906b339c76920\",\"dweb:/ipfs/QmbTrJL4bekvBqqaw6wXnBhYzS9uAqULSWF2VzW4cdfsM5\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Types.sol\":{\"keccak256\":\"0xab134538648a2e223a7fe61db03c14f687657a5d37147f93c9088f11735aa311\",\"urls\":[\"bzz-raw://79dc7d2b30576d2349b99267642ac8d5fb7939c920b8d8045379d3614238bdc3\",\"dweb:/ipfs/QmaQJYg1nirHoWSC6G38Cjsk9pZBzEaNrGXKqTsvAzbyES\"]},\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0x90a3995645af7562d84b9d69363ffa5ae7217714ab61e951bf7bc450f40e4061\",\"urls\":[\"bzz-raw://216ef9d6b614db4eb46970b4e84903f2534a45572dd30a79f0041f1a5830f436\",\"dweb:/ipfs/QmNPrJ4MWKUAWzKXpUqeyKRUfosaoANZAqXgvepdrCwZAG\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/ownership/Ownable.sol\":{\"keccak256\":\"0x6fb9d7889769d7cc161225f9ef7a90e468ba9788b253816f8d8b6894d3472c24\",\"urls\":[\"bzz-raw://cf4c00fc3c37cc5acf0c82ec6fd97bab67d72c2567fdc0ebf023d9c09b30a08e\",\"dweb:/ipfs/Qmb7TChG6DsEDX7LooJ4vmxot19f7VXX8S1zUGPeJTWbwZ\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzz-raw://59fd025151435da35faa8093a5c7a17de02de9d08ad27275c5cdf05050820d91\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]}},\"version\":1}",
538
+ "bytecode": "0x60806040523480156200001157600080fd5b506040516200399e3803806200399e8339810160408190526200003491620001e2565b600080546001600160a01b0319166001600160a01b03841617815562000059620001be565b600180546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506003805460ff19166001179055604051620000c59060200162000391565b60408051601f1981840301815290829052620000e4916020016200037c565b60408051601f1981840301815282825280516020918201208383018352601484527f5369676e65644f7065726174696f6e50726f787900000000000000000000000093820193909352815180830183526003815262312e3160e81b9082015290516200019a92917fcefe97a0ba2f870a5405632ee9957acc8f7015bb8dbd346fb5ce3f06f3571dc3917f722c0e0c80487266e8c6a45e3a1a803aab23378a9c32e6ebe029d4fad7bfc965918691309101620003df565b604051602081830303815290604052805190602001206002819055505050620004b2565b3390565b8051620001cf816200048d565b92915050565b8051620001cf81620004a7565b60008060408385031215620001f657600080fd5b6000620002048585620001c2565b92505060206200021785828601620001d5565b9150509250929050565b6200022c816200043e565b82525050565b6200022c816200044b565b60006200024a8262000435565b62000256818562000439565b9350620002688185602086016200045a565b9290920192915050565b600062000281600c8362000439565b6b1cdd1c9a5b99c81b985b594b60a21b8152600c0192915050565b6000620002ab60198362000439565b7f6164647265737320766572696679696e67436f6e747261637400000000000000815260190192915050565b6000620002e660108362000439565b6f1d5a5b9d0c8d4d8818da185a5b92590b60821b815260100192915050565b60006200031460018362000439565b602960f81b815260010192915050565b600062000333600f8362000439565b6e1cdd1c9a5b99c81d995c9cda5bdb8b608a1b8152600f0192915050565b600062000360600d8362000439565b6c08a92a06e626488dedac2d2dc5609b1b8152600d0192915050565b60006200038a82846200023d565b9392505050565b60006200039e8262000351565b9150620003ab8262000272565b9150620003b88262000324565b9150620003c582620002d7565b9150620003d2826200029c565b9150620001cf8262000305565b60a08101620003ef828862000232565b620003fe602083018762000232565b6200040d604083018662000232565b6200041c606083018562000232565b6200042b608083018462000221565b9695505050505050565b5190565b919050565b6000620001cf826200044e565b90565b6001600160a01b031690565b60005b83811015620004775781810151838201526020016200045d565b8381111562000487576000848401525b50505050565b62000498816200043e565b8114620004a457600080fd5b50565b62000498816200044b565b6134dc80620004c26000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638da5cb5b1161008c578063baf7413f11610066578063baf7413f1461018c578063e306f7791461019f578063f2fde38b146101b4578063f72ac9cb146101c7576100df565b80638da5cb5b1461015c5780638f32d59b146101715780639ef90ea214610179576100df565b80633b84a304116100bd5780633b84a304146101145780635b9ddfdc14610134578063715018a614610154576100df565b806310b9e583146100e457806315c14a4a146100ee57806330e4a7841461010c575b600080fd5b6100ec6101cf565b005b6100f6610279565b6040516101039190613279565b60405180910390f35b6100ec610295565b6101276101223660046122e0565b61032f565b60405161010391906130da565b610147610142366004612451565b6103d3565b6040516101039190613110565b6100ec6103e8565b610164610495565b6040516101039190613088565b6101476104b1565b6100ec610187366004612315565b6104f1565b6100ec61019a3660046123a9565b610b86565b6101a7610c7f565b604051610103919061311e565b6100ec6101c23660046122c2565b610c85565b610147610ccf565b6101d76104b1565b610216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020d906132b8565b60405180910390fd5b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f800e9acf7ef6d84d7bc26116f2ecb9d8fc6e4a2562cda6d1c411f66ea72054819061026f90600090613110565b60405180910390a1565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b61029d6104b1565b6102d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020d906132b8565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556040517f800e9acf7ef6d84d7bc26116f2ecb9d8fc6e4a2562cda6d1c411f66ea72054819161026f91613110565b6060600082519050606081604051908082528060200260200182016040528015610363578160200160208202803883390190505b50905060005b828110156103c9576004600086838151811061038157fe5b6020026020010151815260200190815260200160002060009054906101000a900460ff168282815181106103b157fe5b91151560209283029190910190910152600101610369565b509150505b919050565b60046020526000908152604090205460ff1681565b6103f06104b1565b610426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020d906132b8565b60015460405160009173ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60015473ffffffffffffffffffffffffffffffffffffffff1690565b60015460009073ffffffffffffffffffffffffffffffffffffffff166104d5610cd8565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6003546105429060ff167f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f436f6e7472616374206973206e6f74206f7065726174696f6e616c0000000000610cdc565b6000805b8251811015610aa757610557611d04565b83828151811061056357fe5b602002602001015190506105d48160200151600001516000148061058c57506020820151514211155b7f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f5369676e6564206f7065726174696f6e2069732065787069726564000000000085610d6b565b6020810151604001516106689073ffffffffffffffffffffffffffffffffffffffff161580610620575060208201516040015173ffffffffffffffffffffffffffffffffffffffff1633145b7f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f4f7065726174696f6e2073656e646572206d69736d617463680000000000000085610d6b565b6040810151513390156107f057600061068388888588610e09565b6000818152600460205260409020549091506106e59060ff16157f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f4861736820616c72656164792075736564206f722063616e63656c656400000084610f24565b6106f3818460400151610f86565b91506107768273ffffffffffffffffffffffffffffffffffffffff1684602001516060015173ffffffffffffffffffffffffffffffffffffffff16147f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f496e76616c6964207369676e6174757265000000000000000000000000000000610cdc565b60008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905551339173ffffffffffffffffffffffffffffffffffffffff85169184917fc567efce0a7476d41074b5c204ed0e44fd548b306cf1dc0c27b8cfac27bc0c2d91a4505b815160009061080690869063ffffffff6111b916565b9050845b81811015610a9a5761081a611d2b565b88828151811061082657fe5b602002602001015190506108558a82602001518151811061084357fe5b602002602001015160000151856111ff565b60028151600881111561086457fe5b14156108825761087d8a8260c001518151811061084357fe5b610a91565b6108dd60068251600881111561089457fe5b14157f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f43616e6e6f7420706572666f726d206c69717569646174696f6e730000000000610cdc565b6005815160088111156108ec57fe5b14801561099d575060005460a08201516040517ff1061ba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163f1061ba89161094d91600401613088565b60206040518083038186803b15801561096557600080fd5b505afa158015610979573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061099d9190810190612433565b15610a91576000546040517f052f72d7000000000000000000000000000000000000000000000000000000008152610a919173ffffffffffffffffffffffffffffffffffffffff169063052f72d7906109fa903390600401613096565b60206040518083038186803b158015610a1257600080fd5b505afa158015610a26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a4a9190810190612433565b7f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f556e7065726d697373696f6e6564207472616465206f70657261746f72000000610cdc565b5060010161080a565b5093505050600101610546565b50610af6835182147f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f4e6f7420616c6c20616374696f6e7320617265207369676e6564000000000000610cdc565b6000546040517fa67a6a4500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063a67a6a4590610b4e90879087906004016130eb565b600060405180830381600087803b158015610b6857600080fd5b505af1158015610b7c573d6000803e3d6000fd5b5050505050505050565b6000610b958484846000610e09565b9050610c183373ffffffffffffffffffffffffffffffffffffffff1683602001516060015173ffffffffffffffffffffffffffffffffffffffff16147f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f43616e63656c6572206d757374206265207369676e6572000000000000000000610cdc565b60008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905551339183917feb98d4ec98d06fd7735ff893b47d492a6f12700b6093a6c5bd5a932608727afb9190a350505050565b60025481565b610c8d6104b1565b610cc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020d906132b8565b610ccc816113fa565b50565b60035460ff1681565b3390565b82610d6657610cea826114d5565b7f3a20000000000000000000000000000000000000000000000000000000000000610d14836114d5565b604051602001610d2693929190612ea7565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261020d91600401613287565b505050565b83610e0357610d79836114d5565b7f3a20000000000000000000000000000000000000000000000000000000000000610da3846114d5565b7f203c000000000000000000000000000000000000000000000000000000000000610dcd8561158b565b604051610d269594939291907f3e0000000000000000000000000000000000000000000000000000000000000090602001612ecf565b50505050565b600080610e188686868661169a565b90506000604051602001610e2b90612f8b565b604051602081830303815290604052604051602001610e4990612fd8565b604051602081830303815290604052604051602001610e6790613051565b60408051601f1981840301815290829052610e86939291602001612f67565b60405160208183030381529060405280519060200120828660200151604051602001610eb493929190613178565b60408051601f19818403018152908290528051602091820120600254909350610f01927f190100000000000000000000000000000000000000000000000000000000000092859101612e4f565b60405160208183030381529060405280519060200120925050505b949350505050565b83610e0357610f32836114d5565b7f3a20000000000000000000000000000000000000000000000000000000000000610f5c846114d5565b7f203c000000000000000000000000000000000000000000000000000000000000610dcd856117ca565b6000610fd760428351147f54797065645369676e61747572650000000000000000000000000000000000007f496e76616c6964207369676e6174757265206c656e6774680000000000000000610cdc565b602082015160408301516060840151600081901a9060011a61103d600382107f54797065645369676e61747572650000000000000000000000000000000000007f496e76616c6964207369676e6174757265207479706500000000000000000000610cdc565b60008160ff16600381111561104e57fe5b905060008082600381111561105f57fe5b141561106c57508761115b565b600182600381111561107a57fe5b14156110e5576040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250896040516020016110c8929190612f2d565b60405160208183030381529060405280519060200120905061115b565b60028260038111156110f357fe5b146110fa57fe5b6040518060400160405280601b81526020017f19457468657265756d205369676e6564204d6573736167653a0a20000000000081525089604051602001611142929190612f2d565b6040516020818303038152906040528051906020012090505b6001818588886040516000815260200160405260405161117e9493929190613244565b6020604051602081039080840390855afa1580156111a0573d6000803e3d6000fd5b5050506020604051035196505050505050505b92915050565b6000828201838110156111f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020d906132a8565b9392505050565b60003373ffffffffffffffffffffffffffffffffffffffff8416148061125057508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806112fe57506000546040517f3a031bf000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633a031bf0906112ae90869033906004016130bf565b60206040518083038186803b1580156112c657600080fd5b505afa1580156112da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112fe9190810190612433565b806113ac57506000546040517f3a031bf000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633a031bf09061135c90869086906004016130a4565b60206040518083038186803b15801561137457600080fd5b505afa158015611388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113ac9190810190612433565b9050610d66817f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f5369676e6572206e6f7420617574686f72697a656400000000000000000000008561192d565b73ffffffffffffffffffffffffffffffffffffffff8116611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020d90613298565b60015460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b606080826040516020016114e99190612e86565b60408051601f19818403018152919052905060205b80156115745781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019082908290811061153757fe5b01602001517fff00000000000000000000000000000000000000000000000000000000000000161561156f57600101815290506103ce565b6114fe565b505060408051600081526020810190915292915050565b6060816115cc575060408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201526103ce565b8160005b81156115e457600101600a820491506115d0565b6060816040519080825280601f01601f191660200182016040528015611611576020820181803883390190505b508593509050815b8015611691577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600a840660300160f81b82828151811061165757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350611619565b50949350505050565b6000606083600001516040519080825280602002602001820160405280156116cc578160200160208202803883390190505b50905060005b8451811015611797576116e3611d2b565b86828601815181106116f157fe5b60200260200101519050611703611d8a565b600082516117109061198f565b600281111561171b57fe5b1461173d57888260c001518151811061173057fe5b6020026020010151611752565b60408051808201909152600080825260208201525b9050611776828a84602001518151811061176857fe5b6020026020010151836119fd565b84848151811061178257fe5b602090810291909101015250506001016116d2565b50806040516020016117a99190612e43565b60405160208183030381529060405280519060200120915050949350505050565b6040805160428082526080820190925260609183918391602082018180388339019050509050603060f81b8160008151811061180257fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b8160018151811061184357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b60208110156103c9576002810261188e600f8516611ae2565b83826041038151811061189d57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c93506118df600f8516611ae2565b8382604003815181106118ee57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c91600101611875565b83610e035761193b836114d5565b7f3a20000000000000000000000000000000000000000000000000000000000000611965846114d5565b7f203c000000000000000000000000000000000000000000000000000000000000610dcd85611b04565b6000600282600881111561199f57fe5b14806119b6575060058260088111156119b457fe5b145b156119c3575060016103ce565b60068260088111156119d157fe5b14806119e8575060078260088111156119e657fe5b145b156119f5575060026103ce565b506000919050565b6000604051602001611a0e90612fd8565b604051602081830303815290604052604051602001611a2c90613051565b60408051601f1981840301815290829052611a4a9291602001612f4f565b60405160208183030381529060405280519060200120846000015184600001518560200151611a7c8860400151611c7b565b606089015160808a015160a08b0151895160208b015160e08e0151604051611aa49190612e9b565b604051908190038120611ac39b9a9998979695949392916020016131a0565b6040516020818303038152906040528051906020012090509392505050565b6000600a821015611afa57506030810160f81b6103ce565b5060570160f81b90565b60408051602a808252606082810190935273ffffffffffffffffffffffffffffffffffffffff8416918391602082018180388339019050509050603060f81b81600081518110611b5057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b81600181518110611b9157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b60148110156103c95760028102611bdc600f8516611ae2565b838260290381518110611beb57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c9350611c2d600f8516611ae2565b838260280381518110611c3c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c91600101611bc3565b6000604051602001611c8c90613051565b60408051601f1981840301815290829052611ca991602001612e9b565b604051602081830303815290604052805190602001208260000151836020015184604001518560600151604051602001611ce795949392919061312c565b604051602081830303815290604052805190602001209050919050565b604051806060016040528060008152602001611d1e611da1565b8152602001606081525090565b604080516101008101825260008082526020820152908101611d4b611df5565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b604080518082019091526000808252602082015290565b60405180608001604052806000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b604080516080810190915260008082526020820190815260200160008152602001600081525090565b80356111b381613459565b600082601f830112611e3a57600080fd5b8135611e4d611e48826132ef565b6132c8565b91508181835260208401935060208101905083856020840282011115611e7257600080fd5b60005b83811015611e9e5781611e888882611fea565b8452506020928301929190910190600101611e75565b5050505092915050565b600082601f830112611eb957600080fd5b8135611ec7611e48826132ef565b81815260209384019390925082018360005b83811015611e9e5781358601611eef888261205a565b8452506020928301929190910190600101611ed9565b600082601f830112611f1657600080fd5b8135611f24611e48826132ef565b81815260209384019390925082018360005b83811015611e9e5781358601611f4c88826121a5565b8452506020928301929190910190600101611f36565b600082601f830112611f7357600080fd5b8135611f81611e48826132ef565b91508181835260208401935060208101905083856040840282011115611fa657600080fd5b60005b83811015611e9e5781611fbc8882612218565b84525060209092019160409190910190600101611fa9565b80356111b38161346d565b80516111b38161346d565b80356111b381613476565b600082601f83011261200657600080fd5b8135612014611e4882613310565b9150808252602083016020830185838301111561203057600080fd5b61203b838284613403565b50505092915050565b80356111b38161347f565b80356111b38161348c565b6000610160828403121561206d57600080fd5b6120786101006132c8565b905060006120868484612044565b825250602061209784848301611fea565b60208301525060406120ab84828501612136565b60408301525060c06120bf84828501611fea565b60608301525060e06120d384828501611fea565b6080830152506101006120e884828501611e1e565b60a0830152506101206120fd84828501611fea565b60c08301525061014082013567ffffffffffffffff81111561211e57600080fd5b61212a84828501611ff5565b60e08301525092915050565b60006080828403121561214857600080fd5b61215260806132c8565b905060006121608484611fd4565b82525060206121718484830161204f565b60208301525060406121858482850161204f565b604083015250606061219984828501611fea565b60608301525092915050565b600060c082840312156121b757600080fd5b6121c160606132c8565b905060006121cf8484611fea565b82525060206121e08484830161225f565b60208301525060a082013567ffffffffffffffff81111561220057600080fd5b61220c84828501611ff5565b60408301525092915050565b60006040828403121561222a57600080fd5b61223460406132c8565b905060006122428484611e1e565b825250602061225384848301611fea565b60208301525092915050565b60006080828403121561227157600080fd5b61227b60806132c8565b905060006122898484611fea565b825250602061229a84848301611fea565b60208301525060406122ae84828501611e1e565b604083015250606061219984828501611e1e565b6000602082840312156122d457600080fd5b6000610f1c8484611e1e565b6000602082840312156122f257600080fd5b813567ffffffffffffffff81111561230957600080fd5b610f1c84828501611e29565b60008060006060848603121561232a57600080fd5b833567ffffffffffffffff81111561234157600080fd5b61234d86828701611f62565b935050602084013567ffffffffffffffff81111561236a57600080fd5b61237686828701611ea8565b925050604084013567ffffffffffffffff81111561239357600080fd5b61239f86828701611f05565b9150509250925092565b6000806000606084860312156123be57600080fd5b833567ffffffffffffffff8111156123d557600080fd5b6123e186828701611f62565b935050602084013567ffffffffffffffff8111156123fe57600080fd5b61240a86828701611ea8565b925050604084013567ffffffffffffffff81111561242757600080fd5b61239f868287016121a5565b60006020828403121561244557600080fd5b6000610f1c8484611fdf565b60006020828403121561246357600080fd5b6000610f1c8484611fea565b600061247b838361262a565b505060200190565b600061247b8383612650565b60006111f88383612cd7565b60006124a78383612dcc565b505060400190565b6124b8816133db565b82525050565b6124b88161334b565b60006124d28261333e565b6124dc8185613342565b93506124e783613338565b8060005b838110156125155781516124ff888261246f565b975061250a83613338565b9250506001016124eb565b509495945050505050565b600061252b8261333e565b61253581856103ce565b935061254083613338565b8060005b838110156125155781516125588882612483565b975061256383613338565b925050600101612544565b60006125798261333e565b6125838185613342565b93508360208202850161259585613338565b8060005b858110156125cf57848403895281516125b2858261248f565b94506125bd83613338565b60209a909a0199925050600101612599565b5091979650505050505050565b60006125e78261333e565b6125f18185613342565b93506125fc83613338565b8060005b83811015612515578151612614888261249b565b975061261f83613338565b925050600101612600565b6124b881613356565b6124b861263f8261335b565b6133a5565b6124b861263f82613380565b6124b8816133a5565b6124b861263f826133a5565b60006126708261333e565b61267a81856103ce565b935061268a81856020860161340f565b9290920192915050565b600061269f8261333e565b6126a98185613342565b93506126b981856020860161340f565b6126c28161343b565b9093019392505050565b6124b8816133e2565b6124b8816133ed565b6124b8816133f8565b60006126f46013836103ce565b7f75696e74382064656e6f6d696e6174696f6e2c00000000000000000000000000815260130192915050565b600061272d600f836103ce565b7f616464726573732073656e6465722c00000000000000000000000000000000008152600f0192915050565b6000612766600a836103ce565b7f4f7065726174696f6e28000000000000000000000000000000000000000000008152600a0192915050565b600061279f602683613342565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181527f6464726573730000000000000000000000000000000000000000000000000000602082015260400192915050565b60006127fe6011836103ce565b7f416374696f6e5b5d20616374696f6e732c000000000000000000000000000000815260110192915050565b6000612837600a836103ce565b7f626f6f6c207369676e2c000000000000000000000000000000000000000000008152600a0192915050565b6000612870601b83613342565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b60006128a96018836103ce565b7f75696e74323536207072696d6172794d61726b657449642c0000000000000000815260180192915050565b60006128e2600d836103ce565b7f75696e743235362076616c7565000000000000000000000000000000000000008152600d0192915050565b600061291b6001836103ce565b7f2900000000000000000000000000000000000000000000000000000000000000815260010192915050565b60006129546007836103ce565b7f416374696f6e2800000000000000000000000000000000000000000000000000815260070192915050565b600061298d601b836103ce565b7f75696e74323536206f746865724163636f756e744e756d6265722c00000000008152601b0192915050565b60006129c6600c836103ce565b7f4173736574416d6f756e742800000000000000000000000000000000000000008152600c0192915050565b60006129ff601a836103ce565b7f61646472657373206f746865724163636f756e744f776e65722c0000000000008152601a0192915050565b6000612a38600d836103ce565b7f75696e743235362073616c742c000000000000000000000000000000000000008152600d0192915050565b6000612a716015836103ce565b7f61646472657373206163636f756e744f776e65722c0000000000000000000000815260150192915050565b6000612aaa600e836103ce565b7f61646472657373207369676e65720000000000000000000000000000000000008152600e0192915050565b6000612ae3600a836103ce565b7f62797465732064617461000000000000000000000000000000000000000000008152600a0192915050565b6000612b1c602083613342565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b6000612b55600a836103ce565b7f75696e7438207265662c000000000000000000000000000000000000000000008152600a0192915050565b6000612b8e6018836103ce565b7f4173736574416d6f756e74206173736574416d6f756e742c0000000000000000815260180192915050565b6000612bc76013836103ce565b7f75696e743235362065787069726174696f6e2c00000000000000000000000000815260130192915050565b6000612c006016836103ce565b7f75696e74323536206163636f756e744e756d6265722c00000000000000000000815260160192915050565b6000612c396011836103ce565b7f75696e743820616374696f6e547970652c000000000000000000000000000000815260110192915050565b6000612c726015836103ce565b7f61646472657373206f74686572416464726573732c0000000000000000000000815260150192915050565b6000612cab601a836103ce565b7f75696e74323536207365636f6e646172794d61726b657449642c0000000000008152601a0192915050565b8051600090610160840190612cec85826126d5565b506020830151612cff6020860182612650565b506040830151612d126040860182612d82565b506060830151612d2560c0860182612650565b506080830151612d3860e0860182612650565b5060a0830151612d4c6101008601826124be565b5060c0830151612d60610120860182612650565b5060e0830151848203610140860152612d798282612694565b95945050505050565b80516080830190612d93848261262a565b506020820151612da660208501826126de565b506040820151612db960408501826126de565b506060820151610e036060850182612650565b80516040830190612ddd84826124be565b506020820151610e036020850182612650565b80516080830190612e018482612650565b506020820151612e146020850182612650565b506040820151612e2760408501826124be565b506060820151610e0360608501826124be565b6124b8816133d5565b60006111f88284612520565b6000612e5b8286612644565b600282019150612e6b8285612659565b602082019150612e7b8284612659565b506020019392505050565b6000612e928284612659565b50602001919050565b60006111f88284612665565b6000612eb38286612665565b9150612ebf8285612644565b600282019150612d798284612665565b6000612edb8289612665565b9150612ee78288612644565b600282019150612ef78287612665565b9150612f038286612644565b600282019150612f138285612665565b9150612f1f8284612633565b506001019695505050505050565b6000612f398285612665565b9150612f458284612659565b5060200192915050565b6000612f5b8285612665565b9150610f1c8284612665565b6000612f738286612665565b9150612f7f8285612665565b9150612d798284612665565b6000612f9682612759565b9150612fa1826127f1565b9150612fac82612bba565b9150612fb782612a2b565b9150612fc282612720565b9150612fcd82612a9d565b91506111b38261290e565b6000612fe382612947565b9150612fee82612c2c565b9150612ff982612a64565b915061300482612bf3565b915061300f82612b81565b915061301a8261289c565b915061302582612c9e565b915061303082612c65565b915061303b826129f2565b915061304682612980565b9150612fcd82612ad6565b600061305c826129b9565b91506130678261282a565b9150613072826126e7565b915061307d82612b48565b9150612fcd826128d5565b602081016111b382846124be565b602081016111b382846124af565b604081016130b282856124be565b6111f860208301846124be565b604081016130cd82856124be565b6111f860208301846124af565b602080825281016111f881846124c7565b604080825281016130fc81856125dc565b90508181036020830152610f1c818461256e565b602081016111b3828461262a565b602081016111b38284612650565b60a0810161313a8288612650565b613147602083018761262a565b61315460408301866126de565b61316160608301856126de565b61316e6080830184612650565b9695505050505050565b60c081016131868286612650565b6131936020830185612650565b610f1c6040830184612df0565b61016081016131af828e612650565b6131bc602083018d6126d5565b6131c9604083018c6124be565b6131d6606083018b612650565b6131e3608083018a612650565b6131f060a0830189612650565b6131fd60c0830188612650565b61320a60e08301876124be565b6132186101008301866124be565b613226610120830185612650565b613234610140830184612650565b9c9b505050505050505050505050565b608081016132528287612650565b61325f6020830186612e3a565b61326c6040830185612650565b612d796060830184612650565b602081016111b382846126cc565b602080825281016111f88184612694565b602080825281016111b381612792565b602080825281016111b381612863565b602080825281016111b381612b0f565b60405181810167ffffffffffffffff811182821017156132e757600080fd5b604052919050565b600067ffffffffffffffff82111561330657600080fd5b5060209081020190565b600067ffffffffffffffff82111561332757600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b60006111b3826133bc565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b90565b806103ce81613445565b806103ce8161344f565b73ffffffffffffffffffffffffffffffffffffffff1690565b60ff1690565b60006111b3825b60006111b38261334b565b60006111b3826133a8565b60006111b3826133b2565b82818337506000910152565b60005b8381101561342a578181015183820152602001613412565b83811115610e035750506000910152565b601f01601f191690565b60098110610ccc57fe5b60028110610ccc57fe5b6134628161334b565b8114610ccc57600080fd5b61346281613356565b613462816133a5565b60098110610ccc57600080fd5b60028110610ccc57600080fdfea365627a7a723158206a9bdb17deb9c5dbb84683baa65670e3aaf47bd6818c55f98bc6526fdee77ffc6c6578706572696d656e74616cf564736f6c63430005100040",
539
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100df5760003560e01c80638da5cb5b1161008c578063baf7413f11610066578063baf7413f1461018c578063e306f7791461019f578063f2fde38b146101b4578063f72ac9cb146101c7576100df565b80638da5cb5b1461015c5780638f32d59b146101715780639ef90ea214610179576100df565b80633b84a304116100bd5780633b84a304146101145780635b9ddfdc14610134578063715018a614610154576100df565b806310b9e583146100e457806315c14a4a146100ee57806330e4a7841461010c575b600080fd5b6100ec6101cf565b005b6100f6610279565b6040516101039190613279565b60405180910390f35b6100ec610295565b6101276101223660046122e0565b61032f565b60405161010391906130da565b610147610142366004612451565b6103d3565b6040516101039190613110565b6100ec6103e8565b610164610495565b6040516101039190613088565b6101476104b1565b6100ec610187366004612315565b6104f1565b6100ec61019a3660046123a9565b610b86565b6101a7610c7f565b604051610103919061311e565b6100ec6101c23660046122c2565b610c85565b610147610ccf565b6101d76104b1565b610216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020d906132b8565b60405180910390fd5b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f800e9acf7ef6d84d7bc26116f2ecb9d8fc6e4a2562cda6d1c411f66ea72054819061026f90600090613110565b60405180910390a1565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b61029d6104b1565b6102d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020d906132b8565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556040517f800e9acf7ef6d84d7bc26116f2ecb9d8fc6e4a2562cda6d1c411f66ea72054819161026f91613110565b6060600082519050606081604051908082528060200260200182016040528015610363578160200160208202803883390190505b50905060005b828110156103c9576004600086838151811061038157fe5b6020026020010151815260200190815260200160002060009054906101000a900460ff168282815181106103b157fe5b91151560209283029190910190910152600101610369565b509150505b919050565b60046020526000908152604090205460ff1681565b6103f06104b1565b610426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020d906132b8565b60015460405160009173ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60015473ffffffffffffffffffffffffffffffffffffffff1690565b60015460009073ffffffffffffffffffffffffffffffffffffffff166104d5610cd8565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6003546105429060ff167f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f436f6e7472616374206973206e6f74206f7065726174696f6e616c0000000000610cdc565b6000805b8251811015610aa757610557611d04565b83828151811061056357fe5b602002602001015190506105d48160200151600001516000148061058c57506020820151514211155b7f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f5369676e6564206f7065726174696f6e2069732065787069726564000000000085610d6b565b6020810151604001516106689073ffffffffffffffffffffffffffffffffffffffff161580610620575060208201516040015173ffffffffffffffffffffffffffffffffffffffff1633145b7f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f4f7065726174696f6e2073656e646572206d69736d617463680000000000000085610d6b565b6040810151513390156107f057600061068388888588610e09565b6000818152600460205260409020549091506106e59060ff16157f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f4861736820616c72656164792075736564206f722063616e63656c656400000084610f24565b6106f3818460400151610f86565b91506107768273ffffffffffffffffffffffffffffffffffffffff1684602001516060015173ffffffffffffffffffffffffffffffffffffffff16147f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f496e76616c6964207369676e6174757265000000000000000000000000000000610cdc565b60008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905551339173ffffffffffffffffffffffffffffffffffffffff85169184917fc567efce0a7476d41074b5c204ed0e44fd548b306cf1dc0c27b8cfac27bc0c2d91a4505b815160009061080690869063ffffffff6111b916565b9050845b81811015610a9a5761081a611d2b565b88828151811061082657fe5b602002602001015190506108558a82602001518151811061084357fe5b602002602001015160000151856111ff565b60028151600881111561086457fe5b14156108825761087d8a8260c001518151811061084357fe5b610a91565b6108dd60068251600881111561089457fe5b14157f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f43616e6e6f7420706572666f726d206c69717569646174696f6e730000000000610cdc565b6005815160088111156108ec57fe5b14801561099d575060005460a08201516040517ff1061ba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163f1061ba89161094d91600401613088565b60206040518083038186803b15801561096557600080fd5b505afa158015610979573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061099d9190810190612433565b15610a91576000546040517f052f72d7000000000000000000000000000000000000000000000000000000008152610a919173ffffffffffffffffffffffffffffffffffffffff169063052f72d7906109fa903390600401613096565b60206040518083038186803b158015610a1257600080fd5b505afa158015610a26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a4a9190810190612433565b7f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f556e7065726d697373696f6e6564207472616465206f70657261746f72000000610cdc565b5060010161080a565b5093505050600101610546565b50610af6835182147f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f4e6f7420616c6c20616374696f6e7320617265207369676e6564000000000000610cdc565b6000546040517fa67a6a4500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063a67a6a4590610b4e90879087906004016130eb565b600060405180830381600087803b158015610b6857600080fd5b505af1158015610b7c573d6000803e3d6000fd5b5050505050505050565b6000610b958484846000610e09565b9050610c183373ffffffffffffffffffffffffffffffffffffffff1683602001516060015173ffffffffffffffffffffffffffffffffffffffff16147f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f43616e63656c6572206d757374206265207369676e6572000000000000000000610cdc565b60008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905551339183917feb98d4ec98d06fd7735ff893b47d492a6f12700b6093a6c5bd5a932608727afb9190a350505050565b60025481565b610c8d6104b1565b610cc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020d906132b8565b610ccc816113fa565b50565b60035460ff1681565b3390565b82610d6657610cea826114d5565b7f3a20000000000000000000000000000000000000000000000000000000000000610d14836114d5565b604051602001610d2693929190612ea7565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261020d91600401613287565b505050565b83610e0357610d79836114d5565b7f3a20000000000000000000000000000000000000000000000000000000000000610da3846114d5565b7f203c000000000000000000000000000000000000000000000000000000000000610dcd8561158b565b604051610d269594939291907f3e0000000000000000000000000000000000000000000000000000000000000090602001612ecf565b50505050565b600080610e188686868661169a565b90506000604051602001610e2b90612f8b565b604051602081830303815290604052604051602001610e4990612fd8565b604051602081830303815290604052604051602001610e6790613051565b60408051601f1981840301815290829052610e86939291602001612f67565b60405160208183030381529060405280519060200120828660200151604051602001610eb493929190613178565b60408051601f19818403018152908290528051602091820120600254909350610f01927f190100000000000000000000000000000000000000000000000000000000000092859101612e4f565b60405160208183030381529060405280519060200120925050505b949350505050565b83610e0357610f32836114d5565b7f3a20000000000000000000000000000000000000000000000000000000000000610f5c846114d5565b7f203c000000000000000000000000000000000000000000000000000000000000610dcd856117ca565b6000610fd760428351147f54797065645369676e61747572650000000000000000000000000000000000007f496e76616c6964207369676e6174757265206c656e6774680000000000000000610cdc565b602082015160408301516060840151600081901a9060011a61103d600382107f54797065645369676e61747572650000000000000000000000000000000000007f496e76616c6964207369676e6174757265207479706500000000000000000000610cdc565b60008160ff16600381111561104e57fe5b905060008082600381111561105f57fe5b141561106c57508761115b565b600182600381111561107a57fe5b14156110e5576040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250896040516020016110c8929190612f2d565b60405160208183030381529060405280519060200120905061115b565b60028260038111156110f357fe5b146110fa57fe5b6040518060400160405280601b81526020017f19457468657265756d205369676e6564204d6573736167653a0a20000000000081525089604051602001611142929190612f2d565b6040516020818303038152906040528051906020012090505b6001818588886040516000815260200160405260405161117e9493929190613244565b6020604051602081039080840390855afa1580156111a0573d6000803e3d6000fd5b5050506020604051035196505050505050505b92915050565b6000828201838110156111f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020d906132a8565b9392505050565b60003373ffffffffffffffffffffffffffffffffffffffff8416148061125057508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806112fe57506000546040517f3a031bf000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633a031bf0906112ae90869033906004016130bf565b60206040518083038186803b1580156112c657600080fd5b505afa1580156112da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112fe9190810190612433565b806113ac57506000546040517f3a031bf000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633a031bf09061135c90869086906004016130a4565b60206040518083038186803b15801561137457600080fd5b505afa158015611388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113ac9190810190612433565b9050610d66817f5369676e65644f7065726174696f6e50726f78790000000000000000000000007f5369676e6572206e6f7420617574686f72697a656400000000000000000000008561192d565b73ffffffffffffffffffffffffffffffffffffffff8116611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020d90613298565b60015460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b606080826040516020016114e99190612e86565b60408051601f19818403018152919052905060205b80156115745781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019082908290811061153757fe5b01602001517fff00000000000000000000000000000000000000000000000000000000000000161561156f57600101815290506103ce565b6114fe565b505060408051600081526020810190915292915050565b6060816115cc575060408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201526103ce565b8160005b81156115e457600101600a820491506115d0565b6060816040519080825280601f01601f191660200182016040528015611611576020820181803883390190505b508593509050815b8015611691577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600a840660300160f81b82828151811061165757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350611619565b50949350505050565b6000606083600001516040519080825280602002602001820160405280156116cc578160200160208202803883390190505b50905060005b8451811015611797576116e3611d2b565b86828601815181106116f157fe5b60200260200101519050611703611d8a565b600082516117109061198f565b600281111561171b57fe5b1461173d57888260c001518151811061173057fe5b6020026020010151611752565b60408051808201909152600080825260208201525b9050611776828a84602001518151811061176857fe5b6020026020010151836119fd565b84848151811061178257fe5b602090810291909101015250506001016116d2565b50806040516020016117a99190612e43565b60405160208183030381529060405280519060200120915050949350505050565b6040805160428082526080820190925260609183918391602082018180388339019050509050603060f81b8160008151811061180257fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b8160018151811061184357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b60208110156103c9576002810261188e600f8516611ae2565b83826041038151811061189d57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c93506118df600f8516611ae2565b8382604003815181106118ee57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c91600101611875565b83610e035761193b836114d5565b7f3a20000000000000000000000000000000000000000000000000000000000000611965846114d5565b7f203c000000000000000000000000000000000000000000000000000000000000610dcd85611b04565b6000600282600881111561199f57fe5b14806119b6575060058260088111156119b457fe5b145b156119c3575060016103ce565b60068260088111156119d157fe5b14806119e8575060078260088111156119e657fe5b145b156119f5575060026103ce565b506000919050565b6000604051602001611a0e90612fd8565b604051602081830303815290604052604051602001611a2c90613051565b60408051601f1981840301815290829052611a4a9291602001612f4f565b60405160208183030381529060405280519060200120846000015184600001518560200151611a7c8860400151611c7b565b606089015160808a015160a08b0151895160208b015160e08e0151604051611aa49190612e9b565b604051908190038120611ac39b9a9998979695949392916020016131a0565b6040516020818303038152906040528051906020012090509392505050565b6000600a821015611afa57506030810160f81b6103ce565b5060570160f81b90565b60408051602a808252606082810190935273ffffffffffffffffffffffffffffffffffffffff8416918391602082018180388339019050509050603060f81b81600081518110611b5057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b81600181518110611b9157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b60148110156103c95760028102611bdc600f8516611ae2565b838260290381518110611beb57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c9350611c2d600f8516611ae2565b838260280381518110611c3c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c91600101611bc3565b6000604051602001611c8c90613051565b60408051601f1981840301815290829052611ca991602001612e9b565b604051602081830303815290604052805190602001208260000151836020015184604001518560600151604051602001611ce795949392919061312c565b604051602081830303815290604052805190602001209050919050565b604051806060016040528060008152602001611d1e611da1565b8152602001606081525090565b604080516101008101825260008082526020820152908101611d4b611df5565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b604080518082019091526000808252602082015290565b60405180608001604052806000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b604080516080810190915260008082526020820190815260200160008152602001600081525090565b80356111b381613459565b600082601f830112611e3a57600080fd5b8135611e4d611e48826132ef565b6132c8565b91508181835260208401935060208101905083856020840282011115611e7257600080fd5b60005b83811015611e9e5781611e888882611fea565b8452506020928301929190910190600101611e75565b5050505092915050565b600082601f830112611eb957600080fd5b8135611ec7611e48826132ef565b81815260209384019390925082018360005b83811015611e9e5781358601611eef888261205a565b8452506020928301929190910190600101611ed9565b600082601f830112611f1657600080fd5b8135611f24611e48826132ef565b81815260209384019390925082018360005b83811015611e9e5781358601611f4c88826121a5565b8452506020928301929190910190600101611f36565b600082601f830112611f7357600080fd5b8135611f81611e48826132ef565b91508181835260208401935060208101905083856040840282011115611fa657600080fd5b60005b83811015611e9e5781611fbc8882612218565b84525060209092019160409190910190600101611fa9565b80356111b38161346d565b80516111b38161346d565b80356111b381613476565b600082601f83011261200657600080fd5b8135612014611e4882613310565b9150808252602083016020830185838301111561203057600080fd5b61203b838284613403565b50505092915050565b80356111b38161347f565b80356111b38161348c565b6000610160828403121561206d57600080fd5b6120786101006132c8565b905060006120868484612044565b825250602061209784848301611fea565b60208301525060406120ab84828501612136565b60408301525060c06120bf84828501611fea565b60608301525060e06120d384828501611fea565b6080830152506101006120e884828501611e1e565b60a0830152506101206120fd84828501611fea565b60c08301525061014082013567ffffffffffffffff81111561211e57600080fd5b61212a84828501611ff5565b60e08301525092915050565b60006080828403121561214857600080fd5b61215260806132c8565b905060006121608484611fd4565b82525060206121718484830161204f565b60208301525060406121858482850161204f565b604083015250606061219984828501611fea565b60608301525092915050565b600060c082840312156121b757600080fd5b6121c160606132c8565b905060006121cf8484611fea565b82525060206121e08484830161225f565b60208301525060a082013567ffffffffffffffff81111561220057600080fd5b61220c84828501611ff5565b60408301525092915050565b60006040828403121561222a57600080fd5b61223460406132c8565b905060006122428484611e1e565b825250602061225384848301611fea565b60208301525092915050565b60006080828403121561227157600080fd5b61227b60806132c8565b905060006122898484611fea565b825250602061229a84848301611fea565b60208301525060406122ae84828501611e1e565b604083015250606061219984828501611e1e565b6000602082840312156122d457600080fd5b6000610f1c8484611e1e565b6000602082840312156122f257600080fd5b813567ffffffffffffffff81111561230957600080fd5b610f1c84828501611e29565b60008060006060848603121561232a57600080fd5b833567ffffffffffffffff81111561234157600080fd5b61234d86828701611f62565b935050602084013567ffffffffffffffff81111561236a57600080fd5b61237686828701611ea8565b925050604084013567ffffffffffffffff81111561239357600080fd5b61239f86828701611f05565b9150509250925092565b6000806000606084860312156123be57600080fd5b833567ffffffffffffffff8111156123d557600080fd5b6123e186828701611f62565b935050602084013567ffffffffffffffff8111156123fe57600080fd5b61240a86828701611ea8565b925050604084013567ffffffffffffffff81111561242757600080fd5b61239f868287016121a5565b60006020828403121561244557600080fd5b6000610f1c8484611fdf565b60006020828403121561246357600080fd5b6000610f1c8484611fea565b600061247b838361262a565b505060200190565b600061247b8383612650565b60006111f88383612cd7565b60006124a78383612dcc565b505060400190565b6124b8816133db565b82525050565b6124b88161334b565b60006124d28261333e565b6124dc8185613342565b93506124e783613338565b8060005b838110156125155781516124ff888261246f565b975061250a83613338565b9250506001016124eb565b509495945050505050565b600061252b8261333e565b61253581856103ce565b935061254083613338565b8060005b838110156125155781516125588882612483565b975061256383613338565b925050600101612544565b60006125798261333e565b6125838185613342565b93508360208202850161259585613338565b8060005b858110156125cf57848403895281516125b2858261248f565b94506125bd83613338565b60209a909a0199925050600101612599565b5091979650505050505050565b60006125e78261333e565b6125f18185613342565b93506125fc83613338565b8060005b83811015612515578151612614888261249b565b975061261f83613338565b925050600101612600565b6124b881613356565b6124b861263f8261335b565b6133a5565b6124b861263f82613380565b6124b8816133a5565b6124b861263f826133a5565b60006126708261333e565b61267a81856103ce565b935061268a81856020860161340f565b9290920192915050565b600061269f8261333e565b6126a98185613342565b93506126b981856020860161340f565b6126c28161343b565b9093019392505050565b6124b8816133e2565b6124b8816133ed565b6124b8816133f8565b60006126f46013836103ce565b7f75696e74382064656e6f6d696e6174696f6e2c00000000000000000000000000815260130192915050565b600061272d600f836103ce565b7f616464726573732073656e6465722c00000000000000000000000000000000008152600f0192915050565b6000612766600a836103ce565b7f4f7065726174696f6e28000000000000000000000000000000000000000000008152600a0192915050565b600061279f602683613342565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181527f6464726573730000000000000000000000000000000000000000000000000000602082015260400192915050565b60006127fe6011836103ce565b7f416374696f6e5b5d20616374696f6e732c000000000000000000000000000000815260110192915050565b6000612837600a836103ce565b7f626f6f6c207369676e2c000000000000000000000000000000000000000000008152600a0192915050565b6000612870601b83613342565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b60006128a96018836103ce565b7f75696e74323536207072696d6172794d61726b657449642c0000000000000000815260180192915050565b60006128e2600d836103ce565b7f75696e743235362076616c7565000000000000000000000000000000000000008152600d0192915050565b600061291b6001836103ce565b7f2900000000000000000000000000000000000000000000000000000000000000815260010192915050565b60006129546007836103ce565b7f416374696f6e2800000000000000000000000000000000000000000000000000815260070192915050565b600061298d601b836103ce565b7f75696e74323536206f746865724163636f756e744e756d6265722c00000000008152601b0192915050565b60006129c6600c836103ce565b7f4173736574416d6f756e742800000000000000000000000000000000000000008152600c0192915050565b60006129ff601a836103ce565b7f61646472657373206f746865724163636f756e744f776e65722c0000000000008152601a0192915050565b6000612a38600d836103ce565b7f75696e743235362073616c742c000000000000000000000000000000000000008152600d0192915050565b6000612a716015836103ce565b7f61646472657373206163636f756e744f776e65722c0000000000000000000000815260150192915050565b6000612aaa600e836103ce565b7f61646472657373207369676e65720000000000000000000000000000000000008152600e0192915050565b6000612ae3600a836103ce565b7f62797465732064617461000000000000000000000000000000000000000000008152600a0192915050565b6000612b1c602083613342565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b6000612b55600a836103ce565b7f75696e7438207265662c000000000000000000000000000000000000000000008152600a0192915050565b6000612b8e6018836103ce565b7f4173736574416d6f756e74206173736574416d6f756e742c0000000000000000815260180192915050565b6000612bc76013836103ce565b7f75696e743235362065787069726174696f6e2c00000000000000000000000000815260130192915050565b6000612c006016836103ce565b7f75696e74323536206163636f756e744e756d6265722c00000000000000000000815260160192915050565b6000612c396011836103ce565b7f75696e743820616374696f6e547970652c000000000000000000000000000000815260110192915050565b6000612c726015836103ce565b7f61646472657373206f74686572416464726573732c0000000000000000000000815260150192915050565b6000612cab601a836103ce565b7f75696e74323536207365636f6e646172794d61726b657449642c0000000000008152601a0192915050565b8051600090610160840190612cec85826126d5565b506020830151612cff6020860182612650565b506040830151612d126040860182612d82565b506060830151612d2560c0860182612650565b506080830151612d3860e0860182612650565b5060a0830151612d4c6101008601826124be565b5060c0830151612d60610120860182612650565b5060e0830151848203610140860152612d798282612694565b95945050505050565b80516080830190612d93848261262a565b506020820151612da660208501826126de565b506040820151612db960408501826126de565b506060820151610e036060850182612650565b80516040830190612ddd84826124be565b506020820151610e036020850182612650565b80516080830190612e018482612650565b506020820151612e146020850182612650565b506040820151612e2760408501826124be565b506060820151610e0360608501826124be565b6124b8816133d5565b60006111f88284612520565b6000612e5b8286612644565b600282019150612e6b8285612659565b602082019150612e7b8284612659565b506020019392505050565b6000612e928284612659565b50602001919050565b60006111f88284612665565b6000612eb38286612665565b9150612ebf8285612644565b600282019150612d798284612665565b6000612edb8289612665565b9150612ee78288612644565b600282019150612ef78287612665565b9150612f038286612644565b600282019150612f138285612665565b9150612f1f8284612633565b506001019695505050505050565b6000612f398285612665565b9150612f458284612659565b5060200192915050565b6000612f5b8285612665565b9150610f1c8284612665565b6000612f738286612665565b9150612f7f8285612665565b9150612d798284612665565b6000612f9682612759565b9150612fa1826127f1565b9150612fac82612bba565b9150612fb782612a2b565b9150612fc282612720565b9150612fcd82612a9d565b91506111b38261290e565b6000612fe382612947565b9150612fee82612c2c565b9150612ff982612a64565b915061300482612bf3565b915061300f82612b81565b915061301a8261289c565b915061302582612c9e565b915061303082612c65565b915061303b826129f2565b915061304682612980565b9150612fcd82612ad6565b600061305c826129b9565b91506130678261282a565b9150613072826126e7565b915061307d82612b48565b9150612fcd826128d5565b602081016111b382846124be565b602081016111b382846124af565b604081016130b282856124be565b6111f860208301846124be565b604081016130cd82856124be565b6111f860208301846124af565b602080825281016111f881846124c7565b604080825281016130fc81856125dc565b90508181036020830152610f1c818461256e565b602081016111b3828461262a565b602081016111b38284612650565b60a0810161313a8288612650565b613147602083018761262a565b61315460408301866126de565b61316160608301856126de565b61316e6080830184612650565b9695505050505050565b60c081016131868286612650565b6131936020830185612650565b610f1c6040830184612df0565b61016081016131af828e612650565b6131bc602083018d6126d5565b6131c9604083018c6124be565b6131d6606083018b612650565b6131e3608083018a612650565b6131f060a0830189612650565b6131fd60c0830188612650565b61320a60e08301876124be565b6132186101008301866124be565b613226610120830185612650565b613234610140830184612650565b9c9b505050505050505050505050565b608081016132528287612650565b61325f6020830186612e3a565b61326c6040830185612650565b612d796060830184612650565b602081016111b382846126cc565b602080825281016111f88184612694565b602080825281016111b381612792565b602080825281016111b381612863565b602080825281016111b381612b0f565b60405181810167ffffffffffffffff811182821017156132e757600080fd5b604052919050565b600067ffffffffffffffff82111561330657600080fd5b5060209081020190565b600067ffffffffffffffff82111561332757600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b60006111b3826133bc565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b90565b806103ce81613445565b806103ce8161344f565b73ffffffffffffffffffffffffffffffffffffffff1690565b60ff1690565b60006111b3825b60006111b38261334b565b60006111b3826133a8565b60006111b3826133b2565b82818337506000910152565b60005b8381101561342a578181015183820152602001613412565b83811115610e035750506000910152565b601f01601f191690565b60098110610ccc57fe5b60028110610ccc57fe5b6134628161334b565b8114610ccc57600080fd5b61346281613356565b613462816133a5565b60098110610ccc57600080fd5b60028110610ccc57600080fdfea365627a7a723158206a9bdb17deb9c5dbb84683baa65670e3aaf47bd6818c55f98bc6526fdee77ffc6c6578706572696d656e74616cf564736f6c63430005100040",
540
540
  "sourceMap": "1280:15633:33:-;;;5095:491;8:9:-1;5:2;;;30:1;27;20:12;5:2;5095:491:33;;;;;;;;;;;;;;;;;;;;;1293:15:6;:49;;-1:-1:-1;;;;;;1293:49:6;-1:-1:-1;;;;;1293:49:6;;;;;718:12:125;:10;:12::i;:::-;740:6;:18;;-1:-1:-1;;;;;;740:18:125;-1:-1:-1;;;;;740:18:125;;;;;;;;773:43;;740:18;;-1:-1:-1;740:18:125;-1:-1:-1;;773:43:125;;-1:-1:-1;;773:43:125;-1:-1:-1;5243:15:33;:22;;-1:-1:-1;;5243:22:33;5261:4;5243:22;;;1869:176;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;1869:176:33;;;;3238:52;;49:4:-1;3238:52:33;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;3238:52:33;;;3228:63;;49:4:-1;3228:63:33;;;;5447:18;;;;;;;;;;;;;;;;5497:21;;;;;;;;;;-1:-1:-1;;;5497:21:33;;;;5358:220;;;;3228:63;5431:36;;5481:39;;5534:7;;5563:4;;5358:220;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;5358:220:33;;;5348:231;;;;;;5327:18;:252;;;;5095:491;;1280:15633;;788:96:122;867:10;788:96;:::o;5:134:-1:-;83:13;;101:33;83:13;101:33;;;68:71;;;;;146:134;224:13;;242:33;224:13;242:33;;287:399;;;419:2;407:9;398:7;394:23;390:32;387:2;;;435:1;432;425:12;387:2;470:1;487:64;543:7;523:9;487:64;;;477:74;;449:108;588:2;606:64;662:7;653:6;642:9;638:22;606:64;;;596:74;;567:109;381:305;;;;;;693:113;776:24;794:5;776:24;;;771:3;764:37;758:48;;;813:113;896:24;914:5;896:24;;933:348;;1057:34;1085:5;1057:34;;;1103:88;1184:6;1179:3;1103:88;;;1096:95;;1196:52;1241:6;1236:3;1229:4;1222:5;1218:16;1196:52;;;1260:16;;;;;1037:244;-1:-1;;1037:244;1289:348;;1467:85;1549:2;1544:3;1467:85;;;-1:-1;;;1565:35;;1628:2;1619:12;;1453:184;-1:-1;;1453:184;1646:361;;1824:85;1906:2;1901:3;1824:85;;;1942:27;1922:48;;1998:2;1989:12;;1810:197;-1:-1;;1810:197;2016:352;;2194:85;2276:2;2271:3;2194:85;;;-1:-1;;;2292:39;;2359:2;2350:12;;2180:188;-1:-1;;2180:188;2377:335;;2555:84;2637:1;2632:3;2555:84;;;-1:-1;;;2652:24;;2704:1;2695:11;;2541:171;-1:-1;;2541:171;2721:351;;2899:85;2981:2;2976:3;2899:85;;;-1:-1;;;2997:38;;3063:2;3054:12;;2885:187;-1:-1;;2885:187;3081:349;;3259:85;3341:2;3336:3;3259:85;;;-1:-1;;;3357:36;;3421:2;3412:12;;3245:185;-1:-1;;3245:185;3558:254;;3698:89;3783:3;3774:6;3698:89;;;3691:96;3679:133;-1:-1;;;3679:133;3819:1707;;4523:148;4667:3;4523:148;;;4516:155;;4689:148;4833:3;4689:148;;;4682:155;;4855:148;4999:3;4855:148;;;4848:155;;5021:148;5165:3;5021:148;;;5014:155;;5187:148;5331:3;5187:148;;;5180:155;;5353:148;5497:3;5353:148;;5533:659;5763:3;5748:19;;5778:71;5752:9;5822:6;5778:71;;;5860:72;5928:2;5917:9;5913:18;5904:6;5860:72;;;5943;6011:2;6000:9;5996:18;5987:6;5943:72;;;6026;6094:2;6083:9;6079:18;6070:6;6026:72;;;6109:73;6177:3;6166:9;6162:19;6153:6;6109:73;;;5734:458;;;;;;;;;6199:117;6282:12;;6253:63;6324:144;6459:3;6437:31;-1:-1;6437:31;6630:91;;6692:24;6710:5;6692:24;;6728:72;6790:5;6773:27;6807:121;-1:-1;;;;;6869:54;;6852:76;7015:268;7080:1;7087:101;7101:6;7098:1;7095:13;7087:101;;;7168:11;;;7162:18;7149:11;;;7142:39;7123:2;7116:10;7087:101;;;7203:6;7200:1;7197:13;7194:2;;;7268:1;7259:6;7254:3;7250:16;7243:27;7194:2;7064:219;;;;;7291:117;7360:24;7378:5;7360:24;;;7353:5;7350:35;7340:2;;7399:1;7396;7389:12;7340:2;7334:74;;7415:117;7484:24;7502:5;7484:24;;7458:74;1280:15633:33;;;;;;",
541
541
  "deployedSourceMap": "1280:15633:33:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1280:15633:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5704:138;;;:::i;:::-;;1122:38:6;;;:::i;:::-;;;;;;;;;;;;;;;;5914:135:33;;;:::i;12165:412::-;;;;;;;;;:::i;:::-;;;;;;;;4996:46;;;;;;;;;:::i;:::-;;;;;;;;1684:137:125;;;:::i;899:77::-;;;:::i;:::-;;;;;;;;1250:92;;;:::i;7657:4316:33:-;;;;;;;;;:::i;6393:546::-;;;;;;;;;:::i;4766:33::-;;;:::i;:::-;;;;;;;;1970:107:125;;;;;;;;;:::i;4910:27:33:-;;;:::i;5704:138::-;1103:9:125;:7;:9::i;:::-;1095:54;;;;;;;;;;;;;;;;;;;;;;5773:15:33;:23;;;;;;5811:24;;;;;;5791:5;;5811:24;;;;;;;;;;5704:138::o;1122:38:6:-;;;;;;:::o;5914:135:33:-;1103:9:125;:7;:9::i;:::-;1095:54;;;;;;;;;;;;;;5982:15:33;:22;;;;6000:4;5982:22;;;;;;6019:23;;;;;;;;12165:412;12290:13;12319:21;12343:15;:22;12319:46;;12375:20;12409:13;12398:25;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;12398:25:33;-1:-1:-1;12375:48:33;-1:-1:-1;12439:9:33;12434:114;12458:13;12454:1;:17;12434:114;;;12504:13;:33;12518:15;12534:1;12518:18;;;;;;;;;;;;;;12504:33;;;;;;;;;;;;;;;;;;;;;12492:6;12499:1;12492:9;;;;;;;;:45;;;:9;;;;;;;;;;;:45;12473:3;;12434:114;;;-1:-1:-1;12564:6:33;-1:-1:-1;;12165:412:33;;;;:::o;4996:46::-;;;;;;;;;;;;;;;:::o;1684:137:125:-;1103:9;:7;:9::i;:::-;1095:54;;;;;;;;;;;;;;1766:6;;1745:40;;1782:1;;1745:40;1766:6;;1745:40;;1782:1;;1745:40;1795:6;:19;;;;;;1684:137::o;899:77::-;963:6;;;;899:77;:::o;1250:92::-;1329:6;;1290:4;;1329:6;;1313:12;:10;:12::i;:::-;:22;;;1306:29;;1250:92;:::o;7657:4316:33:-;7858:15;;7832:112;;7858:15;;7887:4;7832:112;:12;:112::i;:::-;8016:24;;8086:3591;8122:5;:12;8112:7;:22;8086:3591;;;8161:25;;:::i;:::-;8189:5;8195:7;8189:14;;;;;;;;;;;;;;8161:42;;8273:210;8303:4;:11;;;:22;;;8329:1;8303:27;:72;;;-1:-1:-1;8334:11:33;;;;:22;8360:15;-1:-1:-1;8334:41:33;8303:72;8393:4;8273:210;8462:7;8273:12;:210::i;:::-;8593:11;;;;:18;;;8563:204;;8593:32;;;;:68;;-1:-1:-1;8629:11:33;;;;:18;;;:32;;8651:10;8629:32;8593:68;8679:4;8563:204;8746:7;8563:12;:204::i;:::-;8965:14;;;;:21;8879:10;;8965:26;8961:1142;;9060:21;9084:157;9122:8;9152:7;9181:4;9207:16;9084;:157::i;:::-;9355:28;;;;:13;:28;;;;;;9060:181;;-1:-1:-1;9320:195:33;;9355:28;;9354:29;9405:4;9320:195;9060:181;9320:12;:195::i;:::-;9577:53;9600:13;9615:4;:14;;;9577:22;:53::i;:::-;9568:62;;9719:147;9775:6;9753:28;;:4;:11;;;:18;;;:28;;;9803:4;9719:147;:12;:147::i;:::-;9975:28;;;;:13;:28;;;;;;:35;;;;10006:4;9975:35;;;10033:55;10077:10;;10033:55;;;;9989:13;;10033:55;;;8961:1142;;10230:15;;10184:22;;10209:37;;:16;;:37;:20;:37;:::i;:::-;10184:62;-1:-1:-1;10353:16:33;10326:1256;10385:14;10371:11;:28;10326:1256;;;10478:32;;:::i;:::-;10513:7;10521:11;10513:20;;;;;;;;;;;;;;10478:55;;10551:62;10572:8;10581:6;:16;;;10572:26;;;;;;;;;;;;;;:32;;;10606:6;10551:20;:62::i;:::-;10726:27;10705:17;;:48;;;;;;;;;10701:867;;;10777:67;10798:8;10807:6;:21;;;10798:31;;;;;;;10777:67;10701:867;;;10891:194;10950:28;10929:17;;:49;;;;;;;;;;11004:4;10891:194;:12;:194::i;:::-;11157:24;11136:17;;:45;;;;;;;;;:132;;;;-1:-1:-1;11209:15:33;;11248:19;;;;11209:59;;;;;:15;;;;;:38;;:59;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11209:59:33;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11209:59:33;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;11209:59:33;;;;;;;;;11107:443;;;11359:15;;:47;;;;;11317:210;;11359:15;;;:35;;:47;;11395:10;;11359:47;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11359:47:33;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11359:47:33;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;11359:47:33;;;;;;;;;11436:4;11317:210;:12;:210::i;:::-;-1:-1:-1;10401:13:33;;10326:1256;;;-1:-1:-1;11652:14:33;-1:-1:-1;;;8136:9:33;;8086:3591;;;;11753:130;11799:7;:14;11779:16;:34;11827:4;11753:130;:12;:130::i;:::-;11924:15;;:42;;;;;:15;;;;;:23;;:42;;11948:8;;11958:7;;11924:42;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11924:42:33;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11924:42:33;;;;7657:4316;;;;:::o;6393:546::-;6564:21;6588:102;6618:8;6640:7;6661:4;6679:1;6588:16;:102::i;:::-;6564:126;;6700:125;6748:10;6726:32;;:4;:11;;;:18;;;:32;;;6772:4;6700:125;:12;:125::i;:::-;6835:28;;;;:13;:28;;;;;;:35;;;;6866:4;6835:35;;;6885:47;6921:10;;6849:13;;6885:47;;6835:28;6885:47;6393:546;;;;:::o;4766:33::-;;;;:::o;1970:107:125:-;1103:9;:7;:9::i;:::-;1095:54;;;;;;;;;;;;;;2042:28;2061:8;2042:18;:28::i;:::-;1970:107;:::o;4910:27:33:-;;;;;;:::o;788:96:122:-;867:10;788:96;:::o;1294:426:77:-;1428:4;1423:291;;1542:24;1561:4;1542:18;:24::i;:::-;1592:5;1623:26;1642:6;1623:18;:26::i;:::-;1500:171;;;;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;1500:171:77;;;;1448:255;;;;;;;;;1423:291;1294:426;;;:::o;1726:561::-;1886:4;1881:400;;2000:24;2019:4;2000:18;:24::i;:::-;2050:5;2081:26;2100:6;2081:18;:26::i;:::-;2133:6;2165:19;2175:8;2165:9;:19::i;:::-;1958:280;;;;;;;;;2210:6;;1958:280;;;;1881:400;1726:561;;;;:::o;13383:957:33:-;13607:7;13699:23;13725:111;13757:8;13779:7;13800:4;13818:8;13725:18;:111::i;:::-;13699:137;;13962:18;2139:195;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2139:195:33;;;2422:392;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2422:392:33;;;2913:159;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;2913:159:33;;;;3440:121;;;;49:4:-1;3440:121:33;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3440:121:33;;;3430:132;;;;;;14052:15;14081:4;:11;;;13993:109;;;;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;13993:109:33;;;;13983:120;;49:4:-1;13983:120:33;;;;14280:18;;13983:120;;-1:-1:-1;14223:109:33;;14253:13;;13983:120;;14223:109;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14223:109:33;;;14213:120;;;;;;14206:127;;;;13383:957;;;;;;;:::o;4969:561:77:-;5129:4;5124:400;;5243:24;5262:4;5243:18;:24::i;:::-;5293:5;5324:26;5343:6;5324:18;:26::i;:::-;5376:6;5408:19;5418:8;5408:9;:19::i;2305:1437:20:-;2437:7;2460:141;1337:2;2486:17;:24;:47;2547:4;2460:141;:12;:141::i;:::-;2818:4;2795:28;;2789:35;2871:4;2848:28;;2842:35;2935:4;2912:28;;2906:35;2612:9;2959:17;;;;3008:1;3003:17;3040:133;3085:21;3066:41;;3121:4;3040:133;:12;:133::i;:::-;3184:21;3222:10;3208:25;;;;;;;;;;3184:49;-1:-1:-1;3244:18:20;;3276:7;:34;;;;;;;;;3272:358;;;-1:-1:-1;3339:4:20;3272:358;;;3375:21;3364:7;:32;;;;;;;;;3360:270;;;3452:11;;;;;;;;;;;;;;;;;3465:4;3435:35;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3435:35:20;;;3425:46;;;;;;3412:59;;3360:270;;;3520:25;3509:7;:36;;;;;;;;;3502:44;;;;3600:11;;;;;;;;;;;;;;;;;3613:4;3583:35;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3583:35:20;;;3573:46;;;;;;3560:59;;3360:270;3647:88;3670:10;3694:1;3709;3724;3647:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3647:88:20;;;;;;;;3640:95;;;;;;;;2305:1437;;;;;:::o;834:176:124:-;892:7;923:5;;;946:6;;;;938:46;;;;;;;;;;;;;;1002:1;834:176;-1:-1:-1;;;834:176:124:o;12801:504:33:-;12934:10;12959;:26;;;;;:64;;;13011:12;13001:22;;:6;:22;;;12959:64;:140;;;-1:-1:-1;13039:15:33;;:60;;;;;:15;;;;;:34;;:60;;13074:12;;13088:10;;13039:60;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13039:60:33;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13039:60:33;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13039:60:33;;;;;;;;;12959:212;;;-1:-1:-1;13115:15:33;;:56;;;;;:15;;;;;:34;;:56;;13150:12;;13164:6;;13115:56;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13115:56:33;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13115:56:33;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13115:56:33;;;;;;;;;12934:237;;13182:116;13208:5;13227:4;13182:116;13282:6;13182:12;:116::i;2178:225:125:-;2251:22;;;2243:73;;;;;;;;;;;;;;2352:6;;2331:38;;;;;;;2352:6;;2331:38;;2352:6;;2331:38;2379:6;:17;;;;;;;;;;;;;;;2178:225::o;6359:966:77:-;6462:12;6537:19;6576:5;6559:23;;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;6559:23:77;;;;-1:-1:-1;49:4;6688:571:77;6709:5;;6688:571;;6960:9;;6862:3;;;;;6960:6;;6862:3;;6960:9;;;;;;;;;;;;:14;6956:293;;7015:1;7011:5;7141:22;;7148:6;-1:-1:-1;7221:13:77;;6956:293;6688:571;;;-1:-1:-1;;7306:12:77;;;7316:1;7306:12;;;;;;;;;7299:19;-1:-1:-1;;6359:966:77:o;7331:912::-;7425:12;7457:10;7453:51;;-1:-1:-1;7483:10:77;;;;;;;;;;;;;;;;;;;7453:51;7565:5;7553:9;7604:69;7611:6;;7604:69;;7633:8;;7660:2;7655:7;;;;7604:69;;;7714:17;7744:6;7734:17;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;7734:17:77;87:34:-1;135:17;;-1:-1;7734:17:77;-1:-1:-1;7843:5:77;;-1:-1:-1;7714:37:77;-1:-1:-1;7875:6:77;7858:357;7883:5;;7858:357;;8036:3;;8132:2;8128:1;:6;902:2;8114:21;8103:34;;8093:4;8098:1;8093:7;;;;;;;;;;;:44;;;;;;;;;;-1:-1:-1;8202:2:77;8197:7;;;;7858:357;;;-1:-1:-1;8232:4:77;7331:912;-1:-1:-1;;;;7331:912:77:o;14426:1213:33:-;14652:7;14712:29;14758:4;:15;;;14744:30;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;14744:30:33;-1:-1:-1;14712:62:33;-1:-1:-1;14846:9:33;14841:733;14865:15;;14861:19;;14841:733;;;14901:32;;:::i;:::-;14936:7;14955:1;14944:8;:12;14936:21;;;;;;;;;;;;;;14901:56;;15045:32;;:::i;:::-;15144;15122:17;;15097:43;;:24;:43::i;:::-;:79;;;;;;;;;15096:196;;15261:8;15270:6;:21;;;15261:31;;;;;;;;;;;;;;15096:196;;;15196:46;;;;;;;;;-1:-1:-1;15196:46:33;;;;;;;15096:196;15045:247;;15438:125;15469:6;15493:8;15502:6;:16;;;15493:26;;;;;;;;;;;;;;15537:12;15438:13;:125::i;:::-;15420:12;15433:1;15420:15;;;;;;;;;;;;;;;;;:143;-1:-1:-1;;14882:3:33;;14841:733;;;;15618:12;15601:30;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15601:30:33;;;15591:41;;;;;;15584:48;;;14426:1213;;;;;;:::o;9217:960:77:-;9487:13;;;9497:2;9487:13;;;;;;;;;9311:12;;9359:5;;9311:12;;9487:13;;;21:6:-1;;104:10;9487:13:77;87:34:-1;135:17;;-1:-1;9487:13:77;9465:35;;902:2;9564:23;;9552:6;9559:1;9552:9;;;;;;;;;;;:35;;;;;;;;;;;1010:3;9609:27;;9597:6;9604:1;9597:9;;;;;;;;;;;:39;;;;;;;;;;-1:-1:-1;9750:9:77;9745:402;9769:2;9765:1;:6;9745:402;;;9858:1;9854:5;;9951:23;1232:3;9956:17;;9951:4;:23::i;:::-;9930:6;9942:5;9937:2;:10;9930:18;;;;;;;;;;;:44;;;;;;;;;;;9997:1;9992;:6;;9988:10;;10089:23;1232:3;10094:1;:17;10089:4;:23::i;:::-;10068:6;10080:5;10075:2;:10;10068:18;;;;;;;;;;;:44;;;;;;;;;;-1:-1:-1;;10135:1:77;10130:6;;;;;9773:3;;9745:402;;2962:561;3122:4;3117:400;;3236:24;3255:4;3236:18;:24::i;:::-;3286:5;3317:26;3336:6;3317:18;:26::i;:::-;3369:6;3401:19;3411:8;3401:9;:19::i;8067:563:66:-;8177:13;8237:27;8223:10;:41;;;;;;;;;:95;;;-1:-1:-1;8294:24:66;8280:10;:38;;;;;;;;;8223:95;8206:377;;;-1:-1:-1;8350:24:66;8343:31;;8206:377;8422:28;8408:10;:42;;;;;;;;;:99;;;-1:-1:-1;8480:27:66;8466:10;:41;;;;;;;;;8408:99;8391:192;;;-1:-1:-1;8539:33:66;8532:40;;8391:192;-1:-1:-1;8599:24:66;8067:563;;;:::o;15719:721:33:-;15926:7;2422:392;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2422:392:33;;;2913:159;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;2913:159:33;;;;3705:88;;;49:4:-1;3705:88:33;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3705:88:33;;;3695:99;;;;;;16073:6;:17;;;16104:14;:20;;;16138:14;:21;;;16173:33;16192:6;:13;;;16173:18;:33::i;:::-;16220:22;;;;16256:24;;;;16294:19;;;;16327:22;;16363:23;;;;16410:11;;;;16400:22;;;;16410:11;16400:22;;;;;;;;;;;16017:415;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16017:415:33;;;16007:426;;;;;;16000:433;;15719:721;;;;;:::o;10183:325:77:-;10272:4;10340:2;10332:5;:10;10328:79;;;-1:-1:-1;902:2:77;10376:18;;10365:31;;10358:38;;10328:79;-1:-1:-1;956:2:77;10472:27;10461:40;;;10183:325::o;8249:962::-;8521:13;;;8531:2;8521:13;;;8343:12;8521:13;;;;;;8383:14;;;;8343:12;;8521:13;;;21:6:-1;;104:10;8521:13:77;87:34:-1;135:17;;-1:-1;8521:13:77;8499:35;;902:2;8598:23;;8586:6;8593:1;8586:9;;;;;;;;;;;:35;;;;;;;;;;;1010:3;8643:27;;8631:6;8638:1;8631:9;;;;;;;;;;;:39;;;;;;;;;;-1:-1:-1;8784:9:77;8779:402;8803:2;8799:1;:6;8779:402;;;8892:1;8888:5;;8985:23;1232:3;8990:17;;8985:4;:23::i;:::-;8964:6;8976:5;8971:2;:10;8964:18;;;;;;;;;;;:44;;;;;;;;;;;9031:1;9026;:6;;9022:10;;9123:23;1232:3;9128:1;:17;9123:4;:23::i;:::-;9102:6;9114:5;9109:2;:10;9102:18;;;;;;;;;;;:44;;;;;;;;;;-1:-1:-1;;9169:1:77;9164:6;;;;;8807:3;;8779:402;;16525:386:33;16646:7;2913:159;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;2913:159:33;;;;3948:58;;49:4:-1;3948:58:33;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3948:58:33;;;3938:69;;;;;;16799:6;:11;;;16824:6;:19;;;16857:6;:10;;;16881:6;:12;;;16737:166;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16737:166:33;;;16727:177;;;;;;16720:184;;16525:386;;;:::o;1280:15633::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;1280:15633:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;1280:15633:33;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;1280:15633:33;;;;;;;;;;;;;;;;;;;;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;160:707;;277:3;270:4;262:6;258:17;254:27;244:2;;295:1;292;285:12;244:2;332:6;319:20;354:80;369:64;426:6;369:64;;;354:80;;;345:89;;451:5;476:6;469:5;462:21;506:4;498:6;494:17;484:27;;528:4;523:3;519:14;512:21;;581:6;628:3;620:4;612:6;608:17;603:3;599:27;596:36;593:2;;;645:1;642;635:12;593:2;670:1;655:206;680:6;677:1;674:13;655:206;;;738:3;760:37;793:3;781:10;760:37;;;748:50;;-1:-1;821:4;812:14;;;;840;;;;;702:1;695:9;655:206;;;659:14;237:630;;;;;;;;911:753;;1053:3;1046:4;1038:6;1034:17;1030:27;1020:2;;1071:1;1068;1061:12;1020:2;1108:6;1095:20;1130:105;1145:89;1227:6;1145:89;;1130:105;1263:21;;;1307:4;1295:17;;;;1121:114;;-1:-1;1320:14;;1295:17;1415:1;1400:258;1425:6;1422:1;1419:13;1400:258;;;1508:3;1495:17;1487:6;1483:30;1532:62;1590:3;1578:10;1532:62;;;1520:75;;-1:-1;1618:4;1609:14;;;;1637;;;;;1447:1;1440:9;1400:258;;1724:762;;1869:3;1862:4;1854:6;1850:17;1846:27;1836:2;;1887:1;1884;1877:12;1836:2;1924:6;1911:20;1946:108;1961:92;2046:6;1961:92;;1946:108;2082:21;;;2126:4;2114:17;;;;1937:117;;-1:-1;2139:14;;2114:17;2234:1;2219:261;2244:6;2241:1;2238:13;2219:261;;;2327:3;2314:17;2306:6;2302:30;2351:65;2412:3;2400:10;2351:65;;;2339:78;;-1:-1;2440:4;2431:14;;;;2459;;;;;2266:1;2259:9;2219:261;;2524:764;;2660:3;2653:4;2645:6;2641:17;2637:27;2627:2;;2678:1;2675;2668:12;2627:2;2715:6;2702:20;2737:99;2752:83;2828:6;2752:83;;2737:99;2728:108;;2853:5;2878:6;2871:5;2864:21;2908:4;2900:6;2896:17;2886:27;;2930:4;2925:3;2921:14;2914:21;;2983:6;3030:3;3022:4;3014:6;3010:17;3005:3;3001:27;2998:36;2995:2;;;3047:1;3044;3037:12;2995:2;3072:1;3057:225;3082:6;3079:1;3076:13;3057:225;;;3140:3;3162:56;3214:3;3202:10;3162:56;;;3150:69;;-1:-1;3242:4;3233:14;;;;3270:4;3261:14;;;;;3104:1;3097:9;3057:225;;3296:124;3360:20;;3385:30;3360:20;3385:30;;3427:128;3502:13;;3520:30;3502:13;3520:30;;3562:130;3629:20;;3654:33;3629:20;3654:33;;3700:432;;3797:3;3790:4;3782:6;3778:17;3774:27;3764:2;;3815:1;3812;3805:12;3764:2;3852:6;3839:20;3874:60;3889:44;3926:6;3889:44;;3874:60;3865:69;;3954:6;3947:5;3940:21;3990:4;3982:6;3978:17;4023:4;4016:5;4012:16;4058:3;4049:6;4044:3;4040:16;4037:25;4034:2;;;4075:1;4072;4065:12;4034:2;4085:41;4119:6;4114:3;4109;4085:41;;;3757:375;;;;;;;;4140:162;4223:20;;4248:49;4223:20;4248:49;;4309:176;4399:20;;4424:56;4399:20;4424:56;;4701:1528;;4815:6;4803:9;4798:3;4794:19;4790:32;4787:2;;;4835:1;4832;4825:12;4787:2;4853:22;4868:6;4853:22;;;4844:31;-1:-1;4931:1;4963:65;5024:3;5004:9;4963:65;;;4938:91;;-1:-1;5095:2;5128:49;5173:3;5149:22;;;5128:49;;;5121:4;5114:5;5110:16;5103:75;5050:139;5241:2;5274:75;5345:3;5336:6;5325:9;5321:22;5274:75;;;5267:4;5260:5;5256:16;5249:101;5199:162;5422:3;5456:49;5501:3;5492:6;5481:9;5477:22;5456:49;;;5449:4;5442:5;5438:16;5431:75;5371:146;5580:3;5614:49;5659:3;5650:6;5639:9;5635:22;5614:49;;;5607:4;5600:5;5596:16;5589:75;5527:148;5733:3;5767:49;5812:3;5803:6;5792:9;5788:22;5767:49;;;5760:4;5753:5;5749:16;5742:75;5685:143;5888:3;5922:49;5967:3;5958:6;5947:9;5943:22;5922:49;;;5915:4;5908:5;5904:16;5897:75;5838:145;6061:3;6050:9;6046:19;6033:33;6086:18;6078:6;6075:30;6072:2;;;6118:1;6115;6108:12;6072:2;6153:54;6203:3;6194:6;6183:9;6179:22;6153:54;;;6146:4;6139:5;6135:16;6128:80;5993:226;4781:1448;;;;;6267:804;;6382:4;6370:9;6365:3;6361:19;6357:30;6354:2;;;6400:1;6397;6390:12;6354:2;6418:20;6433:4;6418:20;;;6409:29;-1:-1;6488:1;6520:46;6562:3;6542:9;6520:46;;;6495:72;;-1:-1;6636:2;6669:72;6737:3;6713:22;;;6669:72;;;6662:4;6655:5;6651:16;6644:98;6588:165;6802:2;6835:69;6900:3;6891:6;6880:9;6876:22;6835:69;;;6828:4;6821:5;6817:16;6810:95;6763:153;6967:2;7000:49;7045:3;7036:6;7025:9;7021:22;7000:49;;;6993:4;6986:5;6982:16;6975:75;6926:135;6348:723;;;;;7126:749;;7243:4;7231:9;7226:3;7222:19;7218:30;7215:2;;;7261:1;7258;7251:12;7215:2;7279:20;7294:4;7279:20;;;7270:29;-1:-1;7355:1;7387:49;7432:3;7412:9;7387:49;;;7362:75;;-1:-1;7500:2;7533:79;7608:3;7584:22;;;7533:79;;;7526:4;7519:5;7515:16;7508:105;7458:166;7707:3;7696:9;7692:19;7679:33;7732:18;7724:6;7721:30;7718:2;;;7764:1;7761;7754:12;7718:2;7799:54;7849:3;7840:6;7829:9;7825:22;7799:54;;;7792:4;7785:5;7781:16;7774:80;7634:231;7209:666;;;;;8716:464;;8824:4;8812:9;8807:3;8803:19;8799:30;8796:2;;;8842:1;8839;8832:12;8796:2;8860:20;8875:4;8860:20;;;8851:29;-1:-1;8931:1;8963:49;9008:3;8988:9;8963:49;;;8938:75;;-1:-1;9076:2;9109:49;9154:3;9130:22;;;9109:49;;;9102:4;9095:5;9091:16;9084:75;9034:136;8790:390;;;;;9237:770;;9356:4;9344:9;9339:3;9335:19;9331:30;9328:2;;;9374:1;9371;9364:12;9328:2;9392:20;9407:4;9392:20;;;9383:29;-1:-1;9468:1;9500:49;9545:3;9525:9;9500:49;;;9475:75;;-1:-1;9611:2;9644:49;9689:3;9665:22;;;9644:49;;;9637:4;9630:5;9626:16;9619:75;9571:134;9757:2;9790:49;9835:3;9826:6;9815:9;9811:22;9790:49;;;9783:4;9776:5;9772:16;9765:75;9715:136;9903:2;9936:49;9981:3;9972:6;9961:9;9957:22;9936:49;;10151:241;;10255:2;10243:9;10234:7;10230:23;10226:32;10223:2;;;10271:1;10268;10261:12;10223:2;10306:1;10323:53;10368:7;10348:9;10323:53;;10399:377;;10528:2;10516:9;10507:7;10503:23;10499:32;10496:2;;;10544:1;10541;10534:12;10496:2;10579:31;;10630:18;10619:30;;10616:2;;;10662:1;10659;10652:12;10616:2;10682:78;10752:7;10743:6;10732:9;10728:22;10682:78;;10783:1043;;;;11068:2;11056:9;11047:7;11043:23;11039:32;11036:2;;;11084:1;11081;11074:12;11036:2;11119:31;;11170:18;11159:30;;11156:2;;;11202:1;11199;11192:12;11156:2;11222:97;11311:7;11302:6;11291:9;11287:22;11222:97;;;11212:107;;11098:227;11384:2;11373:9;11369:18;11356:32;11408:18;11400:6;11397:30;11394:2;;;11440:1;11437;11430:12;11394:2;11460:103;11555:7;11546:6;11535:9;11531:22;11460:103;;;11450:113;;11335:234;11628:2;11617:9;11613:18;11600:32;11652:18;11644:6;11641:30;11638:2;;;11684:1;11681;11674:12;11638:2;11704:106;11802:7;11793:6;11782:9;11778:22;11704:106;;;11694:116;;11579:237;11030:796;;;;;;11833:1001;;;;12097:2;12085:9;12076:7;12072:23;12068:32;12065:2;;;12113:1;12110;12103:12;12065:2;12148:31;;12199:18;12188:30;;12185:2;;;12231:1;12228;12221:12;12185:2;12251:97;12340:7;12331:6;12320:9;12316:22;12251:97;;;12241:107;;12127:227;12413:2;12402:9;12398:18;12385:32;12437:18;12429:6;12426:30;12423:2;;;12469:1;12466;12459:12;12423:2;12489:103;12584:7;12575:6;12564:9;12560:22;12489:103;;;12479:113;;12364:234;12657:2;12646:9;12642:18;12629:32;12681:18;12673:6;12670:30;12667:2;;;12713:1;12710;12703:12;12667:2;12733:85;12810:7;12801:6;12790:9;12786:22;12733:85;;12841:257;;12953:2;12941:9;12932:7;12928:23;12924:32;12921:2;;;12969:1;12966;12959:12;12921:2;13004:1;13021:61;13074:7;13054:9;13021:61;;13105:241;;13209:2;13197:9;13188:7;13184:23;13180:32;13177:2;;;13225:1;13222;13215:12;13177:2;13260:1;13277:53;13322:7;13302:9;13277:53;;13354:161;;13435:40;13471:3;13463:6;13435:40;;;-1:-1;;13504:4;13495:14;;13428:87;13524:189;;13619:54;13669:3;13661:6;13619:54;;13722:257;;13873:100;13969:3;13961:6;13873:100;;13988:253;;14113:88;14197:3;14189:6;14113:88;;;-1:-1;;14230:4;14221:14;;14106:135;14249:142;14340:45;14379:5;14340:45;;;14335:3;14328:58;14322:69;;;14398:103;14471:24;14489:5;14471:24;;14653:666;;14792:51;14837:5;14792:51;;;14856:83;14932:6;14927:3;14856:83;;;14849:90;;14960:53;15007:5;14960:53;;;15033:7;15061:1;15046:251;15071:6;15068:1;15065:13;15046:251;;;15138:6;15132:13;15159:57;15212:3;15197:13;15159:57;;;15152:64;;15233:57;15283:6;15233:57;;;15223:67;-1:-1;;15093:1;15086:9;15046:251;;;-1:-1;15310:3;;14771:548;-1:-1;;;;;14771:548;15358:734;;15521:54;15569:5;15521:54;;;15588:104;15685:6;15680:3;15588:104;;;15581:111;;15713:56;15763:5;15713:56;;;15789:7;15817:1;15802:268;15827:6;15824:1;15821:13;15802:268;;;15894:6;15888:13;15915:71;15982:3;15967:13;15915:71;;;15908:78;;16003:60;16056:6;16003:60;;;15993:70;-1:-1;;15849:1;15842:9;15802:268;;16167:1048;;16362:79;16435:5;16362:79;;;16454:111;16558:6;16553:3;16454:111;;;16447:118;;16588:3;16630:4;16622:6;16618:17;16613:3;16609:27;16657:81;16732:5;16657:81;;;16758:7;16786:1;16771:405;16796:6;16793:1;16790:13;16771:405;;;16858:9;16852:4;16848:20;16843:3;16836:33;16903:6;16897:13;16925:114;17034:4;17019:13;16925:114;;;16917:122;;17056:85;17134:6;17056:85;;;17164:4;17155:14;;;;;17046:95;-1:-1;;16818:1;16811:9;16771:405;;;-1:-1;17189:4;;16341:874;-1:-1;;;;;;;16341:874;17278:842;;17461:73;17528:5;17461:73;;;17547:105;17645:6;17640:3;17547:105;;;17540:112;;17673:75;17742:5;17673:75;;;17768:7;17796:1;17781:317;17806:6;17803:1;17800:13;17781:317;;;17873:6;17867:13;17894:101;17991:3;17976:13;17894:101;;;17887:108;;18012:79;18084:6;18012:79;;;18002:89;-1:-1;;17828:1;17821:9;17781:317;;18128:94;18195:21;18210:5;18195:21;;18340:148;18439:43;18458:23;18475:5;18458:23;;;18439:43;;18495:148;18594:43;18613:23;18630:5;18613:23;;18650:113;18733:24;18751:5;18733:24;;18888:152;18989:45;19009:24;19027:5;19009:24;;19047:356;;19175:38;19207:5;19175:38;;;19225:88;19306:6;19301:3;19225:88;;;19218:95;;19318:52;19363:6;19358:3;19351:4;19344:5;19340:16;19318:52;;;19382:16;;;;;19155:248;-1:-1;;19155:248;19410:315;;19506:34;19534:5;19506:34;;;19552:60;19605:6;19600:3;19552:60;;;19545:67;;19617:52;19662:6;19657:3;19650:4;19643:5;19639:16;19617:52;;;19690:29;19712:6;19690:29;;;19681:39;;;;19486:239;-1:-1;;;19486:239;20087:176;20195:62;20251:5;20195:62;;20270:144;20357:51;20402:5;20357:51;;20582:158;20676:58;20728:5;20676:58;;21605:355;;21783:85;21865:2;21860:3;21783:85;;;21901:21;21881:42;;21951:2;21942:12;;21769:191;-1:-1;;21769:191;21969:351;;22147:85;22229:2;22224:3;22147:85;;;22265:17;22245:38;;22311:2;22302:12;;22133:187;-1:-1;;22133:187;22329:346;;22507:85;22589:2;22584:3;22507:85;;;22625:12;22605:33;;22666:2;22657:12;;22493:182;-1:-1;;22493:182;22684:375;;22844:67;22908:2;22903:3;22844:67;;;22944:34;22924:55;;23013:8;23008:2;22999:12;;22992:30;23050:2;23041:12;;22830:229;-1:-1;;22830:229;23068:353;;23246:85;23328:2;23323:3;23246:85;;;23364:19;23344:40;;23412:2;23403:12;;23232:189;-1:-1;;23232:189;23430:346;;23608:85;23690:2;23685:3;23608:85;;;23726:12;23706:33;;23767:2;23758:12;;23594:182;-1:-1;;23594:182;23785:327;;23945:67;24009:2;24004:3;23945:67;;;24045:29;24025:50;;24103:2;24094:12;;23931:181;-1:-1;;23931:181;24121:360;;24299:85;24381:2;24376:3;24299:85;;;24417:26;24397:47;;24472:2;24463:12;;24285:196;-1:-1;;24285:196;24490:349;;24668:85;24750:2;24745:3;24668:85;;;24786:15;24766:36;;24830:2;24821:12;;24654:185;-1:-1;;24654:185;24848:335;;25026:84;25108:1;25103:3;25026:84;;;25143:3;25123:24;;25175:1;25166:11;;25012:171;-1:-1;;25012:171;25192:341;;25370:84;25452:1;25447:3;25370:84;;;25487:9;25467:30;;25525:1;25516:11;;25356:177;-1:-1;;25356:177;25542:363;;25720:85;25802:2;25797:3;25720:85;;;25838:29;25818:50;;25896:2;25887:12;;25706:199;-1:-1;;25706:199;25914:348;;26092:85;26174:2;26169:3;26092:85;;;26210:14;26190:35;;26253:2;26244:12;;26078:184;-1:-1;;26078:184;26271:362;;26449:85;26531:2;26526:3;26449:85;;;26567:28;26547:49;;26624:2;26615:12;;26435:198;-1:-1;;26435:198;26642:349;;26820:85;26902:2;26897:3;26820:85;;;26938:15;26918:36;;26982:2;26973:12;;26806:185;-1:-1;;26806:185;27000:357;;27178:85;27260:2;27255:3;27178:85;;;27296:23;27276:44;;27348:2;27339:12;;27164:193;-1:-1;;27164:193;27366:350;;27544:85;27626:2;27621:3;27544:85;;;27662:16;27642:37;;27707:2;27698:12;;27530:186;-1:-1;;27530:186;27725:346;;27903:85;27985:2;27980:3;27903:85;;;28021:12;28001:33;;28062:2;28053:12;;27889:182;-1:-1;;27889:182;28080:332;;28240:67;28304:2;28299:3;28240:67;;;28340:34;28320:55;;28403:2;28394:12;;28226:186;-1:-1;;28226:186;28421:346;;28599:85;28681:2;28676:3;28599:85;;;28717:12;28697:33;;28758:2;28749:12;;28585:182;-1:-1;;28585:182;28776:360;;28954:85;29036:2;29031:3;28954:85;;;29072:26;29052:47;;29127:2;29118:12;;28940:196;-1:-1;;28940:196;29145:355;;29323:85;29405:2;29400:3;29323:85;;;29441:21;29421:42;;29491:2;29482:12;;29309:191;-1:-1;;29309:191;29509:358;;29687:85;29769:2;29764:3;29687:85;;;29805:24;29785:45;;29858:2;29849:12;;29673:194;-1:-1;;29673:194;29876:353;;30054:85;30136:2;30131:3;30054:85;;;30172:19;30152:40;;30220:2;30211:12;;30040:189;-1:-1;;30040:189;30238:357;;30416:85;30498:2;30493:3;30416:85;;;30534:23;30514:44;;30586:2;30577:12;;30402:193;-1:-1;;30402:193;30604:362;;30782:85;30864:2;30859:3;30782:85;;;30900:28;30880:49;;30957:2;30948:12;;30768:198;-1:-1;;30768:198;31035:1616;31254:23;;31035:1616;;31180:6;31171:16;;;31283:77;31175:3;31254:23;31283:77;;;31202:164;31444:4;31437:5;31433:16;31427:23;31456:63;31513:4;31508:3;31504:14;31490:12;31456:63;;;31376:149;31600:4;31593:5;31589:16;31583:23;31612:119;31725:4;31720:3;31716:14;31702:12;31612:119;;;31535:202;31821:4;31814:5;31810:16;31804:23;31833:63;31890:4;31885:3;31881:14;31867:12;31833:63;;;31747:155;31988:4;31981:5;31977:16;31971:23;32000:63;32057:4;32052:3;32048:14;32034:12;32000:63;;;31912:157;32150:4;32143:5;32139:16;32133:23;32162:65;32219:6;32214:3;32210:16;32196:12;32162:65;;;32079:154;32316:4;32309:5;32305:16;32299:23;32328:65;32385:6;32380:3;32376:16;32362:12;32328:65;;;32243:156;32472:4;32465:5;32461:16;32455:23;32526:3;32520:4;32516:14;32507:6;32502:3;32498:16;32491:40;32546:67;32608:4;32594:12;32546:67;;;32538:75;31153:1498;-1:-1;;;;;31153:1498;32717:821;32922:23;;32856:4;32847:14;;;32951:57;32851:3;32922:23;32951:57;;;32876:138;33095:4;33088:5;33084:16;33078:23;33107:84;33185:4;33180:3;33176:14;33162:12;33107:84;;;33024:173;33269:4;33262:5;33258:16;33252:23;33281:81;33356:4;33351:3;33347:14;33333:12;33281:81;;;33207:161;33442:4;33435:5;33431:16;33425:23;33454:63;33511:4;33506:3;33502:14;33488:12;33454:63;;33594:461;33786:23;;33719:4;33710:14;;;33815:63;33714:3;33786:23;33815:63;;;33739:145;33959:4;33952:5;33948:16;33942:23;33971:63;34028:4;34023:3;34019:14;34005:12;33971:63;;34159:808;34388:23;;34316:4;34307:14;;;34417:63;34311:3;34388:23;34417:63;;;34336:150;34559:4;34552:5;34548:16;34542:23;34571:63;34628:4;34623:3;34619:14;34605:12;34571:63;;;34496:144;34715:4;34708:5;34704:16;34698:23;34727:63;34784:4;34779:3;34775:14;34761:12;34727:63;;;34650:146;34871:4;34864:5;34860:16;34854:23;34883:63;34940:4;34935:3;34931:14;34917:12;34883:63;;35204:107;35283:22;35299:5;35283:22;;35318:326;;35494:125;35615:3;35606:6;35494:125;;35651:517;;35824:73;35893:3;35884:6;35824:73;;;35919:1;35914:3;35910:11;35903:18;;35932:75;36003:3;35994:6;35932:75;;;36029:2;36024:3;36020:12;36013:19;;36043:75;36114:3;36105:6;36043:75;;;-1:-1;36140:2;36131:12;;35812:356;-1:-1;;;35812:356;36175:244;;36294:75;36365:3;36356:6;36294:75;;;-1:-1;36391:2;36382:12;;36282:137;-1:-1;36282:137;36426:254;;36566:89;36651:3;36642:6;36566:89;;36687:553;;36903:93;36992:3;36983:6;36903:93;;;36896:100;;37007:73;37076:3;37067:6;37007:73;;;37102:1;37097:3;37093:11;37086:18;;37122:93;37211:3;37202:6;37122:93;;37247:978;;37561:93;37650:3;37641:6;37561:93;;;37554:100;;37665:73;37734:3;37725:6;37665:73;;;37760:1;37755:3;37751:11;37744:18;;37780:93;37869:3;37860:6;37780:93;;;37773:100;;37884:73;37953:3;37944:6;37884:73;;;37979:1;37974:3;37970:11;37963:18;;37999:93;38088:3;38079:6;37999:93;;;37992:100;;38103:73;38172:3;38163:6;38103:73;;;-1:-1;38198:1;38189:11;;37542:683;-1:-1;;;;;;37542:683;38232:393;;38400:89;38485:3;38476:6;38400:89;;;38393:96;;38500:75;38571:3;38562:6;38500:75;;;-1:-1;38597:2;38588:12;;38381:244;-1:-1;;38381:244;38632:403;;38814:89;38899:3;38890:6;38814:89;;;38807:96;;38921:89;39006:3;38997:6;38921:89;;39042:552;;39266:89;39351:3;39342:6;39266:89;;;39259:96;;39373:89;39458:3;39449:6;39373:89;;;39366:96;;39480:89;39565:3;39556:6;39480:89;;39601:1974;;40406:148;40550:3;40406:148;;;40399:155;;40572:148;40716:3;40572:148;;;40565:155;;40738:148;40882:3;40738:148;;;40731:155;;40904:148;41048:3;40904:148;;;40897:155;;41070:148;41214:3;41070:148;;;41063:155;;41236:148;41380:3;41236:148;;;41229:155;;41402:148;41546:3;41402:148;;41582:3309;;42892:148;43036:3;42892:148;;;42885:155;;43058:148;43202:3;43058:148;;;43051:155;;43224:148;43368:3;43224:148;;;43217:155;;43390:148;43534:3;43390:148;;;43383:155;;43556:148;43700:3;43556:148;;;43549:155;;43722:148;43866:3;43722:148;;;43715:155;;43888:148;44032:3;43888:148;;;43881:155;;44054:148;44198:3;44054:148;;;44047:155;;44220:148;44364:3;44220:148;;;44213:155;;44386:148;44530:3;44386:148;;;44379:155;;44552:148;44696:3;44552:148;;44898:1707;;45602:148;45746:3;45602:148;;;45595:155;;45768:148;45912:3;45768:148;;;45761:155;;45934:148;46078:3;45934:148;;;45927:155;;46100:148;46244:3;46100:148;;;46093:155;;46266:148;46410:3;46266:148;;46612:213;46730:2;46715:18;;46744:71;46719:9;46788:6;46744:71;;46832:229;46958:2;46943:18;;46972:79;46947:9;47024:6;46972:79;;47068:324;47214:2;47199:18;;47228:71;47203:9;47272:6;47228:71;;;47310:72;47378:2;47367:9;47363:18;47354:6;47310:72;;47399:340;47553:2;47538:18;;47567:71;47542:9;47611:6;47567:71;;;47649:80;47725:2;47714:9;47710:18;47701:6;47649:80;;47746:349;47908:2;47922:47;;;47893:18;;47983:102;47893:18;48071:6;47983:102;;48102:796;48436:2;48450:47;;;48421:18;;48511:146;48421:18;48643:6;48511:146;;;48503:154;;48705:9;48699:4;48695:20;48690:2;48679:9;48675:18;48668:48;48730:158;48883:4;48874:6;48730:158;;48905:201;49017:2;49002:18;;49031:65;49006:9;49069:6;49031:65;;49113:213;49231:2;49216:18;;49245:71;49220:9;49289:6;49245:71;;49333:725;49596:3;49581:19;;49611:71;49585:9;49655:6;49611:71;;;49693:66;49755:2;49744:9;49740:18;49731:6;49693:66;;;49770:93;49859:2;49848:9;49844:18;49835:6;49770:93;;;49874:90;49960:2;49949:9;49945:18;49936:6;49874:90;;;49975:73;50043:3;50032:9;50028:19;50019:6;49975:73;;;49567:491;;;;;;;;;50065:564;50303:3;50288:19;;50318:71;50292:9;50362:6;50318:71;;;50400:72;50468:2;50457:9;50453:18;50444:6;50400:72;;;50483:136;50615:2;50604:9;50600:18;50591:6;50483:136;;50636:1361;51049:3;51034:19;;51064:71;51038:9;51108:6;51064:71;;;51146:86;51228:2;51217:9;51213:18;51204:6;51146:86;;;51243:72;51311:2;51300:9;51296:18;51287:6;51243:72;;;51326;51394:2;51383:9;51379:18;51370:6;51326:72;;;51409:73;51477:3;51466:9;51462:19;51453:6;51409:73;;;51493;51561:3;51550:9;51546:19;51537:6;51493:73;;;51577;51645:3;51634:9;51630:19;51621:6;51577:73;;;51661;51729:3;51718:9;51714:19;51705:6;51661:73;;;51745;51813:3;51802:9;51798:19;51789:6;51745:73;;;51829;51897:3;51886:9;51882:19;51873:6;51829:73;;;51913:74;51982:3;51971:9;51967:19;51957:7;51913:74;;;51020:977;;;;;;;;;;;;;;;52004:539;52202:3;52187:19;;52217:71;52191:9;52261:6;52217:71;;;52299:68;52363:2;52352:9;52348:18;52339:6;52299:68;;;52378:72;52446:2;52435:9;52431:18;52422:6;52378:72;;;52461;52529:2;52518:9;52514:18;52505:6;52461:72;;52550:263;52693:2;52678:18;;52707:96;52682:9;52776:6;52707:96;;52820:301;52958:2;52972:47;;;52943:18;;53033:78;52943:18;53097:6;53033:78;;53128:407;53319:2;53333:47;;;53304:18;;53394:131;53304:18;53394:131;;53542:407;53733:2;53747:47;;;53718:18;;53808:131;53718:18;53808:131;;53956:407;54147:2;54161:47;;;54132:18;;54222:131;54132:18;54222:131;;54370:256;54432:2;54426:9;54458:17;;;54533:18;54518:34;;54554:22;;;54515:62;54512:2;;;54590:1;54587;54580:12;54512:2;54606;54599:22;54410:216;;-1:-1;54410:216;54633:304;;54792:18;54784:6;54781:30;54778:2;;;54824:1;54821;54814:12;54778:2;-1:-1;54859:4;54847:17;;;54912:15;;54715:222;55949:317;;56088:18;56080:6;56077:30;56074:2;;;56120:1;56117;56110:12;56074:2;-1:-1;56251:4;56187;56164:17;;;;-1:-1;;56160:33;56241:15;;56011:255;56273:148;56394:4;56385:14;;56342:79;56946:134;57046:12;;57017:63;58446:175;58561:19;;;58610:4;58601:14;;58554:67;59856:91;;59918:24;59936:5;59918:24;;59954:85;60020:13;60013:21;;59996:43;60046:144;60118:66;60107:78;;60090:100;60197:144;60269:66;60258:78;;60241:100;60348:72;60410:5;60393:27;60427:138;60505:5;60511:49;60505:5;60511:49;;60572:152;60657:5;60663:56;60657:5;60663:56;;60884:121;60957:42;60946:54;;60929:76;61091:81;61162:4;61151:16;;61134:38;61179:129;;61266:37;61297:5;61315:171;;61419:62;61475:5;61419:62;;61633:138;;61726:40;61760:5;61726:40;;61778:152;;61878:47;61919:5;61878:47;;62334:145;62415:6;62410:3;62405;62392:30;-1:-1;62471:1;62453:16;;62446:27;62385:94;62488:268;62553:1;62560:101;62574:6;62571:1;62568:13;62560:101;;;62641:11;;;62635:18;62622:11;;;62615:39;62596:2;62589:10;62560:101;;;62676:6;62673:1;62670:13;62667:2;;;-1:-1;;62741:1;62723:16;;62716:27;62537:219;63005:97;63093:2;63073:14;-1:-1;;63069:28;;63053:49;63110:107;63195:1;63188:5;63185:12;63175:2;;63201:9;63224:114;63316:1;63309:5;63306:12;63296:2;;63322:9;63463:117;63532:24;63550:5;63532:24;;;63525:5;63522:35;63512:2;;63571:1;63568;63561:12;63587:111;63653:21;63668:5;63653:21;;63705:117;63774:24;63792:5;63774:24;;63829:110;63914:1;63907:5;63904:12;63894:2;;63930:1;63927;63920:12;63946:117;64038:1;64031:5;64028:12;64018:2;;64054:1;64051;64044:12",
542
542
  "source": "/*\n\n Copyright 2019 dYdX Trading Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.5.7;\npragma experimental ABIEncoderV2;\n\nimport { SafeMath } from \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport { Ownable } from \"@openzeppelin/contracts/ownership/Ownable.sol\";\nimport { Account } from \"../../protocol/lib/Account.sol\";\nimport { Actions } from \"../../protocol/lib/Actions.sol\";\nimport { Require } from \"../../protocol/lib/Require.sol\";\nimport { Types } from \"../../protocol/lib/Types.sol\";\nimport { OnlyDolomiteMargin } from \"../helpers/OnlyDolomiteMargin.sol\";\nimport { TypedSignature } from \"../lib/TypedSignature.sol\";\n\n\n/**\n * @title SignedOperationProxy\n * @author dYdX\n *\n * Contract for sending operations on behalf of others\n */\ncontract SignedOperationProxy is\nOnlyDolomiteMargin,\n Ownable\n{\n using SafeMath for uint256;\n\n // ============ Constants ============\n\n bytes32 constant private FILE = \"SignedOperationProxy\";\n\n // EIP191 header for EIP712 prefix\n bytes2 constant private EIP191_HEADER = 0x1901;\n\n // EIP712 Domain Name value\n string constant private EIP712_DOMAIN_NAME = \"SignedOperationProxy\";\n\n // EIP712 Domain Version value\n string constant private EIP712_DOMAIN_VERSION = \"1.1\";\n\n // EIP712 encodeType of EIP712Domain\n bytes constant private EIP712_DOMAIN_STRING = abi.encodePacked(\n \"EIP712Domain(\",\n \"string name,\",\n \"string version,\",\n \"uint256 chainId,\",\n \"address verifyingContract\",\n \")\"\n );\n\n // EIP712 encodeType of Operation\n bytes constant private EIP712_OPERATION_STRING = abi.encodePacked(\n \"Operation(\",\n \"Action[] actions,\",\n \"uint256 expiration,\",\n \"uint256 salt,\",\n \"address sender,\",\n \"address signer\",\n \")\"\n );\n\n // EIP712 encodeType of Action\n bytes constant private EIP712_ACTION_STRING = abi.encodePacked(\n \"Action(\",\n \"uint8 actionType,\",\n \"address accountOwner,\",\n \"uint256 accountNumber,\",\n \"AssetAmount assetAmount,\",\n \"uint256 primaryMarketId,\",\n \"uint256 secondaryMarketId,\",\n \"address otherAddress,\",\n \"address otherAccountOwner,\",\n \"uint256 otherAccountNumber,\",\n \"bytes data\",\n \")\"\n );\n\n // EIP712 encodeType of AssetAmount\n bytes constant private EIP712_ASSET_AMOUNT_STRING = abi.encodePacked(\n \"AssetAmount(\",\n \"bool sign,\",\n \"uint8 denomination,\",\n \"uint8 ref,\",\n \"uint256 value\",\n \")\"\n );\n\n // EIP712 typeHash of EIP712Domain\n /* solium-disable-next-line indentation */\n bytes32 constant private EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH = keccak256(abi.encodePacked(\n EIP712_DOMAIN_STRING\n ));\n\n // EIP712 typeHash of Operation\n /* solium-disable-next-line indentation */\n bytes32 constant private EIP712_OPERATION_HASH = keccak256(abi.encodePacked(\n EIP712_OPERATION_STRING,\n EIP712_ACTION_STRING,\n EIP712_ASSET_AMOUNT_STRING\n ));\n\n // EIP712 typeHash of Action\n /* solium-disable-next-line indentation */\n bytes32 constant private EIP712_ACTION_HASH = keccak256(abi.encodePacked(\n EIP712_ACTION_STRING,\n EIP712_ASSET_AMOUNT_STRING\n ));\n\n // EIP712 typeHash of AssetAmount\n /* solium-disable-next-line indentation */\n bytes32 constant private EIP712_ASSET_AMOUNT_HASH = keccak256(abi.encodePacked(\n EIP712_ASSET_AMOUNT_STRING\n ));\n\n // ============ Structs ============\n\n struct OperationHeader {\n uint256 expiration;\n uint256 salt;\n address sender;\n address signer;\n }\n\n struct Authorization {\n uint256 numActions;\n OperationHeader header;\n bytes signature;\n }\n\n // ============ Events ============\n\n event ContractStatusSet(\n bool operational\n );\n\n event LogOperationExecuted(\n bytes32 indexed operationHash,\n address indexed signer,\n address indexed sender\n );\n\n event LogOperationCanceled(\n bytes32 indexed operationHash,\n address indexed canceler\n );\n\n // ============ Immutable Storage ============\n\n // Hash of the EIP712 Domain Separator data\n bytes32 public EIP712_DOMAIN_HASH;\n\n // ============ Mutable Storage ============\n\n // true if this contract can process operationss\n bool public g_isOperational;\n\n // operation hash => was executed (or canceled)\n mapping (bytes32 => bool) public g_invalidated;\n\n // ============ Constructor ============\n\n constructor (\n address dolomiteMargin,\n uint256 chainId\n )\n public\n OnlyDolomiteMargin(dolomiteMargin)\n {\n g_isOperational = true;\n\n /* solium-disable-next-line indentation */\n EIP712_DOMAIN_HASH = keccak256(abi.encode(\n EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH,\n keccak256(bytes(EIP712_DOMAIN_NAME)),\n keccak256(bytes(EIP712_DOMAIN_VERSION)),\n chainId,\n address(this)\n ));\n }\n\n // ============ Admin Functions ============\n\n /**\n * The owner can shut down the exchange.\n */\n function shutDown()\n external\n onlyOwner\n {\n g_isOperational = false;\n emit ContractStatusSet(false);\n }\n\n /**\n * The owner can start back up the exchange.\n */\n function startUp()\n external\n onlyOwner\n {\n g_isOperational = true;\n emit ContractStatusSet(true);\n }\n\n // ============ Public Functions ============\n\n /**\n * Allows a signer to permanently cancel an operation on-chain.\n *\n * @param accounts The accounts involved in the operation\n * @param actions The actions involved in the operation\n * @param auth The unsigned authorization of the operation\n */\n function cancel(\n Account.Info[] memory accounts,\n Actions.ActionArgs[] memory actions,\n Authorization memory auth\n )\n public\n {\n bytes32 operationHash = getOperationHash(\n accounts,\n actions,\n auth,\n 0\n );\n Require.that(\n auth.header.signer == msg.sender,\n FILE,\n \"Canceler must be signer\"\n );\n g_invalidated[operationHash] = true;\n emit LogOperationCanceled(operationHash, msg.sender);\n }\n\n /**\n * Submits an operation to DolomiteMargin. Actions for accounts that the msg.sender does not control\n * must be authorized by a signed message. Each authorization can apply to multiple actions at\n * once which must occur in-order next to each other. An empty authorization must be supplied\n * explicitly for each group of actions that do not require a signed message.\n *\n * @param accounts The accounts to forward to DolomiteMargin.operate()\n * @param actions The actions to forward to DolomiteMargin.operate()\n * @param auths The signed authorizations for each group of actions\n * (or unsigned if msg.sender is already authorized)\n */\n function operate(\n Account.Info[] memory accounts,\n Actions.ActionArgs[] memory actions,\n Authorization[] memory auths\n )\n public\n {\n Require.that(\n g_isOperational,\n FILE,\n \"Contract is not operational\"\n );\n\n // cache the index of the first action for this auth\n uint256 actionStartIndex = 0;\n\n // loop over all auths\n for (uint256 authIdx = 0; authIdx < auths.length; authIdx++) {\n Authorization memory auth = auths[authIdx];\n\n // require that the message is not expired\n Require.that(\n auth.header.expiration == 0 || auth.header.expiration >= block.timestamp,\n FILE,\n \"Signed operation is expired\",\n authIdx\n );\n\n // require that the sender matches the authorization\n Require.that(\n auth.header.sender == address(0) || auth.header.sender == msg.sender,\n FILE,\n \"Operation sender mismatch\",\n authIdx\n );\n\n // consider the signer to be msg.sender unless there is a signature\n address signer = msg.sender;\n\n // if there is a signature, then validate it\n if (auth.signature.length != 0) {\n // get the hash of the operation\n bytes32 operationHash = getOperationHash(\n accounts,\n actions,\n auth,\n actionStartIndex\n );\n\n // require that this message is still valid\n Require.that(\n !g_invalidated[operationHash],\n FILE,\n \"Hash already used or canceled\",\n operationHash\n );\n\n // get the signer\n signer = TypedSignature.recover(operationHash, auth.signature);\n\n // require that this signer matches the authorization\n Require.that(\n auth.header.signer == signer,\n FILE,\n \"Invalid signature\"\n );\n\n // consider this operationHash to be used (and therefore no longer valid)\n g_invalidated[operationHash] = true;\n emit LogOperationExecuted(operationHash, signer, msg.sender);\n }\n\n // cache the index of the first action after this auth\n uint256 actionEndIndex = actionStartIndex.add(auth.numActions);\n\n // loop over all actions for which this auth applies\n for (uint256 actionIndex = actionStartIndex; actionIndex < actionEndIndex; actionIndex++) {\n // validate primary account\n Actions.ActionArgs memory action = actions[actionIndex];\n validateAccountOwner(accounts[action.accountId].owner, signer);\n\n // validate second account in the case of a transfer\n if (action.actionType == Actions.ActionType.Transfer) {\n validateAccountOwner(accounts[action.otherAccountId].owner, signer);\n } else {\n Require.that(\n action.actionType != Actions.ActionType.Liquidate,\n FILE,\n \"Cannot perform liquidations\"\n );\n if (\n action.actionType == Actions.ActionType.Trade &&\n DOLOMITE_MARGIN.getIsAutoTraderSpecial(action.otherAddress)\n ) {\n Require.that(\n DOLOMITE_MARGIN.getIsGlobalOperator(msg.sender),\n FILE,\n \"Unpermissioned trade operator\"\n );\n }\n }\n }\n\n // update actionStartIdx\n actionStartIndex = actionEndIndex;\n }\n\n // require that all actions are signed or from msg.sender\n Require.that(\n actionStartIndex == actions.length,\n FILE,\n \"Not all actions are signed\"\n );\n\n // send the operation\n DOLOMITE_MARGIN.operate(accounts, actions);\n }\n\n // ============ Getters ============\n\n /**\n * Returns a bool for each operation. True if the operation is invalid (from being canceled or\n * previously executed).\n */\n function getOperationsAreInvalid(\n bytes32[] memory operationHashes\n )\n public\n view\n returns(bool[] memory)\n {\n uint256 numOperations = operationHashes.length;\n bool[] memory output = new bool[](numOperations);\n\n for (uint256 i = 0; i < numOperations; i++) {\n output[i] = g_invalidated[operationHashes[i]];\n }\n return output;\n }\n\n // ============ Private Helper Functions ============\n\n /**\n * Validates that either the signer or the msg.sender are the accountOwner (or that either are\n * localOperators of the accountOwner).\n */\n function validateAccountOwner(\n address accountOwner,\n address signer\n )\n private\n view\n {\n bool valid =\n msg.sender == accountOwner\n || signer == accountOwner\n || DOLOMITE_MARGIN.getIsLocalOperator(accountOwner, msg.sender)\n || DOLOMITE_MARGIN.getIsLocalOperator(accountOwner, signer);\n\n Require.that(\n valid,\n FILE,\n \"Signer not authorized\",\n signer\n );\n }\n\n /**\n * Returns the EIP712 hash of an Operation message.\n */\n function getOperationHash(\n Account.Info[] memory accounts,\n Actions.ActionArgs[] memory actions,\n Authorization memory auth,\n uint256 startIdx\n )\n private\n view\n returns (bytes32)\n {\n // get the bytes32 hash of each action, then packed together\n bytes32 actionsEncoding = getActionsEncoding(\n accounts,\n actions,\n auth,\n startIdx\n );\n\n // compute the EIP712 hashStruct of an Operation struct\n /* solium-disable-next-line indentation */\n bytes32 structHash = keccak256(abi.encode(\n EIP712_OPERATION_HASH,\n actionsEncoding,\n auth.header\n ));\n\n // compute eip712 compliant hash\n /* solium-disable-next-line indentation */\n return keccak256(abi.encodePacked(\n EIP191_HEADER,\n EIP712_DOMAIN_HASH,\n structHash\n ));\n }\n\n /**\n * Returns the EIP712 encodeData of an Action struct array.\n */\n function getActionsEncoding(\n Account.Info[] memory accounts,\n Actions.ActionArgs[] memory actions,\n Authorization memory auth,\n uint256 startIdx\n )\n private\n pure\n returns (bytes32)\n {\n // store hash of each action\n bytes32[] memory actionsBytes = new bytes32[](auth.numActions);\n\n // for each action that corresponds to the auth\n for (uint256 i = 0; i < auth.numActions; i++) {\n Actions.ActionArgs memory action = actions[startIdx + i];\n\n // if action type has no second account, assume null account\n Account.Info memory otherAccount =\n (Actions.getAccountLayout(action.actionType) == Actions.AccountLayout.OnePrimary)\n ? Account.Info({ owner: address(0), number: 0 })\n : accounts[action.otherAccountId];\n\n // compute the individual hash for the action\n /* solium-disable-next-line indentation */\n actionsBytes[i] = getActionHash(\n action,\n accounts[action.accountId],\n otherAccount\n );\n }\n\n return keccak256(abi.encodePacked(actionsBytes));\n }\n\n /**\n * Returns the EIP712 hashStruct of an Action struct.\n */\n function getActionHash(\n Actions.ActionArgs memory action,\n Account.Info memory primaryAccount,\n Account.Info memory secondaryAccount\n )\n private\n pure\n returns (bytes32)\n {\n /* solium-disable-next-line indentation */\n return keccak256(abi.encode(\n EIP712_ACTION_HASH,\n action.actionType,\n primaryAccount.owner,\n primaryAccount.number,\n getAssetAmountHash(action.amount),\n action.primaryMarketId,\n action.secondaryMarketId,\n action.otherAddress,\n secondaryAccount.owner,\n secondaryAccount.number,\n keccak256(action.data)\n ));\n }\n\n /**\n * Returns the EIP712 hashStruct of an AssetAmount struct.\n */\n function getAssetAmountHash(\n Types.AssetAmount memory amount\n )\n private\n pure\n returns (bytes32)\n {\n /* solium-disable-next-line indentation */\n return keccak256(abi.encode(\n EIP712_ASSET_AMOUNT_HASH,\n amount.sign,\n amount.denomination,\n amount.ref,\n amount.value\n ));\n }\n}\n",
543
- "sourcePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/proxies/SignedOperationProxy.sol",
543
+ "sourcePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/proxies/SignedOperationProxy.sol",
544
544
  "ast": {
545
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/proxies/SignedOperationProxy.sol",
545
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/proxies/SignedOperationProxy.sol",
546
546
  "exportedSymbols": {
547
547
  "SignedOperationProxy": [
548
548
  16231
@@ -604,7 +604,7 @@
604
604
  "unitAlias": ""
605
605
  },
606
606
  {
607
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Account.sol",
607
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Account.sol",
608
608
  "file": "../../protocol/lib/Account.sol",
609
609
  "id": 15393,
610
610
  "nodeType": "ImportDirective",
@@ -620,7 +620,7 @@
620
620
  "unitAlias": ""
621
621
  },
622
622
  {
623
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Actions.sol",
623
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Actions.sol",
624
624
  "file": "../../protocol/lib/Actions.sol",
625
625
  "id": 15395,
626
626
  "nodeType": "ImportDirective",
@@ -636,7 +636,7 @@
636
636
  "unitAlias": ""
637
637
  },
638
638
  {
639
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Require.sol",
639
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Require.sol",
640
640
  "file": "../../protocol/lib/Require.sol",
641
641
  "id": 15397,
642
642
  "nodeType": "ImportDirective",
@@ -652,7 +652,7 @@
652
652
  "unitAlias": ""
653
653
  },
654
654
  {
655
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Types.sol",
655
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Types.sol",
656
656
  "file": "../../protocol/lib/Types.sol",
657
657
  "id": 15399,
658
658
  "nodeType": "ImportDirective",
@@ -668,7 +668,7 @@
668
668
  "unitAlias": ""
669
669
  },
670
670
  {
671
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/helpers/OnlyDolomiteMargin.sol",
671
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/helpers/OnlyDolomiteMargin.sol",
672
672
  "file": "../helpers/OnlyDolomiteMargin.sol",
673
673
  "id": 15401,
674
674
  "nodeType": "ImportDirective",
@@ -684,7 +684,7 @@
684
684
  "unitAlias": ""
685
685
  },
686
686
  {
687
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/lib/TypedSignature.sol",
687
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/lib/TypedSignature.sol",
688
688
  "file": "../lib/TypedSignature.sol",
689
689
  "id": 15403,
690
690
  "nodeType": "ImportDirective",
@@ -12348,7 +12348,7 @@
12348
12348
  "src": "603:16311:33"
12349
12349
  },
12350
12350
  "legacyAST": {
12351
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/proxies/SignedOperationProxy.sol",
12351
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/proxies/SignedOperationProxy.sol",
12352
12352
  "exportedSymbols": {
12353
12353
  "SignedOperationProxy": [
12354
12354
  16231
@@ -12410,7 +12410,7 @@
12410
12410
  "unitAlias": ""
12411
12411
  },
12412
12412
  {
12413
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Account.sol",
12413
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Account.sol",
12414
12414
  "file": "../../protocol/lib/Account.sol",
12415
12415
  "id": 15393,
12416
12416
  "nodeType": "ImportDirective",
@@ -12426,7 +12426,7 @@
12426
12426
  "unitAlias": ""
12427
12427
  },
12428
12428
  {
12429
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Actions.sol",
12429
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Actions.sol",
12430
12430
  "file": "../../protocol/lib/Actions.sol",
12431
12431
  "id": 15395,
12432
12432
  "nodeType": "ImportDirective",
@@ -12442,7 +12442,7 @@
12442
12442
  "unitAlias": ""
12443
12443
  },
12444
12444
  {
12445
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Require.sol",
12445
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Require.sol",
12446
12446
  "file": "../../protocol/lib/Require.sol",
12447
12447
  "id": 15397,
12448
12448
  "nodeType": "ImportDirective",
@@ -12458,7 +12458,7 @@
12458
12458
  "unitAlias": ""
12459
12459
  },
12460
12460
  {
12461
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Types.sol",
12461
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Types.sol",
12462
12462
  "file": "../../protocol/lib/Types.sol",
12463
12463
  "id": 15399,
12464
12464
  "nodeType": "ImportDirective",
@@ -12474,7 +12474,7 @@
12474
12474
  "unitAlias": ""
12475
12475
  },
12476
12476
  {
12477
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/helpers/OnlyDolomiteMargin.sol",
12477
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/helpers/OnlyDolomiteMargin.sol",
12478
12478
  "file": "../helpers/OnlyDolomiteMargin.sol",
12479
12479
  "id": 15401,
12480
12480
  "nodeType": "ImportDirective",
@@ -12490,7 +12490,7 @@
12490
12490
  "unitAlias": ""
12491
12491
  },
12492
12492
  {
12493
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/lib/TypedSignature.sol",
12493
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/lib/TypedSignature.sol",
12494
12494
  "file": "../lib/TypedSignature.sol",
12495
12495
  "id": 15403,
12496
12496
  "nodeType": "ImportDirective",
@@ -24238,95 +24238,12 @@
24238
24238
  }
24239
24239
  },
24240
24240
  "links": {},
24241
- "address": "0xCeeFD27e0542aFA926B87d23936c79c276A48277",
24242
- "transactionHash": "0x28e83802de2a2042403e9497a4091aa1d4a7f243ea0e0bb0130c5786b7797a15"
24243
- },
24244
- "80001": {
24245
- "events": {
24246
- "0x800e9acf7ef6d84d7bc26116f2ecb9d8fc6e4a2562cda6d1c411f66ea7205481": {
24247
- "anonymous": false,
24248
- "inputs": [
24249
- {
24250
- "indexed": false,
24251
- "internalType": "bool",
24252
- "name": "operational",
24253
- "type": "bool"
24254
- }
24255
- ],
24256
- "name": "ContractStatusSet",
24257
- "type": "event"
24258
- },
24259
- "0xeb98d4ec98d06fd7735ff893b47d492a6f12700b6093a6c5bd5a932608727afb": {
24260
- "anonymous": false,
24261
- "inputs": [
24262
- {
24263
- "indexed": true,
24264
- "internalType": "bytes32",
24265
- "name": "operationHash",
24266
- "type": "bytes32"
24267
- },
24268
- {
24269
- "indexed": true,
24270
- "internalType": "address",
24271
- "name": "canceler",
24272
- "type": "address"
24273
- }
24274
- ],
24275
- "name": "LogOperationCanceled",
24276
- "type": "event"
24277
- },
24278
- "0xc567efce0a7476d41074b5c204ed0e44fd548b306cf1dc0c27b8cfac27bc0c2d": {
24279
- "anonymous": false,
24280
- "inputs": [
24281
- {
24282
- "indexed": true,
24283
- "internalType": "bytes32",
24284
- "name": "operationHash",
24285
- "type": "bytes32"
24286
- },
24287
- {
24288
- "indexed": true,
24289
- "internalType": "address",
24290
- "name": "signer",
24291
- "type": "address"
24292
- },
24293
- {
24294
- "indexed": true,
24295
- "internalType": "address",
24296
- "name": "sender",
24297
- "type": "address"
24298
- }
24299
- ],
24300
- "name": "LogOperationExecuted",
24301
- "type": "event"
24302
- },
24303
- "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
24304
- "anonymous": false,
24305
- "inputs": [
24306
- {
24307
- "indexed": true,
24308
- "internalType": "address",
24309
- "name": "previousOwner",
24310
- "type": "address"
24311
- },
24312
- {
24313
- "indexed": true,
24314
- "internalType": "address",
24315
- "name": "newOwner",
24316
- "type": "address"
24317
- }
24318
- ],
24319
- "name": "OwnershipTransferred",
24320
- "type": "event"
24321
- }
24322
- },
24323
- "links": {},
24324
- "address": "0x14c998127E5866f9FA81138D620013471cA2BCC2",
24325
- "transactionHash": "0xb4808b39889f18aa4bbaf4efd7e4c70c3432ed78a7ead717a534108debca3241"
24241
+ "address": "0xf19A2A01B70519f67ADb309a994Ec8c69A967E8b",
24242
+ "transactionHash": "0x97e7bb72dd118b1ebf50edae0f617a24b58bc0f42f5cb958c16eaab87ff0d591"
24326
24243
  }
24327
24244
  },
24328
24245
  "schemaVersion": "3.0.23",
24329
- "updatedAt": "2022-02-04T01:55:00.969Z",
24246
+ "updatedAt": "2022-02-07T07:18:45.049Z",
24330
24247
  "devdoc": {
24331
24248
  "author": "dYdX * Contract for sending operations on behalf of others",
24332
24249
  "methods": {