{
  "_format": "hh-sol-artifact-1",
  "contractName": "Formula",
  "sourceName": "contracts/V3/util/Formula.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_angle",
          "type": "uint16"
        }
      ],
      "name": "cos",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "x",
          "type": "uint256"
        }
      ],
      "name": "log2",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "y",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int256[]",
          "name": "list",
          "type": "int256[]"
        }
      ],
      "name": "math",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_angle",
          "type": "uint16"
        }
      ],
      "name": "sin",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "y",
          "type": "uint256"
        }
      ],
      "name": "sqrt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_angle",
          "type": "uint16"
        }
      ],
      "name": "tan",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50611366806100206000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80635456bf1314610067578063564a6b941461008c578063677342ce1461009f57806381a1e900146100b25780639ade2e5d146100c5578063f985779c146100d8575b600080fd5b61007a610075366004610e8f565b6100eb565b60405190815260200160405180910390f35b61007a61009a366004610ea8565b6102a4565b61007a6100ad366004610e8f565b610301565b61007a6100c0366004610ee9565b610372565b61007a6100d3366004610ea8565b610a41565b61007a6100e6366004610ea8565b610a5f565b604080517ff8f9cbfae6cc78fbefe7cdc3a1793dfcf4f0e8bbd8cec470b6a28a7a5a3e1efd81527ff5ecf1b3e9debc68e1d9cfabc5997135bfb7a7a3938b7b606b5b4b3f2f1f0ffe60208201527ff6e4ed9ff2d6b458eadcdf97bd91692de2d4da8fd2d0ac50c6ae9a8272523616818301527fc8c0b887b0a8a4489c948c7f847c6125746c645c544c444038302820181008ff60608201527ff7cae577eec2a03cf3bad76fb589591debb2dd67e0aa9834bea6925f6a4a2e0e60808201527fe39ed557db96902cd38ed14fad815115c786af479b7e8324736353433727170760a08201527fc976c13bb96e881cb166a933a55e490d9d56952b8d4e801485467d236242260660c08201527f753a6d1b65325d0c552a4d1345224105391a310b29122104190a11030902010060e0820152610100808201909252600160f81b6001600160801b600160401b640100000000620100006010600460026000198c019081041790810417908104178881041790810417908104179081041790810417017e818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff0281900460ff039091015104600160ff1b909211020190565b60006102b4611000614000610fbd565b61ffff168261ffff1611156102e357816102d2614000611000610fbd565b6102dc9190610fbd565b91506102f2565b6102ef61100083610fe0565b91505b6102fb82610a5f565b92915050565b6000806003831115610363575081600061031c60028361101c565b610327906001611030565b90505b8181101561035d57905080600281610342818761101c565b61034c9190611030565b610356919061101c565b905061032a565b506102fb565b82156102fb5750600192915050565b6000610391604051806040016040528060608152602001600081525090565b825167ffffffffffffffff8111156103ab576103ab610ed3565b6040519080825280602002602001820160405280156103d4578160200160208202803683370190505b5081526000805b8451811015610a09576104068582815181106103f9576103f9611048565b6020026020010151610b72565b1561043c5761043785828151811061042057610420611048565b602002602001015184610b8490919063ffffffff16565b6109f7565b61045e85828151811061045157610451611048565b6020026020010151610bba565b156109f75760006104716003600a611142565b61047c906001611030565b86838151811061048e5761048e611048565b602002602001015114156104c95760006104a785610bcd565b905060006104b486610bcd565b90506104c08282611151565b925050506109eb565b6104d56003600a611142565b6104e0906002611030565b8683815181106104f2576104f2611048565b6020026020010151141561052457600061050b85610bcd565b9050600061051886610bcd565b90506104c08282611192565b6105306003600a611142565b61053b906003611030565b86838151811061054d5761054d611048565b6020026020010151141561057f57600061056685610bcd565b9050600061057386610bcd565b90506104c082826111d1565b61058b6003600a611142565b610596906004611030565b8683815181106105a8576105a8611048565b602002602001015114156106325760006105c185610bcd565b905060006105ce86610bcd565b905081156105e7576105e08282611256565b925061062b565b60405162461bcd60e51b815260206004820152601060248201526f0666f726d756c612064697669646520360841b6044820152600195506064015b60405180910390fd5b50506109eb565b61063e6003600a611142565b610649906005611030565b86838151811061065b5761065b611048565b6020026020010151141561068d57600061067485610bcd565b9050600061068186610bcd565b90506104c08282611284565b6106996003600a611142565b6106a4906006611030565b8683815181106106b6576106b6611048565b6020026020010151141561076f5760006106cf85610bcd565b90508015806106de5750806001145b156106ec5760019150610769565b6001811315610728576001815b60008113156107205761070c81836111d1565b91508061071881611290565b9150506106f9565b509150610769565b60405162461bcd60e51b81526020600482015260166024820152753337b936bab63090109036bab9ba1034b73a32b3b2b960511b6044820152606401610622565b506109eb565b61077b6003600a611142565b610786906007611030565b86838151811061079857610798611048565b602002602001015114156107c45760006107b185610bcd565b90506107bc81610301565b9150506109eb565b6107d06003600a611142565b6107db906008611030565b8683815181106107ed576107ed611048565b60200260200101511415610800576109eb565b61080c6003600a611142565b610817906009611030565b86838151811061082957610829611048565b6020026020010151141561089957600061084285610bcd565b9050600081131561085d57610856816100eb565b9150610769565b60405162461bcd60e51b81526020600482015260116024820152700666f726d756c61206c6f672078203e203607c1b6044820152606401610622565b6108a56003600a611142565b6108b090600a611030565b8683815181106108c2576108c2611048565b602002602001015114156108e65760006108db85610bcd565b90506107bc81610a5f565b6108f26003600a611142565b6108fd90600b611030565b86838151811061090f5761090f611048565b6020026020010151141561093357600061092885610bcd565b90506107bc816102a4565b61093f6003600a611142565b61094a90600c611030565b86838151811061095c5761095c611048565b602002602001015114156109eb57600061097585610bcd565b9050610980816102a4565b156109955761098e81610a41565b91506109e9565b60405162461bcd60e51b8152602060048201526024808201527f666f726d756c612074616e2078206e6f74206265202b2d2850492f32202b206b6044820152632a50492960e01b6064820152608401610622565b505b6109f58482610b84565b505b80610a01816112ae565b9150506103db565b5080610a3457602082015115610a2a57610a2282610bcd565b949350505050565b5060009392505050565b50620f423e199392505050565b6000610a4c826102a4565b610a5583610a5f565b6102fb9190611256565b600080610a8861ffff8416600880610a796004600c6112c9565b610a8391906112c9565b610c49565b90506000610aa161ffff85166004610a8381600c6112c9565b90506110008416156120008516151581610acf5782610ac2600160106112c9565b610acc91906112c9565b92505b6000610ada84610c80565b61ffff1690506000610af5610af0866001611030565b610c80565b61ffff1690506000610b0960086002611284565b87610b1485856112c9565b610b1e91906112e0565b610b28919061101c565b905060008515610b4357610b3c8285611151565b9050610b50565b610b4d8284611192565b90505b8415610b6557610b62600019826111d1565b90505b9998505050505050505050565b6000610b7d82610cc3565b1592915050565b8151602083018051839291610b98826112ae565b905281518110610baa57610baa611048565b6020026020010181815250505050565b600080610bc683610cc3565b1392915050565b6000610bdb82602001511590565b15610be857506000919050565b60008260000151836020018051610bfe906112ff565b9081905281518110610c1257610c12611048565b602002602001015190508260000151836020015181518110610c3657610c36611048565b6000602091820292909201015292915050565b60006001610c58846002611284565b610c6291906112c9565b610c6d836002611284565b610c77908661101c565b16949350505050565b60008060405180606001604052806022815260200161130f60229139905060006002610cad856001611030565b610cb791906112e0565b91909101519392505050565b600080610cd26003600a611142565b610cdd906001611030565b831415610cec575060016102fb565b610cf86003600a611142565b610d03906002611030565b831415610d12575060016102fb565b610d1e6003600a611142565b610d29906003611030565b831415610d38575060026102fb565b610d446003600a611142565b610d4f906004611030565b831415610d5e575060026102fb565b610d6a6003600a611142565b610d75906005611030565b831415610d84575060036102fb565b610d906003600a611142565b610d9b906006611030565b831415610daa575060046102fb565b610db66003600a611142565b610dc1906007611030565b831415610dd0575060046102fb565b610ddc6003600a611142565b610de7906008611030565b831415610df6575060046102fb565b610e026003600a611142565b610e0d906009611030565b831415610e1c575060046102fb565b610e286003600a611142565b610e3390600a611030565b831415610e42575060046102fb565b610e4e6003600a611142565b610e5990600b611030565b831415610e68575060046102fb565b610e746003600a611142565b610e7f90600c611030565b8314156102fb5750600492915050565b600060208284031215610ea157600080fd5b5035919050565b600060208284031215610eba57600080fd5b813561ffff81168114610ecc57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215610efc57600080fd5b823567ffffffffffffffff80821115610f1457600080fd5b818501915085601f830112610f2857600080fd5b813581811115610f3a57610f3a610ed3565b8060051b604051601f19603f83011681018181108582111715610f5f57610f5f610ed3565b604052918252848201925083810185019188831115610f7d57600080fd5b938501935b82851015610f9b57843584529385019392850192610f82565b98975050505050505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015610fd857610fd8610fa7565b039392505050565b600061ffff808316818516808303821115610ffd57610ffd610fa7565b01949350505050565b634e487b7160e01b600052601260045260246000fd5b60008261102b5761102b611006565b500490565b6000821982111561104357611043610fa7565b500190565b634e487b7160e01b600052603260045260246000fd5b600181815b8085111561109957816000190482111561107f5761107f610fa7565b8085161561108c57918102915b93841c9390800290611063565b509250929050565b6000826110b0575060016102fb565b816110bd575060006102fb565b81600181146110d357600281146110dd576110f9565b60019150506102fb565b60ff8411156110ee576110ee610fa7565b50506001821b6102fb565b5060208310610133831016604e8410600b841016171561111c575081810a6102fb565b611126838361105e565b806000190482111561113a5761113a610fa7565b029392505050565b6000610ecc60ff8416836110a1565b600080821280156001600160ff1b038490038513161561117357611173610fa7565b600160ff1b839003841281161561118c5761118c610fa7565b50500190565b60008083128015600160ff1b8501841216156111b0576111b0610fa7565b6001600160ff1b03840183138116156111cb576111cb610fa7565b50500390565b60006001600160ff1b03818413828413808216868404861116156111f7576111f7610fa7565b600160ff1b600087128281168783058912161561121657611216610fa7565b6000871292508782058712848416161561123257611232610fa7565b8785058712818416161561124857611248610fa7565b505050929093029392505050565b60008261126557611265611006565b600160ff1b82146000198414161561127f5761127f610fa7565b500590565b6000610ecc83836110a1565b6000600160ff1b8214156112a6576112a6610fa7565b506000190190565b60006000198214156112c2576112c2610fa7565b5060010190565b6000828210156112db576112db610fa7565b500390565b60008160001904831182151516156112fa576112fa610fa7565b500290565b6000816112a6576112a6610fa756fe00000c8c18f9252830fb3c56471c51335a8262f16a6d70e276417a7c7d897f617fffa2646970667358221220bc697734073808eedd56cf095f57bffa0a906fbb77da0e70fb90af24bd4a6e9b64736f6c63430008080033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c80635456bf1314610067578063564a6b941461008c578063677342ce1461009f57806381a1e900146100b25780639ade2e5d146100c5578063f985779c146100d8575b600080fd5b61007a610075366004610e8f565b6100eb565b60405190815260200160405180910390f35b61007a61009a366004610ea8565b6102a4565b61007a6100ad366004610e8f565b610301565b61007a6100c0366004610ee9565b610372565b61007a6100d3366004610ea8565b610a41565b61007a6100e6366004610ea8565b610a5f565b604080517ff8f9cbfae6cc78fbefe7cdc3a1793dfcf4f0e8bbd8cec470b6a28a7a5a3e1efd81527ff5ecf1b3e9debc68e1d9cfabc5997135bfb7a7a3938b7b606b5b4b3f2f1f0ffe60208201527ff6e4ed9ff2d6b458eadcdf97bd91692de2d4da8fd2d0ac50c6ae9a8272523616818301527fc8c0b887b0a8a4489c948c7f847c6125746c645c544c444038302820181008ff60608201527ff7cae577eec2a03cf3bad76fb589591debb2dd67e0aa9834bea6925f6a4a2e0e60808201527fe39ed557db96902cd38ed14fad815115c786af479b7e8324736353433727170760a08201527fc976c13bb96e881cb166a933a55e490d9d56952b8d4e801485467d236242260660c08201527f753a6d1b65325d0c552a4d1345224105391a310b29122104190a11030902010060e0820152610100808201909252600160f81b6001600160801b600160401b640100000000620100006010600460026000198c019081041790810417908104178881041790810417908104179081041790810417017e818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff0281900460ff039091015104600160ff1b909211020190565b60006102b4611000614000610fbd565b61ffff168261ffff1611156102e357816102d2614000611000610fbd565b6102dc9190610fbd565b91506102f2565b6102ef61100083610fe0565b91505b6102fb82610a5f565b92915050565b6000806003831115610363575081600061031c60028361101c565b610327906001611030565b90505b8181101561035d57905080600281610342818761101c565b61034c9190611030565b610356919061101c565b905061032a565b506102fb565b82156102fb5750600192915050565b6000610391604051806040016040528060608152602001600081525090565b825167ffffffffffffffff8111156103ab576103ab610ed3565b6040519080825280602002602001820160405280156103d4578160200160208202803683370190505b5081526000805b8451811015610a09576104068582815181106103f9576103f9611048565b6020026020010151610b72565b1561043c5761043785828151811061042057610420611048565b602002602001015184610b8490919063ffffffff16565b6109f7565b61045e85828151811061045157610451611048565b6020026020010151610bba565b156109f75760006104716003600a611142565b61047c906001611030565b86838151811061048e5761048e611048565b602002602001015114156104c95760006104a785610bcd565b905060006104b486610bcd565b90506104c08282611151565b925050506109eb565b6104d56003600a611142565b6104e0906002611030565b8683815181106104f2576104f2611048565b6020026020010151141561052457600061050b85610bcd565b9050600061051886610bcd565b90506104c08282611192565b6105306003600a611142565b61053b906003611030565b86838151811061054d5761054d611048565b6020026020010151141561057f57600061056685610bcd565b9050600061057386610bcd565b90506104c082826111d1565b61058b6003600a611142565b610596906004611030565b8683815181106105a8576105a8611048565b602002602001015114156106325760006105c185610bcd565b905060006105ce86610bcd565b905081156105e7576105e08282611256565b925061062b565b60405162461bcd60e51b815260206004820152601060248201526f0666f726d756c612064697669646520360841b6044820152600195506064015b60405180910390fd5b50506109eb565b61063e6003600a611142565b610649906005611030565b86838151811061065b5761065b611048565b6020026020010151141561068d57600061067485610bcd565b9050600061068186610bcd565b90506104c08282611284565b6106996003600a611142565b6106a4906006611030565b8683815181106106b6576106b6611048565b6020026020010151141561076f5760006106cf85610bcd565b90508015806106de5750806001145b156106ec5760019150610769565b6001811315610728576001815b60008113156107205761070c81836111d1565b91508061071881611290565b9150506106f9565b509150610769565b60405162461bcd60e51b81526020600482015260166024820152753337b936bab63090109036bab9ba1034b73a32b3b2b960511b6044820152606401610622565b506109eb565b61077b6003600a611142565b610786906007611030565b86838151811061079857610798611048565b602002602001015114156107c45760006107b185610bcd565b90506107bc81610301565b9150506109eb565b6107d06003600a611142565b6107db906008611030565b8683815181106107ed576107ed611048565b60200260200101511415610800576109eb565b61080c6003600a611142565b610817906009611030565b86838151811061082957610829611048565b6020026020010151141561089957600061084285610bcd565b9050600081131561085d57610856816100eb565b9150610769565b60405162461bcd60e51b81526020600482015260116024820152700666f726d756c61206c6f672078203e203607c1b6044820152606401610622565b6108a56003600a611142565b6108b090600a611030565b8683815181106108c2576108c2611048565b602002602001015114156108e65760006108db85610bcd565b90506107bc81610a5f565b6108f26003600a611142565b6108fd90600b611030565b86838151811061090f5761090f611048565b6020026020010151141561093357600061092885610bcd565b90506107bc816102a4565b61093f6003600a611142565b61094a90600c611030565b86838151811061095c5761095c611048565b602002602001015114156109eb57600061097585610bcd565b9050610980816102a4565b156109955761098e81610a41565b91506109e9565b60405162461bcd60e51b8152602060048201526024808201527f666f726d756c612074616e2078206e6f74206265202b2d2850492f32202b206b6044820152632a50492960e01b6064820152608401610622565b505b6109f58482610b84565b505b80610a01816112ae565b9150506103db565b5080610a3457602082015115610a2a57610a2282610bcd565b949350505050565b5060009392505050565b50620f423e199392505050565b6000610a4c826102a4565b610a5583610a5f565b6102fb9190611256565b600080610a8861ffff8416600880610a796004600c6112c9565b610a8391906112c9565b610c49565b90506000610aa161ffff85166004610a8381600c6112c9565b90506110008416156120008516151581610acf5782610ac2600160106112c9565b610acc91906112c9565b92505b6000610ada84610c80565b61ffff1690506000610af5610af0866001611030565b610c80565b61ffff1690506000610b0960086002611284565b87610b1485856112c9565b610b1e91906112e0565b610b28919061101c565b905060008515610b4357610b3c8285611151565b9050610b50565b610b4d8284611192565b90505b8415610b6557610b62600019826111d1565b90505b9998505050505050505050565b6000610b7d82610cc3565b1592915050565b8151602083018051839291610b98826112ae565b905281518110610baa57610baa611048565b6020026020010181815250505050565b600080610bc683610cc3565b1392915050565b6000610bdb82602001511590565b15610be857506000919050565b60008260000151836020018051610bfe906112ff565b9081905281518110610c1257610c12611048565b602002602001015190508260000151836020015181518110610c3657610c36611048565b6000602091820292909201015292915050565b60006001610c58846002611284565b610c6291906112c9565b610c6d836002611284565b610c77908661101c565b16949350505050565b60008060405180606001604052806022815260200161130f60229139905060006002610cad856001611030565b610cb791906112e0565b91909101519392505050565b600080610cd26003600a611142565b610cdd906001611030565b831415610cec575060016102fb565b610cf86003600a611142565b610d03906002611030565b831415610d12575060016102fb565b610d1e6003600a611142565b610d29906003611030565b831415610d38575060026102fb565b610d446003600a611142565b610d4f906004611030565b831415610d5e575060026102fb565b610d6a6003600a611142565b610d75906005611030565b831415610d84575060036102fb565b610d906003600a611142565b610d9b906006611030565b831415610daa575060046102fb565b610db66003600a611142565b610dc1906007611030565b831415610dd0575060046102fb565b610ddc6003600a611142565b610de7906008611030565b831415610df6575060046102fb565b610e026003600a611142565b610e0d906009611030565b831415610e1c575060046102fb565b610e286003600a611142565b610e3390600a611030565b831415610e42575060046102fb565b610e4e6003600a611142565b610e5990600b611030565b831415610e68575060046102fb565b610e746003600a611142565b610e7f90600c611030565b8314156102fb5750600492915050565b600060208284031215610ea157600080fd5b5035919050565b600060208284031215610eba57600080fd5b813561ffff81168114610ecc57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215610efc57600080fd5b823567ffffffffffffffff80821115610f1457600080fd5b818501915085601f830112610f2857600080fd5b813581811115610f3a57610f3a610ed3565b8060051b604051601f19603f83011681018181108582111715610f5f57610f5f610ed3565b604052918252848201925083810185019188831115610f7d57600080fd5b938501935b82851015610f9b57843584529385019392850192610f82565b98975050505050505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015610fd857610fd8610fa7565b039392505050565b600061ffff808316818516808303821115610ffd57610ffd610fa7565b01949350505050565b634e487b7160e01b600052601260045260246000fd5b60008261102b5761102b611006565b500490565b6000821982111561104357611043610fa7565b500190565b634e487b7160e01b600052603260045260246000fd5b600181815b8085111561109957816000190482111561107f5761107f610fa7565b8085161561108c57918102915b93841c9390800290611063565b509250929050565b6000826110b0575060016102fb565b816110bd575060006102fb565b81600181146110d357600281146110dd576110f9565b60019150506102fb565b60ff8411156110ee576110ee610fa7565b50506001821b6102fb565b5060208310610133831016604e8410600b841016171561111c575081810a6102fb565b611126838361105e565b806000190482111561113a5761113a610fa7565b029392505050565b6000610ecc60ff8416836110a1565b600080821280156001600160ff1b038490038513161561117357611173610fa7565b600160ff1b839003841281161561118c5761118c610fa7565b50500190565b60008083128015600160ff1b8501841216156111b0576111b0610fa7565b6001600160ff1b03840183138116156111cb576111cb610fa7565b50500390565b60006001600160ff1b03818413828413808216868404861116156111f7576111f7610fa7565b600160ff1b600087128281168783058912161561121657611216610fa7565b6000871292508782058712848416161561123257611232610fa7565b8785058712818416161561124857611248610fa7565b505050929093029392505050565b60008261126557611265611006565b600160ff1b82146000198414161561127f5761127f610fa7565b500590565b6000610ecc83836110a1565b6000600160ff1b8214156112a6576112a6610fa7565b506000190190565b60006000198214156112c2576112c2610fa7565b5060010190565b6000828210156112db576112db610fa7565b500390565b60008160001904831182151516156112fa576112fa610fa7565b500290565b6000816112a6576112a6610fa756fe00000c8c18f9252830fb3c56471c51335a8262f16a6d70e276417a7c7d897f617fffa2646970667358221220bc697734073808eedd56cf095f57bffa0a906fbb77da0e70fb90af24bd4a6e9b64736f6c63430008080033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
