#include <iostream>
using namespace std;

class Point {
public:
  double x, y;
  Point(double x = 0, double y = 0):x(x), y(y){}
  Point operator +(Point p) { return Point(x+p.x, y+p.y);}
  Point operator -(Point p) { return Point(x-p.x, y-p.y);}
  Point operator *(double t) { return Point(x*t, y*t);}
};

typedef Point Vector;

int naiseki(Vector a, Vector b);

int isTyokko(Point a1, Point a2, Point b1, Point b2) {
  if(naiseki(Vector(a1.x-a2.x, a1.y-a2.y), Vector(b1.x-b2.x, b1.y-b2.y)) == 0) {
    return 1;
  } else {
    return 0;
  }
}

int naiseki(Vector a, Vector b) {
  return a.x*b.x + a.y*b.y;
}

int main() {
  Point a, b, c, d;
  while(scanf("%lf %lf %lf %lf %lf %lf %lf %lf", &a.x, &a.y, &b.x, &b.y, &c.x, &c.y, &d.x, &d.y) != EOF) {
    if(isTyokko(a, b, c, d)) printf("YES\n");
    else printf("NO\n");
  }
}