//-------------------------------------------------------------------------------------------------------
// 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 = -25623;
b = -24350;
c = -42868;
d = 62534;
e = 58859;
f = 17408;
g = -28041;
h = 14771;
obj0.a = 47661;
obj0.b = 34551;
obj0.c = -7743;
obj0.d = 1376;
obj0.e = -62767;
ary[0] = 14138;
ary[1] = -18605;
ary[100] = 54023;
obj0.d = ((f & ((obj0.d - -46818) + (55730 ^ e))) | (f ^ ((32829 >= g) ? f : (b & c))));
if(((((-21733 < 43373) ? f : (-45208 | a)) & ((h ? 10210 : b) + c)) < (a - d))) {
  d = (((g | (a ? -19786 : c)) & ((g == obj0.a) ? (16539 * -59483) : obj0.b)) > (d & ((-55271 & -53491) ^ g)));
} else {
  if(((((obj0.b * -54601) & (f + obj0.c)) ^ ((obj0.c == -22531) ? (g ? -39698 : obj0.c) : a)) <= (h ^ 45076))) {
  } else {
    obj0.b = ((((-58080 < 34937) ^ f) & obj0.c) ? (g + (16710 - h)) : (obj0.c & a));
    if(((f - obj0.d) >= (((17697 >= g) ? h : obj0.a) ^ (h >= (f & -25815))))) {
      h = g;
    } else {
    }
    b = ((23824 | -4025) - ((e <= (-48930 | 4420)) | f));
  }
  if(((e & obj0.e) != (d | ((a & 40430) >= (-38608 ^ -22002))))) {
    if(((-32795 + ((-60457 + -26148) - 30444)) != (g - e))) {
      obj0.c = h;
      obj0.e = ((b * (obj0.e & obj0.e)) == (b - d));
      c = obj0.a;
    } else {
      c = d;
      b = ((((e + -64409) + (obj0.a ? obj0.a : c)) + b) ? ((h * (26958 - -18544)) & (f <= a)) : (47417 - ((-48064 > g) ? obj0.a : (15779 & obj0.c))));
      obj0.d = ((obj0.d ^ (b <= (-8876 - 50758))) ^ ((h - a) + ((obj0.e < obj0.d) ? obj0.a : (20532 > obj0.b))));
    }
    if(((b * d) <= (((obj0.b ^ -46202) != (a ? obj0.e : g)) * ((f == 1286) ? (e - 20032) : (62335 ^ -49276))))) {
    } else {
      obj0.a = ((((f ^ 31829) ^ (e - g)) & ((-37046 ? 58454 : obj0.d) * d)) & (f ^ 26806));
    }
    obj0.d = h;
  } else {
    if((((! obj0.b) + (obj0.a + (g ? obj0.a : 31342))) > (h * (obj0.a * (obj0.b * 18595))))) {
      f = obj0.a;
    } else {
    }
    if(((16004 & obj0.c) <= (((63272 * d) >= (++ g)) & (h == f)))) {
      obj0.a = ((g & (obj0.c | (45604 | 32467))) ^ ((++ c) ^ obj0.d));
      obj0.b = b;
    } else {
      obj0.a = obj0.d;
      b = d;
      obj0.a = obj0.a;
    }
  }
  if(((((-15286 != obj0.a) >= a) & ((-42823 ^ 22930) <= (obj0.c - obj0.a))) < (f ^ ((-31098 < h) ? (obj0.d ^ -21381) : f)))) {
    obj0.b = (((! obj0.a) * ((12479 + b) < obj0.a)) ^ (g ^ 1742));
    f = ((((obj0.b + 764) | (a * d)) - obj0.a) <= (((! 35654) - (-29362 | obj0.a)) | -4066));
  } else {
    b = ((-51101 - ((+ h) ^ (a - f))) + (obj0.a - ((g | g) & (6204 ^ c))));
    f = (((- h) + (h + e)) >= (c * b));
    if(((((-25384 >= -27976) | (obj0.c < -2152)) * e) >= ((obj0.e - g) & obj0.e))) {
      obj0.b = ((((obj0.b ? -17833 : -4098) * h) * (obj0.b >= c)) >= (obj0.a | h));
      e = d;
    } else {
      e = f;
    }
  }
}
if(((a * d) != (((47213 * -565) - b) ^ c))) {
} else {
  b = ((((-30802 >= h) & (20971 & obj0.c)) - obj0.e) * (((3327 * obj0.b) + (b * h)) | ((e <= obj0.c) ? e : (-39289 != -16270))));
  if((((- (obj0.c & 11119)) * (53478 > (-42577 * 41951))) < (e + ((obj0.b | h) + obj0.d)))) {
    a = ((((45610 >= f) ? -41189 : obj0.b) + a) ^ (((obj0.c & g) * (29575 | -34837)) + (-14157 & (obj0.e ^ f))));
    if(((((++ h) - g) + d) != ((obj0.b ^ (b & 31717)) + -29120))) {
      h = -43642;
      d = ((((e ^ 30933) - (4271 ^ 8414)) - ((h | e) > (e - obj0.c))) * (((54410 ^ 55964) * (-49170 * obj0.c)) & (d | obj0.b)));
    } else {
      b = obj0.a;
    }
  } else {
    if(((((+ -34635) & (obj0.e ? -13136 : f)) & obj0.d) <= (((obj0.d * 36487) < obj0.a) * a))) {
    } else {
    }
    if(((((b ^ c) - (obj0.e - 12511)) ^ (63354 | (51341 ? obj0.d : -25214))) != (obj0.b * (h + -2712)))) {
      obj0.a = b;
      g = ((((b == d) ? (63728 ? -60648 : -18925) : obj0.d) + ((-48022 ? b : 5958) ^ obj0.e)) - (obj0.c * ((-44806 - f) & (35851 & obj0.e))));
      obj0.d = ((((c & a) == (33722 + e)) ^ ((f > 64204) | (! -30447))) ? ((b - (44765 ^ obj0.e)) & ((e + obj0.a) + c)) : (d & b));
    } else {
      obj0.b = c;
      e = c;
      obj0.e = d;
    }
    e = ((((50381 * obj0.e) ^ (-28172 ^ obj0.d)) + (e + (-43505 + obj0.d))) - ((obj0.e == f) + (g * (64443 & -58793))));
  }
  obj0.a = obj0.a;
}
if(((((11948 < -27132) ? obj0.a : (obj0.e ^ obj0.d)) | (g * obj0.a)) < (((a <= -2644) != (48709 & -37272)) ^ ((obj0.c * 41021) != (obj0.e ? 29340 : 51888))))) {
  if(((((19170 | obj0.b) + (d & obj0.a)) & ((g == 12834) ? (obj0.c ^ d) : b)) == (obj0.c * (-51273 | (52155 | 60961))))) {
  } else {
  }
  b = -63485;
} else {
  b = f;
  if((((obj0.a | (39622 * -23167)) - ((obj0.c < -59270) ? (obj0.a ? 25441 : obj0.d) : (h > e))) <= (((10832 < -52082) ? obj0.c : obj0.a) ^ obj0.c))) {
  } else {
    if((((e & 43649) & ((a < obj0.d) | (a ^ -46381))) != (d + h))) {
    } else {
      obj0.d = ((((obj0.e | obj0.a) * obj0.c) & a) - ((f++ ) * (-49045 > (- e))));
    }
    obj0.e = ((obj0.b | ((d++ ) == (-30723 - 35693))) - (((obj0.b >= d) * (-60295 * h)) ^ (38460 ^ obj0.e)));
    b = a;
  }
  if((((h + obj0.c) ^ a) != ((- (1592 - 42140)) * (e | obj0.d)))) {
    if(((((obj0.e < -55183) * (f ? obj0.c : 44022)) * g) <= (f * obj0.b))) {
      obj0.d = obj0.b;
      obj0.b = ((((-22129 ^ a) < b) - ((51646 - -6640) - (a | -8899))) & (39554 - obj0.c));
      d = (++ g);
    } else {
      c = obj0.d;
      g = (+ ((f & (a > h)) - obj0.b));
    }
    obj0.e = ((obj0.c & obj0.d) - (a & -58017));
  } else {
    g = h;
    c = obj0.c;
    if(((g | (obj0.b & (54376 != 9670))) != ((g * (16811 ^ -46602)) | ((-485 * 56794) - (d ^ -57421))))) {
      f = (b++ );
      obj0.b = h;
    } else {
      d = ((f + 23600) & (((-57272 ^ 4698) >= (-45923 * d)) & obj0.a));
    }
  }
}
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');
})();
