code: func opcodeNot(op *parsedOpcode, vm *Engine) error {
  	m, err := vm.dstack.PopInt()
  	if err != nil {
  		return err
  	}
  
  	if m == 0 {
  		vm.dstack.PushInt(scriptNum(1))
  	} else {
  		vm.dstack.PushInt(scriptNum(0))
  	}
  	return nil
  }
docs: // opcodeNot treats the top item on the data stack as an integer and replaces
  // it with its "inverted" value (0 becomes 1, non-zero becomes 0).
  //
  // NOTE: While it would probably make more sense to treat the top item as a
  // boolean, and push the opposite, which is really what the intention of this
  // opcode is, it is extremely important that is not done because integers are
  // interpreted differently than booleans and the consensus rules for this opcode
  // dictate the item is interpreted as an integer.
  //
  // Stack transformation (x2==0): [... x1 0] -> [... x1 1]
  // Stack transformation (x2!=0): [... x1 1] -> [... x1 0]
  // Stack transformation (x2!=0): [... x1 17] -> [... x1 0]