//-------------------------------------------------------------------------------------------------------
// 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 = 7753;
b = -4223;
c = -29884;
d = 53489;
e = -33034;
f = 52569;
g = -63989;
h = 17833;
obj0.a = -64686;
obj0.b = -61474;
obj0.c = 38032;
obj0.d = 22727;
obj0.e = -27925;
ary[0] = 51558;
ary[1] = 32841;
ary[100] = 22232;
if((((obj0.b < 61868) * ((20314 - b) <= obj0.c)) >= (((obj0.d ^ h) & (obj0.e > 65038)) * obj0.e))) {
  if(((obj0.a * a) >= (((-15087 < f) | (c ^ obj0.d)) + ((-9605 != g) ? c : (-59628 * h))))) {
  } else {
    obj0.a = ((((+ e) | (-65525 - a)) * obj0.c) | ((+ e) ^ (b ^ e)));
    h = g;
  }
} else {
  c = ((obj0.a + e) == (((15800 * -18823) == a) & d));
  h = ((((-45639 ? 65268 : h) - obj0.e) - ((-4082 ^ c) + (-26428 ? g : obj0.d))) ^ (((-9430 - obj0.c) | a) + -26636));
  if((((-20868 ^ (-42367 & 7945)) ^ obj0.c) == (a * ((b + -49923) <= -56704)))) {
  } else {
  }
}
d = ((((obj0.d != 25892) ^ (f + 64061)) ^ ((obj0.e - 50389) ^ -62495)) * (f * a));
if(((obj0.a * e) != (obj0.d + obj0.d))) {
  if(((d ^ ((-22779 - -29730) < (-17495 - -17984))) != (c + (! e)))) {
    if(((c - b) >= ((obj0.b + (18021 + d)) * a))) {
      obj0.d = ((a + (! (a * -3053))) ? (((obj0.e + 53358) != (-26594 ? d : d)) & obj0.b) : (a - ((a + d) | obj0.a)));
      b = (((obj0.a ^ (h ? 17644 : -51147)) ^ ((obj0.e * 63329) - (16301 & c))) < (obj0.d | ((c ? h : 57512) >= obj0.c)));
      c = obj0.b;
    } else {
      f = ((-7132 + h) ^ (((obj0.d < c) ^ (60814 ^ obj0.e)) | (g & (29918 ^ -17406))));
      d = ((e | ((d - -28199) | f)) | (obj0.d | c));
    }
    g = obj0.e;
    h = (+ (((a > e) ? (-24755 - e) : (60030 > 20684)) - ((g > f) ? (obj0.a - -10976) : (37572 - 49928))));
  } else {
    obj0.a = d;
  }
} else {
  if(((c ^ ((8205 - c) + e)) != (-58974 - ((-15533 + 3865) ^ (11452 ^ 37102))))) {
  } else {
    d = ((((b & 11240) & (e * a)) & ((obj0.c ^ 12697) <= c)) + ((obj0.e | c) & h));
    if((((-27880 | h) + ((38316 * -55392) ^ (obj0.d & -8916))) != (((21160 < g) ? (g >= a) : -47140) | c))) {
      obj0.d = ((obj0.a | (! (obj0.d & 33323))) == (62497 * (27311 <= h)));
      h = ((a - h) * (obj0.c * c));
      c = (((f & obj0.e) | f) * (h ^ a));
    } else {
      obj0.c = ((g ^ b) + (((-21481 >= -12490) ? (d + 39817) : (f & -47466)) | ((h ? h : h) | g)));
    }
  }
}
if(((h + ((-27874 == c) ? (obj0.d ? 12584 : 25228) : (g + obj0.c))) >= (((-8249 != b) ? (-30492 + e) : c) ^ (obj0.c + (e ? -5534 : -36024))))) {
  if(((((e | -51752) - (-49078 * d)) & g) < (e ^ f))) {
    c = ((-32435 ^ (obj0.e - d)) == (b & (c * (obj0.a & 3171))));
  } else {
    if(((((-46645 * h) * (58813 - f)) * e) < (((obj0.e & 15390) & obj0.a) * ((c | 60391) == (a | -15935))))) {
      c = ((b ^ obj0.d) ^ ((g * (-41652 - -51833)) ^ ((-27812 * 45443) * b)));
    } else {
      obj0.c = ((((obj0.c | -53293) - (-13839 ? b : 51750)) + -20982) | (((b != obj0.b) ? g : (9222 + obj0.b)) ^ obj0.c));
    }
    if((((f ^ (-56321 + 56153)) & a) != (((35328 ? 47489 : -16517) + (-63509 > obj0.d)) | obj0.b))) {
      e = obj0.d;
      obj0.e = ((((59642 & obj0.a) ^ (h ? d : 34484)) ^ ((++ h) - obj0.d)) - (((f * obj0.b) + (25875 * f)) & -24166));
      d = ((((obj0.b | obj0.e) ^ (g - e)) + g) & (((c <= obj0.e) ^ (d + e)) & (obj0.e * (-8215 * -37467))));
    } else {
      h = a;
    }
  }
} else {
  obj0.e = ((h | (++ obj0.c)) <= (((13050 ^ obj0.e) | (e ? -9653 : 39425)) ^ obj0.e));
  if((((61168 ^ (g & a)) & ((28602 + 20258) - obj0.b)) >= (32678 - g))) {
  } else {
    obj0.c = (((obj0.a * obj0.d) * 62274) ^ ((obj0.b & (9579 * -64909)) * obj0.b));
    obj0.c = 2262;
    if(((((-55121 & 28520) * (g & 3683)) + d) >= ((obj0.b - (- obj0.c)) * e))) {
      obj0.d = (((41857 | (43012 ? h : -47072)) | ((32952 > 28259) ? (c * 16445) : (obj0.c * -35969))) - (((e + 46925) * (g * g)) + -44082));
      c = (- (((7352 ^ -12344) != -26931) + ((obj0.d | -23609) - (-55163 <= 53395))));
    } else {
    }
  }
  if(((((obj0.b * 29571) * -20722) - (b++ )) == (((obj0.e++ ) - (b ? -24619 : obj0.d)) * (-9280 >= (29781 ^ obj0.e))))) {
    if(((((43117 ? -1264 : b) == (21825 ^ -31842)) & e) != ((obj0.c & 30390) ^ h))) {
    } else {
    }
  } else {
    d = b;
    b = g;
    if(((a ^ -15681) > (c - ((18112 < -527) + 2685)))) {
    } else {
      e = obj0.b;
    }
  }
}
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');
})();
