| /*! https://github.com/jensarps/AMD-feature/blob/master/examples/targets/dynamic.js*/
// This is the dynamic implementation map containing
// tests.
/*!# @license webfan (C) Till Wehowski, Webfan.de - All rights reserved. !*/
define(function () {
let implementations = {};
let  isArray = function (it) {
        return {}.toString.call(it) == '[object Array]';
};
let isAvailable = function (impl, name) {
        var isFunction = typeof impl.isAvailable === 'function';
        return (isFunction && impl.isAvailable(name)) || (!isFunction && impl.isAvailable);
};
let getFeature = function(name) {
  var featureInfo = implementations[name];
    if (isArray(featureInfo)) {
      for (var i = 0, m = featureInfo.length; i < m; i++) {
        if (isAvailable(featureInfo[i], name)) {
			if('undefined'!==typeof featureInfo[i].module){
			     if('function'===typeof featureInfo[i].module){
						return featureInfo[i].module();							
			     }	else{
						  return featureInfo[i].module;							
						}							
			}else if('undefined'!==typeof featureInfo[i].implementation){
			     if('function'===typeof featureInfo[i].implementation){
						return require( featureInfo[i].implementation() );							
			     }	else{
						  return require( featureInfo[i].implementation );							
						}							
			}										
             return featureInfo[i];
        }
      }
    } else {
      return featureInfo;
   }
   
   return false;
};
implementations = {
	// "tellme" only has one implementation,
	// so we just point to the file that contains
	// it - but we need to omit the ".js".
	//tellme: 'tellme/tellme',
													
											
													
													
													
													
	// "color" has multiple implementations,
	// so we provide tests for the plugin to decide
	// what implementation to load.
	browser : [
		{
			module: function(){
                return new Function("return this")();
            },
			
			isAvailable: function(){
				return !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document);
			}
		}
	],
	worker : [
		{
			module: function(){
                return new Function("return self")();
            },
			
			isAvailable: function(){
				return !(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document) && typeof importScripts !== 'undefined';
			}
		}
	],
// Modernizr
	Modernizr : [
		{
			implementation:'webfan/bootcache!modernizr',
			
			isAvailable: true
		}
	],
													
		/*		broken todo							
	fetchAPI : [
		{
			implementation:'webfan/bootcache!fetch/frdl.fetch',
			
			isAvailable: 'undefined'===typeof global.fetch
		},
		{
			module: function(){
                return global.fetch;
            },
			
			isAvailable: 'undefined'!==typeof global.fetch
		}													
	],
*/
	es6Symbol : [
		{
			implementation:'webfan/bootcache!es6-symbol',
			
			isAvailable: 'function'!==typeof Symbol
		},
		{
			module: function(){
                return Symbol;
            },
			
			isAvailable: 'function'===typeof Symbol
		}
	],
shimming : [
 {
	module: function(module){
			var shimming = {};										
									
    
// Polyfill for older browsers.  Newer ones already have Object.create.
if (!Object.create) {
  // You don't need to understand this, but
  Object.create = function(proto) {
    // this constructor does nothing,
    function cons() {}
    // and we assign it a prototype,
    cons.prototype = proto;
    // so that the new object has the given proto without any side-effects.
    return new cons();
  };
}
    function forEach(fn, scope) {
      for(var i = 0, len = this.length; i < len; ++i) {
      fn.call(scope, this[i], i, this);
      }
    }
											  
   if ( !Array.prototype.forEach ) {
      Array.prototype.forEach =forEach;
   }	
		
  if ( !NodeList.prototype.forEach ) {
     NodeList.prototype.forEach = forEach;
  }	
       shimming.forEach = forEach;
       shimming.getFeature = getFeature;
        shimming.config = requirejs.s.contexts._.config;
		  
		 
		  
		//   shimming.fetch = getFeature('fetchAPI');
		   shimming.customElements = getFeature('customElements');
		  
		   shimming.Proxy = getFeature('Proxy');
		  
		 
		  
		  
       return shimming;
    },
			
  isAvailable: true
 }//shims[0]
],//shims
		  
// $Compiler->add_library('document-register-element-master/build/document-register-element');		
		  
		  
		  
						
		
		  
		  
		  
		  
		  
		  
	STAGE : [
      {
		module: function() {
		   try{
              // require.s.contexts._.config.paths.vm='webfan/vm';
               return {
                   name : (!document.querySelector('head').hasAttribute('frdl-stage') ) 
		                    ? 'DEFAULTS'
		                      :  document.querySelector('head[frdl-stage]')
                              .getAttribute('frdl-stage'),
                   supported : true,
                   STAGE : 'DEFAULTS' ,
                   main : 'webfan/bootcache!frdl',
                   vn : 3
               };
           }catch(e){
              return undefined;
           }
		},
       isAvailable : (!document.querySelector('head').hasAttribute('frdl-stage') ) || 
                     (!!document.querySelector('head').hasAttribute('frdl-stage')
                        && 'DEFAULTS' === document.querySelector('head[frdl-stage]')
                              .getAttribute('frdl-stage')
                     )
     },
		  
		  
      {
		module: function() {
		   try{
            //  require.s.contexts._.config.paths.vm='webfan/vm-frdl';
               return {
                   name : document.querySelector('head[frdl-stage]')
                              .getAttribute('frdl-stage'),
                   supported : true,
                   STAGE : 'LEGACY',
                   main : '/api-d/4/js-api/library.js?package=webfan-websites&scripts=,options,',
                   vn : -1
               };
           }catch(e){
              return undefined;
           }
		},
       isAvailable : !!document.querySelector('head').hasAttribute('frdl-stage')
                        && 'LEGACY' === document.querySelector('head[frdl-stage]')
                              .getAttribute('frdl-stage')
     },
      {
		module: function() {
		   try{
               return {
                   name : document.querySelector('head[frdl-stage]')
                              .getAttribute('frdl-stage'),
                   supported : true,
                   STAGE : 'STABLES' ,
                   main : '/api-d/4/js-api/library.js',
                   vn : 0
               };
           }catch(e){
              return undefined;
           }
		},
       isAvailable : !!document.querySelector('head').hasAttribute('frdl-stage')
                        && 'STABLES' === document.querySelector('head[frdl-stage]')
                              .getAttribute('frdl-stage')
     },
      {
		module: function() {
		   try{
               return {
                   name : document.querySelector('head[frdl-stage]')
                              .getAttribute('frdl-stage'),
                   supported : true,
                   STAGE : 'BETAS' ,
                   main : '/cdn/frdl/flow/libraries/flow/dev9.js',
                   vn : 2
               };
           }catch(e){
              return undefined;
           }
		},
       isAvailable :  !!document.querySelector('head').hasAttribute('frdl-stage')
                        && 'BETAS' === document.querySelector('head[frdl-stage]')
                              .getAttribute('frdl-stage')
     },
      {
		module: function() {
		   try{
              // require.s.contexts._.config.paths.vm='webfan/vm';
               
		       require.s.contexts._.config.paths['frdl']='frdl8x';
               require.s.contexts._.config.paths['libraries/flow/ui']=location.protocol + '//' + 'webfan.de/cdn/frdl/flow/libraries/flow/ui8x';
		  
		  
               return {
                   name : document.querySelector('head[frdl-stage]')
                              .getAttribute('frdl-stage'),
                   supported : true,
                   STAGE : 'EXPERIMENTAL' ,
                   main : 'webfan/bootcache!frdl',
                   vn : 3
               };
           }catch(e){
              return undefined;
           }
		},
       isAvailable :  !!document.querySelector('head').hasAttribute('frdl-stage')
                        && 'EXPERIMENTAL' === document.querySelector('head[frdl-stage]')
                              .getAttribute('frdl-stage')
     },
      {
       isAvailable : false
     }
   ]//STAGE
};
			
		   Object.defineProperty(implementations, 'frdlweb',
				{
					'get':function()
					{
								   
						return implementations.shimming;
					}
		   });				
							
 // console.dir(getFeature('shimming').getFeature('STAGE'));
	implementations.vm = [
      {
		implementation : 'webfan/bootcache!webfan/vm',
        isAvailable : (0 < getFeature('STAGE').vn) ? true : false 
     },
      {
		implementation : 'webfan/bootcache!webfan/vm-frdl',
        isAvailable : (0 >= getFeature('STAGE').vn) ? true : false 
     }
   ];//vm
		  
		  
		  
	implementations.customElements = [
		{
			implementation:'webfan/bootcache!webcomponents-lite',
			
			isAvailable: true 
		}//,
		  /*
		{
			implementation:'webfan/bootcache!document-register-element-master/build/document-register-element.node',
			
			isAvailable: 0===0 || // 
		      false===  getFeature('browser') || false===!!document || 'function'!==typeof document.registerElement 
		},
		{
			module: function(){
                return customElements;
            },
			
			isAvailable:  0===1 &&//
		                  !!document && 'function'===typeof document.registerElement
		}	
		  */
	];
						  
		  
		  
	implementations.Proxy = [
		{
			implementation:'webfan/bootcache!webfan/navigator/shim-proxy',
			
			isAvailable:  'undefined'===typeof global.Proxy
		},
		{
			module: function(){
                return global.Proxy;
            },
			
			isAvailable: 'undefined'!==typeof global.Proxy
		}													
	];		  
		  
		  
 return implementations;
});
 |