| 'use strict'; | 
| /* global ActiveXObject -- old IE, WSH */ | 
| var anObject = require('../internals/an-object'); | 
| var definePropertiesModule = require('../internals/object-define-properties'); | 
| var enumBugKeys = require('../internals/enum-bug-keys'); | 
| var hiddenKeys = require('../internals/hidden-keys'); | 
| var html = require('../internals/html'); | 
| var documentCreateElement = require('../internals/document-create-element'); | 
| var sharedKey = require('../internals/shared-key'); | 
|   | 
| var GT = '>'; | 
| var LT = '<'; | 
| var PROTOTYPE = 'prototype'; | 
| var SCRIPT = 'script'; | 
| var IE_PROTO = sharedKey('IE_PROTO'); | 
|   | 
| var EmptyConstructor = function () { /* empty */ }; | 
|   | 
| var scriptTag = function (content) { | 
|   return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; | 
| }; | 
|   | 
| // Create object with fake `null` prototype: use ActiveX Object with cleared prototype | 
| var NullProtoObjectViaActiveX = function (activeXDocument) { | 
|   activeXDocument.write(scriptTag('')); | 
|   activeXDocument.close(); | 
|   var temp = activeXDocument.parentWindow.Object; | 
|   // eslint-disable-next-line no-useless-assignment -- avoid memory leak | 
|   activeXDocument = null; | 
|   return temp; | 
| }; | 
|   | 
| // Create object with fake `null` prototype: use iframe Object with cleared prototype | 
| var NullProtoObjectViaIFrame = function () { | 
|   // Thrash, waste and sodomy: IE GC bug | 
|   var iframe = documentCreateElement('iframe'); | 
|   var JS = 'java' + SCRIPT + ':'; | 
|   var iframeDocument; | 
|   iframe.style.display = 'none'; | 
|   html.appendChild(iframe); | 
|   // https://github.com/zloirock/core-js/issues/475 | 
|   iframe.src = String(JS); | 
|   iframeDocument = iframe.contentWindow.document; | 
|   iframeDocument.open(); | 
|   iframeDocument.write(scriptTag('document.F=Object')); | 
|   iframeDocument.close(); | 
|   return iframeDocument.F; | 
| }; | 
|   | 
| // Check for document.domain and active x support | 
| // No need to use active x approach when document.domain is not set | 
| // see https://github.com/es-shims/es5-shim/issues/150 | 
| // variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 | 
| // avoid IE GC bug | 
| var activeXDocument; | 
| var NullProtoObject = function () { | 
|   try { | 
|     activeXDocument = new ActiveXObject('htmlfile'); | 
|   } catch (error) { /* ignore */ } | 
|   NullProtoObject = typeof document != 'undefined' | 
|     ? document.domain && activeXDocument | 
|       ? NullProtoObjectViaActiveX(activeXDocument) // old IE | 
|       : NullProtoObjectViaIFrame() | 
|     : NullProtoObjectViaActiveX(activeXDocument); // WSH | 
|   var length = enumBugKeys.length; | 
|   while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; | 
|   return NullProtoObject(); | 
| }; | 
|   | 
| hiddenKeys[IE_PROTO] = true; | 
|   | 
| // `Object.create` method | 
| // https://tc39.es/ecma262/#sec-object.create | 
| // eslint-disable-next-line es/no-object-create -- safe | 
| module.exports = Object.create || function create(O, Properties) { | 
|   var result; | 
|   if (O !== null) { | 
|     EmptyConstructor[PROTOTYPE] = anObject(O); | 
|     result = new EmptyConstructor(); | 
|     EmptyConstructor[PROTOTYPE] = null; | 
|     // add "__proto__" for Object.getPrototypeOf polyfill | 
|     result[IE_PROTO] = O; | 
|   } else result = NullProtoObject(); | 
|   return Properties === undefined ? result : definePropertiesModule.f(result, Properties); | 
| }; |