//-------------------------------------------------------------------------------------------------------
// 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 = -14205;
b = -28703;
c = -59391;
d = 36342;
e = 58270;
f = -7306;
g = 23525;
h = 54089;
obj0.a = 42122;
obj0.b = -56536;
obj0.c = -27982;
obj0.d = 15482;
obj0.e = -33443;
ary[0] = 20697;
ary[1] = 60414;
ary[100] = 14305;
if((((obj0.c++ ) & ((64580 - -30967) & (obj0.b * a))) >= ((obj0.a > obj0.d) * c))) {
  if((((obj0.b ^ (-10432 <= 47672)) + ((c ^ 53061) - (+ obj0.b))) != (((3100 < b) == (g & obj0.d)) * (e | obj0.a)))) {
  } else {
    b = ((obj0.c * obj0.c) | ((obj0.e ^ (c & obj0.d)) & obj0.c));
    a = obj0.a;
  }
} else {
}
b = h;
a = obj0.c;
if((((g ^ obj0.e) - e) == (-37492 | ((47333 <= 61592) ? (5395 + obj0.b) : (-61422 + f))))) {
  if((((e++ ) ^ obj0.b) == ((obj0.d * (obj0.b ^ f)) + (-11275 - (a * c))))) {
    obj0.b = (((-32018 != (46305 | 6765)) & h) * (g * 21968));
  } else {
    h = ((25581 - ((a == b) ? (48046 & g) : e)) >= (((-45842 == 10999) ? (obj0.b * h) : 60145) + (obj0.d * obj0.d)));
  }
  e = a;
  if(((((f ? b : -34244) * (++ h)) | (! (+ -17837))) != ((! 38102) - (obj0.a & obj0.d)))) {
    if(((((38168 - -17782) != obj0.c) & (31499 <= (obj0.c ? -40307 : 6136))) <= ((b + 13189) + ((-37121 * 54445) != (++ obj0.c))))) {
      a = obj0.e;
      h = d;
    } else {
      g = ((((d ? b : e) | (f < c)) | 28345) & ((obj0.e & (-42632 | c)) + (24930 + h)));
    }
    d = ((((60475 <= f) ? b : e) + g) ^ ((+ (b > e)) & (f - (- -61704))));
    if(((39399 & -62850) == (((53987 > -15494) >= (obj0.c++ )) - ((637 & d) & obj0.e)))) {
      d = ((-50099 - f) * (((obj0.e >= -58447) ? (16759 + -48736) : (+ obj0.d)) & (obj0.c * a)));
      d = obj0.a;
    } else {
      obj0.b = ((((obj0.a ^ obj0.e) * (-19597 == 26914)) | b) | (((15300 - 36561) ^ (a | -4553)) - ((obj0.c <= 57009) ? (-47709 < 35668) : obj0.e)));
      a = obj0.a;
    }
  } else {
    b = ((((+ 13949) ^ (a | b)) & ((d + obj0.a) == 41835)) <= (a + ((obj0.b != obj0.c) * f)));
    if(((((h | -32532) + (g++ )) - ((- -11150) * b)) <= (((34818 == a) ? (obj0.c ^ a) : -45452) * ((29806 + e) - (-59783 ? g : obj0.b))))) {
      b = 56107;
      e = c;
      b = ((((20101 | obj0.d) | b) + (-49287 ^ (obj0.d | 30932))) * (obj0.e - ((4169 < b) ? (++ obj0.c) : obj0.a)));
    } else {
      b = obj0.b;
      c = ((((obj0.e == e) ? obj0.e : (obj0.a - obj0.a)) - (f * (! 5120))) ? (21956 & e) : (b | f));
    }
  }
} else {
}
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');
})();
