#include <iostream>
#include <complex>
#include <cmath>
using namespace std;
 
//内積
double dot(complex<double> z1, complex<double> z2) {
    return z1.real()*z2.real() + z1.imag()*z2.imag();
}
 
int main(int argc, char** argv) {
    const double EPS = 1e-10;
    double xA, yA, xB, yB, xC, yC, xD, yD;
    complex<double> a, b, c, d;
    while(cin >> xA >> yA >> xB >> yB >> xC >> yC >> xD >> yD) {
        a.real(xA); a.imag(yA);
        b.real(xB); b.imag(yB);
        c.real(xC); c.imag(yC);
        d.real(xD); d.imag(yD);
        if(abs(dot(a-b, c-d)) < EPS) { //ABとCDの内積が0ならば直交
            cout << "YES" << endl;
        }else {
            cout << "NO" << endl;
        }
    }
    return 0;
}
