//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------

(function() {
var ary = new Array(10);
var obj0 = new Object();
var a;
var b;
var c;
var d;
var e;
var f;
var g;
var h;
a = -43801;
b = -64985;
c = 1960;
d = -7764;
e = -17766;
f = -24636;
g = -6747;
h = 21877;
obj0.a = -7460;
obj0.b = -5177;
obj0.c = -13448;
obj0.d = 26228;
obj0.e = 48777;
ary[0] = -53583;
ary[1] = 6419;
ary[100] = 43723;
if(((a | g) >= (a | obj0.e))) {
  if(((f ^ h) < (((-29717 - -47434) + (-28394 >= g)) & h))) {
  } else {
    if(((((obj0.c > c) ? (c ? -31708 : e) : (-35559 & obj0.b)) - ((obj0.b - obj0.a) <= d)) == ((b ^ (45357 ^ obj0.e)) + obj0.e))) {
      c = (((obj0.a ^ d) ^ ((h & f) & e)) ? (((obj0.a - -52819) - (obj0.a * g)) | ((c & a) & (d++ ))) : (((f == 9032) & (62251 & -37165)) | ((obj0.e > 2925) ? obj0.e : (42788 + obj0.a))));
    } else {
    }
    d = ((24267 - (obj0.c++ )) + (c | ((! -64656) + obj0.b)));
  }
  b = ((obj0.e & (c & (h * c))) ^ (((13049 ? e : -6437) ^ c) & (f ^ e)));
} else {
  if(((((e ? e : c) < d) & b) != ((- (obj0.c | obj0.e)) - (c & obj0.b)))) {
  } else {
    if(((((obj0.a <= h) ? a : obj0.c) - e) < (((-52470 <= -27548) == (-61901 + obj0.e)) + obj0.e))) {
    } else {
    }
    if((((h & c) | obj0.a) < (((d > obj0.b) ? g : (obj0.c & h)) ^ c))) {
    } else {
    }
  }
  obj0.d = e;
  obj0.c = ((((-7549 | b) | (+ obj0.e)) * -40296) | (49741 - obj0.d));
}
if(((3187 - e) < (a ^ ((obj0.d >= -15403) ? c : obj0.e)))) {
} else {
  if((((+ (obj0.b + -7681)) ^ (f | (27433 + 22276))) < (((e - obj0.e) | (8801 < b)) + (! (a ? e : obj0.b))))) {
  } else {
    e = (((obj0.c + (16708 ^ e)) & -24225) - (a | obj0.a));
  }
  if((((f - (++ obj0.c)) + obj0.b) != (((obj0.b == d) ? (a ^ f) : d) * ((b > -39719) ? (2408 ^ -58008) : (43532 ? f : obj0.c))))) {
  } else {
    if(((-24799 & (a < h)) == (((d < a) ^ (obj0.d - obj0.c)) - ((obj0.e + g) | a)))) {
    } else {
      f = (((! obj0.d) & e) * (-30069 + -21885));
      h = (+ (g + f));
      c = (((- (-36102 ^ 22533)) + (55794 | (-26043 ? g : c))) + (((obj0.a < obj0.d) ? 62836 : c) + h));
    }
    if(((h - -39689) <= (e ^ d))) {
      obj0.b = ((obj0.a ^ (obj0.a | (h ^ 33393))) ? ((-33072 < f) ^ ((57345 <= -45823) ? (b - 9572) : obj0.a)) : (g * obj0.c));
      a = ((obj0.d | ((f & 51994) * obj0.e)) < (65422 + ((42146 - 1987) | (48407 | c))));
      f = ((g - (e <= e)) ? ((9083 | (e++ )) + (obj0.b - (-9259 ? -50172 : -5510))) : (((b - -32091) * (+ b)) * obj0.b));
    } else {
      b = 20660;
    }
  }
  obj0.e = ((-49280 | 2223) ? (e | obj0.e) : ((obj0.b * e) - ((a - obj0.d) ^ 9276)));
}
if((((obj0.b++ ) * ((obj0.c + -57656) - d)) != (d | (obj0.b <= b)))) {
  if((((g++ ) ^ g) == (obj0.a ^ e))) {
  } else {
    if(((((h ? -21954 : 12317) * -24219) | f) > (obj0.b - (+ d)))) {
      obj0.d = ((((obj0.a <= c) ? (38162 * 58347) : (8268 ^ g)) ^ ((-39323 == 57552) < (b * 53153))) * (h - g));
      f = a;
    } else {
      c = ((((obj0.a >= obj0.e) ? -65440 : obj0.e) * b) - (((-48983 + 50137) | obj0.a) + ((obj0.d ^ 33546) - (f > 48492))));
    }
  }
  obj0.a = -5372;
} else {
}
if(((((a ? 60596 : g) ^ (obj0.a ? b : obj0.e)) ^ (h + (obj0.c ? 49622 : b))) <= (((29651 < -34335) ? (36723 + f) : (g | obj0.c)) + obj0.b))) {
  f = ((a & h) ? (-5809 | ((52058 + obj0.b) ^ obj0.d)) : ((obj0.b ^ (-7613 ^ e)) * h));
  if(((e & ((61017 >= -49037) > (55792 ? 64712 : e))) >= (a ^ c))) {
    obj0.b = -21531;
  } else {
    if((((obj0.d + (c ? obj0.b : b)) | f) < (((c ? 30483 : -29581) * (obj0.b >= b)) - ((-48970 & -43634) - d)))) {
      f = e;
      obj0.a = g;
      obj0.c = e;
    } else {
      a = d;
      c = obj0.b;
    }
  }
  if(((obj0.a * ((-40695 >= obj0.d) ? (10510 * obj0.b) : h)) > ((+ (19890 ^ d)) ^ c))) {
    if(((e + ((-260 + -60986) - g)) > (obj0.d + e))) {
    } else {
    }
    a = ((obj0.b - obj0.e) ^ (((-45572 ? c : obj0.c) ^ obj0.a) - ((-15288 ^ g) & (g - obj0.d))));
  } else {
    if(((((7406 + 36008) + (- 55097)) & d) >= (((obj0.e - -29770) ^ obj0.e) - 40691))) {
      b = (((! (obj0.a | 63697)) + d) + ((obj0.e | (g + d)) + (h & (b >= 14568))));
    } else {
      e = obj0.d;
      f = (((obj0.d >= obj0.b) & b) & (obj0.c + ((e * 12709) * (-65456 ? -29423 : -58626))));
      d = ((obj0.a * -55573) & (h * (c >= (f ^ 56241))));
    }
  }
} else {
  c = ((b & 7586) ^ (((d != g) ? (-30112 | -38694) : (f - -51804)) - b));
  if(((c - e) == (obj0.b ^ e))) {
    if(((obj0.e ^ obj0.d) > (d * f))) {
      obj0.a = c;
      h = ((((h | -39478) + (-953 ^ g)) | a) ? ((obj0.b + g) | ((37947 | h) * (25382 & -16787))) : (d * ((obj0.d >= -36938) ? (24864 > c) : (-11042 + 48348))));
    } else {
      obj0.b = ((g + (d * obj0.a)) & (((h - b) * (obj0.d >= 41454)) - (51924 * g)));
    }
  } else {
    if((((! (+ a)) - ((c * obj0.d) - b)) < ((f ^ (20574 - obj0.d)) + (obj0.a * h)))) {
    } else {
      h = c;
    }
    if(((((-63390 ^ obj0.d) * (obj0.a | -27730)) - (a++ )) >= (obj0.c * (obj0.c & obj0.c)))) {
    } else {
    }
    if(((obj0.a - f) > (((-12060 | -3909) ^ b) + obj0.a))) {
      obj0.c = obj0.a;
    } else {
      h = ((((f++ ) * g) * ((-26008 == 59248) ? (obj0.a | 34938) : (obj0.a ^ -42679))) | (obj0.a - ((20475 >= obj0.c) ? g : d)));
      obj0.b = obj0.c;
    }
  }
}
WScript.Echo("a = " + (a>>3));
WScript.Echo("b = " + (b>>3));
WScript.Echo("c = " + (c>>3));
WScript.Echo("d = " + (d>>3));
WScript.Echo("e = " + (e>>3));
WScript.Echo("f = " + (f>>3));
WScript.Echo("g = " + (g>>3));
WScript.Echo("h = " + (h>>3));
WScript.Echo("obj0.a = " + (obj0.a>>3));
WScript.Echo("obj0.b = " + (obj0.b>>3));
WScript.Echo("obj0.c = " + (obj0.c>>3));
WScript.Echo("obj0.d = " + (obj0.d>>3));
WScript.Echo("obj0.e = " + (obj0.e>>3));
WScript.Echo("ary[0] = " + (ary[0]>>3));
WScript.Echo("ary[1] = " + (ary[1]>>3));
WScript.Echo("ary[100] = " + (ary[100]>>3));
WScript.Echo('done');
})();
