UNPKG

549 kBSource Map (JSON)View Raw
1{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/mime-db/db.json","src/index.js","src/core/index.js","src/plugins/FileInput.js","src/plugins/MetaData.js","src/plugins/Informer.js","src/plugins/ProgressBar.js","src/plugins/Dashboard/index.js","src/plugins/Plugin.js","src/plugins/DragDrop/index.js","src/plugins/Dummy.js","src/plugins/GoogleDrive/index.js","src/plugins/Webcam/index.js","src/plugins/Tus10.js","src/plugins/Multipart.js","src/core/Core.js","src/core/Utils.js","src/core/html.js","src/core/UppySocket.js","src/plugins/Dashboard/Dashboard.js","src/plugins/Dashboard/icons.js","src/plugins/GoogleDrive/AuthView.js","src/plugins/GoogleDrive/Error.js","src/plugins/Webcam/WebcamIcon.js","src/plugins/Webcam/CameraScreen.js","src/plugins/Webcam/PermissionsScreen.js","src/uppy-base/src/plugins/Provider.js","src/plugins/GoogleDrive/new/Browser.js","src/uppy-base/src/plugins/Webcam.js","node_modules/yo-yo/index.js","src/core/Translator.js","src/locales/en_US.js","node_modules/tus-js-client/lib.es5/index.js","node_modules/es6-promise/dist/es6-promise.js","src/plugins/Dashboard/FileList.js","src/plugins/Dashboard/Tabs.js","src/plugins/Dashboard/FileCard.js","src/plugins/Dashboard/UploadBtn.js","src/plugins/Dashboard/ProgressCircle.js","src/plugins/Dashboard/StatusBar.js","src/plugins/Webcam/CameraIcon.js","src/uppy-base/src/utils/dataURItoFile.js","src/plugins/GoogleDrive/new/Breadcrumbs.js","src/plugins/GoogleDrive/new/Table.js","node_modules/drag-drop/index.js","node_modules/whatwg-fetch/fetch.js","node_modules/pretty-bytes/index.js","node_modules/yo-yo/update-events.js","node_modules/tus-js-client/lib.es5/upload.js","node_modules/tus-js-client/lib.es5/browser/storage.js","node_modules/namespace-emitter/index.js","node_modules/browserify/node_modules/process/browser.js","node_modules/mime-types/index.js","src/plugins/Dashboard/FileItem.js","node_modules/bel/index.js","node_modules/morphdom/src/index.js","src/plugins/GoogleDrive/new/Breadcrumb.js","src/plugins/GoogleDrive/new/TableRow.js","node_modules/tus-js-client/lib.es5/fingerprint.js","node_modules/tus-js-client/lib.es5/error.js","node_modules/tus-js-client/lib.es5/browser/request.js","node_modules/tus-js-client/lib.es5/browser/source.js","node_modules/tus-js-client/lib.es5/browser/base64.js","node_modules/path-browserify/index.js","node_modules/flatten/index.js","node_modules/run-parallel/index.js","node_modules/number-is-nan/index.js","src/plugins/Dashboard/FileItemProgress.js","node_modules/mime-db/index.js","src/plugins/GoogleDrive/new/TableColumn.js","node_modules/extend/index.js","node_modules/hyperx/index.js","node_modules/on-load/index.js","node_modules/global/document.js","node_modules/resolve-url/resolve-url.js","node_modules/hyperscript-attribute-to-property/index.js","node_modules/global/window.js"],"names":["_index","require","_Plugin","_index3","_Dummy","_index5","_FileInput","_index7","_index9","_ProgressBar","_Informer","_MetaData","_Tus","_Multipart","locales","Core","Plugin","Dummy","ProgressBar","Informer","DragDrop","GoogleDrive","FileInput","Tus10","Multipart","Dashboard","MetaData","Webcam","_Core","_Plugin2","_Utils","_html","core","opts","_classCallCheck","this","_this","_possibleConstructorReturn","call","id","title","type","defaultOptions","target","replaceTargetContent","multipleFiles","text","i18n","pretty","_extends","render","bind","handleInputChange","ev","_this2","log","files","_Utils2","default","toArray","forEach","file","emitter","emit","source","name","data","state","hiddenInputStyle","input","_html2","_templateObject2","_templateObject3","click","install","plugin","mount","addInitialMeta","metaFields","fields","setState","on","fileID","item","obj","value","updateMeta","showInformer","msg","duration","informer","isHidden","setTimeout","newInformer","getState","hideInformer","_templateObject","_this3","bus","fixed","progress","totalProgress","_dragDrop","_Dashboard","_prettyBytes","_icons","DashboardUI","inline","semiTransparent","defaultTabIcon","panelSelectorPrefix","showProgressDetails","hideModal","showModal","addTarget","actions","hideAllPanels","showPanel","initEvents","handleDrop","pauseAll","resumeAll","callerPluginId","constructor","callerPluginName","callerPluginIcon","icon","callerPluginType","focus","modal","newTargets","targets","slice","push","map","document","body","classList","remove","add","querySelector","showModalTrigger","trigger","addEventListener","event","keyCode","_dragDrop2","el","fileId","fileCardFor","uploadedCount","smart_count","_this4","getTotalSpeed","totalSpeed","getSpeed","getTotalETA","totalSeconds","getETA","_this5","newFiles","Object","keys","filter","uploadStarted","uploadStartedFiles","completeFiles","uploadComplete","inProgressFiles","isPaused","inProgressFilesArray","_prettyBytes2","totalETA","prettyETA","isAllComplete","isAllPaused","length","acquirers","activeAcquirer","acquirer","progressindicators","addFile","removeFile","startUpload","pauseUpload","showFileCard","fileCardDone","meta","info","_Dashboard2","totalFileCount","autoProceed","container","onPaste","handlePaste","_yoYo","update","newEl","_yoYo2","innerHTML","appendChild","Target","targetPluginName","targetPlugin","getPlugin","selectorTarget","props","defaultOpts","isDragDropSupported","checkDragDropSupport","div","createElement","window","firstInput","onSelect","next","preventDefault","stopPropagation","onSubmit","strange","addFakeFileJustToTest","blob","Blob","bla","_Provider","_AuthView","_Browser","_Error","Google","_Provider2","host","provider","filterItems","filterQuery","getFolder","getNextFolder","handleRowClick","logout","handleDemoAuth","sortByTitle","sortByDate","googleDrive","authenticated","folders","directories","activeRow","filterInput","checkAuthentication","then","updateState","console","newState","fetch","method","credentials","headers","Accept","Content-Type","res","status","error","Error","statusText","response","json","catch","err","arguments","undefined","list","items","mimeType","index","findIndex","dir","updatedDirectories","concat","extend","tagFile","isRemote","remote","url","handleError","_this6","location","href","ok","getFileType","fileTypes","application/vnd.google-apps.folder","application/vnd.google-apps.document","application/vnd.google-apps.spreadsheet","application/vnd.google-apps.presentation","image/jpeg","image/png","fileExtension","toUpperCase","e","folder","toLowerCase","indexOf","sorting","sortedFiles","sort","fileA","fileB","localeCompare","sortedFolders","folderA","folderB","a","Date","modifiedByMeDate","b","_state$googleDrive","_Error2","authState","btoa","JSON","stringify","redirect","split","link","_AuthView2","demo","browserProps","_Browser2","_Webcam","_WebcamIcon","_CameraScreen","_PermissionsScreen","userMedia","protocol","match","_WebcamIcon2","enableFlash","params","swfURL","width","height","dest_width","dest_height","image_format","jpeg_quality","enable_flash","force_flash","flip_horiz","fps","upload_name","constraints","flashNotDetectedText","noInterfaceFoundText","unfreeze_snap","start","takeSnapshot","webcam","_Webcam2","stream","videoStream","cameraReady","cameraError","now","video","image","getImage","useTheFlash","URL","createObjectURL","_CameraScreen2","onSnapshot","getSWFHTML","src","_PermissionsScreen2","init","_tusJsClient","_UppySocket","resume","allowPause","pauseResume","action","updatedFiles","inProgressUpdatedFiles","wasPaused","updatedFile","upload","current","total","_Promise","resolve","reject","_tusJsClient2","Upload","metadata","endpoint","onError","onProgress","bytesUploaded","bytesTotal","uploader","onSuccess","abort","uploadRemote","regex","exec","token","socket","_UppySocket2","progressData","close","uploadFiles","uploaders","parseInt","Promise","all","selectForUpload","filesForUpload","addResumableUploadsCapabilityFlag","newCapabilities","capabilities","resumableUploads","fieldName","responseUrlFieldName","bundle","formPost","FormData","append","xhr","XMLHttpRequest","lengthComputable","loaded","resp","parse","uploadURL","open","send","i","result","_Translator","_namespaceEmitter","_en_US","debug","types","plugins","translator","_Translator2","translate","initSocket","_namespaceEmitter2","global","UppyState","uppyLog","UppyAddFile","_Uppy","updateAll","pluginType","stateUpdate","newMeta","fileName","fileType","fileTypeGeneral","fileTypeSpecific","getFileNameAndExtension","generateFileID","newFile","extension","general","specific","percentage","size","addThumbnail","readFile","imgDataURI","createImageThumbnail","thumbnail","preview","calculateProgress","Math","round","toFixed","inProgress","progressMax","progressAll","isOnline","online","navigator","onLine","wasOffline","use","ee","pluginName","existsPluginAlready","foundPlugin","iteratePlugins","installAll","run","flatten","arr","apply","isTouchDevice","maxTouchPoints","$","selector","ctx","$$","els","Array","prototype","querySelectorAll","truncateString","str","substr","secondsToTime","rawSeconds","hours","floor","minutes","seconds","groupBy","array","groupingFn","reduce","key","xs","get","set","Map","every","predicateFn","replace","_len","objs","_key","assign","getProportionalImageHeight","img","newWidth","aspect","newHeight","_mimeTypes2","lookup","fullFileName","re","fileExt","fileObj","reader","FileReader","readAsDataURL","Image","newImageWidth","newImageHeight","canvas","getContext","drawImage","toDataURL","dataURItoBlob","dataURI","toFile","binary","atob","charCodeAt","File","Uint8Array","dataURItoFile","copyToClipboard","textToCopy","fallbackString","textArea","setAttribute","position","top","left","padding","border","outline","boxShadow","background","select","magicCopyFailed","removeChild","prompt","successful","execCommand","makeWorker","script","webkitURL","Worker","code","toString","substring","lastIndexOf","worker","fileProgress","timeElapsed","uploadSpeed","bytesRemaining","secondsRemaining","time","hoursStr","minutesStr","secondsStr","makeCachingFunction","cachedEl","lastUpdate","_mimeTypes","UppySocket","queued","isOpen","WebSocket","onopen","first","payload","onclose","_handleMessage","onmessage","once","handler","message","clipboardData","kind","getAsFile","closeIcon","_Tabs2","_FileCard2","done","_FileList2","_UploadBtn2","newFileCount","_StatusBar2","complete","_FileList","_Tabs","_FileCard","_UploadBtn","_ProgressCircle","_StatusBar","iconCopy","iconResume","iconPause","_templateObject4","iconEdit","_templateObject5","localIcon","_templateObject6","_templateObject7","pluginIcon","_templateObject8","checkIcon","_templateObject9","iconAudio","_templateObject10","iconFile","_templateObject11","iconText","_templateObject12","uploadIcon","_templateObject13","dashboardBgIcon","_templateObject14","demoLink","_CameraIcon","_CameraIcon2","_getName","s","charAt","join","Provider","isAuthenticated","directory","_Breadcrumbs","_Table","filteredFolders","filteredFiles","_Breadcrumbs2","_Table2","columns","handleFileDoubleClick","handleFolderDoubleClick","_dataURItoFile","_userMedia","defaultParams","stop","detectFlash","getUserMedia","getMediaDevices","mediaDevices","reset","mozGetUserMedia","webkitGetUserMedia","userAgent","RegExp","$1","mozURL","msURL","audio","SHOCKWAVE_FLASH","SHOCKWAVE_FLASH_AX","FLASH_MIME_TYPE","win","nav","hasFlash","_typeof","desc","description","mimeTypes","enabledPlugin","ActiveXObject","ax","ver","GetVariable","preview_active","unfreeze","getVideoTracks","tracks","getMovie","_releaseCamera","base_url","scpts","getElementsByTagName","idx","len","getAttribute","flashvars","escape","movie","getElementById","_snap","msStop","onended","onerror","pause","mozSrcObject","live","panel","_configure","videoWidth","videoHeight","dataUrl","_dataURItoFile2","bel","morphdom","defaultEvents","module","exports","fromNode","toNode","copier","f","t","events","nodeName","onBeforeElUpdated","Translator","strings","_en_US2","interpolate","phrase","options","String","dollarRegex","dollarBillsYall","arg","hasOwnProperty","replacement","plural","pluralize","en_US","chooseFile","youHaveChosen","orDragDrop","filesChosen","0","1","filesUploaded","selectToUpload","closeModal","importFrom","dashboardWindowTitle","dashboardTitle","copyLinkToClipboardSuccess","copyLinkToClipboardFallback","localDisk","dropPasteImport","numberOfSelectedFiles","uploadAllNewFiles","n","Uppy","_interopRequireDefault","__esModule","_upload","_upload2","_storage","_window","isSupported","canStoreURLs","lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","lib$es6$promise$asap$$attemptVertx","r","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","child","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$PROMISE_ID","lib$es6$promise$$internal$$makePromise","_state","lib$es6$promise$$internal$$invokeCallback","_result","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","promise","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$$internal$$nextId","lib$es6$promise$$internal$$id","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","lib$es6$promise$enumerator$$validationError","lib$es6$promise$polyfill$$polyfill","local","self","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","random","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","_eachEntry","entry","c","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","_FileItem","_FileItem2","getIconByMime","fileCard","tempStoreMeta","attributes","renderMetaFields","field","placeholder","togglePauseResume","statusBar","_Breadcrumb","_Breadcrumb2","_TableRow","column","_TableRow2","active","iconLink","handleClick","handleDoubleClick","owner","dragDrop","elem","listeners","onDragOver","dataTransfer","clearTimeout","timeout","dropEffect","onDragLeave","removeDragClass","onDrop","pos","clientX","y","clientY","parallel","cb","processEntry","webkitGetAsEntry","results","fullPath","stopEvent","removeEventListener","readEntries","entries_","doneEntries","isFile","isDirectory","createReader","normalizeName","test","normalizeValue","iteratorFor","iterator","shift","support","iterable","Symbol","Headers","getOwnPropertyNames","consumed","bodyUsed","fileReaderReady","onload","readBlobAsArrayBuffer","readAsArrayBuffer","readBlobAsText","readAsText","Body","_initBody","_bodyInit","_bodyText","isPrototypeOf","_bodyBlob","formData","_bodyFormData","searchParams","URLSearchParams","arrayBuffer","ArrayBuffer","rejected","decode","normalizeMethod","upcased","methods","Request","mode","referrer","form","trim","bytes","decodeURIComponent","head","pairs","getAllResponseHeaders","header","Response","bodyInit","values","getAll","has","thisArg","clone","redirectStatuses","RangeError","responseURL","getResponseHeader","request","responseText","ontimeout","withCredentials","responseType","setRequestHeader","numberIsNan","num","exponent","unit","neg","units","min","Number","pow","_interopRequireWildcard","newObj","instance","encodeMetadata","Base64","encoded","encode","_createClass","defineProperties","descriptor","enumerable","configurable","writable","defineProperty","protoProps","staticProps","_fingerprint","_fingerprint2","_error","_error2","_extend","_extend2","_request","_source","_base","Storage","fingerprint","onChunkComplete","chunkSize","Infinity","uploadUrl","uploadSize","overridePatchMethod","retryDelays","_xhr","_offset","_aborted","_size","_retryAttempt","_retryTimeout","_offsetBeforeRetry","_emitError","getSource","isNaN","errorCallback","shouldResetDelays","shouldRetry","originalRequest","delay","_resumeUpload","resumedUrl","getItem","_createUpload","causingErr","bytesSent","bytesAccepted","newRequest","resolveUrl","setItem","_startUpload","_emitXhrError","_setupXHR","removeItem","offset","_emitProgress","_emitSuccess","_emitChunkComplete","onprogress","end","hasStorage","localStorage","SECURITY_ERR","namespaces","out","args","fns","_fns","emitAll","namespaced","fn","one","off","keep","runTimeout","fun","cachedSetTimeout","runClearTimeout","marker","cachedClearTimeout","cleanUpNextTick","draining","currentQueue","queue","queueIndex","drainQueue","Item","noop","browser","env","argv","version","versions","addListener","removeListener","removeAllListeners","binding","cwd","chdir","umask","charset","extractTypeRegExp","mime","db","textTypeRegExp","contentType","exts","extensions","path","extname","populateMaps","preference","from","to","charsets","create","fileItem","isUploaded","uploadInProgressOrComplete","uploadInProgress","truncatedFileName","_FileItemProgress2","_FileItemProgress","belCreateElement","tag","children","childs","lastChild","nodeValue","nodeType","SVG_TAGS","namespace","SVGNS","ns","createElementNS","onunload","load","unload","caller","p","val","BOOL_PROPS","setAttributeNS","hyperx","autofocus","checked","defaultchecked","disabled","formnovalidate","indeterminate","readonly","required","selected","willvalidate","toElement","range","doc","createRange","selectNode","fragment","createContextualFragment","childNodes","compareNodeNames","fromEl","toEl","fromNodeName","toNodeName","actualize","namespaceURI","NS_XHTML","morphAttrs","attr","attrName","attrNamespaceURI","attrValue","fromValue","attrs","assignAttributes","localName","getAttributeNS","specified","hasAttributeNS","removeAttributeNS","removeAttribute","moveChildren","curChild","firstChild","nextChild","nextSibling","defaultGetNodeKey","addKeyedRemoval","keyedRemovalList","walkDiscardedChildNodes","skipKeyedNodes","ELEMENT_NODE","getNodeKey","onNodeDiscarded","removeNode","parentNode","onBeforeNodeDiscarded","indexTree","fromNodesLookup","handleNodeAdded","onNodeAdded","unmatchedFromEl","replaceChild","morphEl","childrenOnly","curFromNodeKey","toElKey","isSameNode","onElUpdated","onBeforeElChildrenUpdated","curToNodeKey","fromNextSibling","toNextSibling","matchingFromEl","curToNodeChild","curFromNodeChild","outer","curFromNodeType","isCompatible","insertBefore","TEXT_NODE","COMMENT_NODE","onBeforeNodeAddedResult","onBeforeNodeAdded","ownerDocument","specialElHandler","specialElHandlers","toNodeHtml","morphedNode","morphedNodeType","toNodeType","elToRemove","testEl","hasAttribute","getAttributeNode","OPTION","INPUT","TEXTAREA","newValue","_TableColumn","classes","_TableColumn2","lastModified","ReferenceError","_inherits","subClass","superClass","setPrototypeOf","__proto__","DetailedError","getPrototypeOf","causingError","origin","_resolveUrl2","_resolveUrl","FileSource","_file","unescape","encodeURIComponent","normalizeArray","parts","allowAboveRoot","up","last","splice","unshift","splitPathRe","splitPath","filename","resolvedPath","resolvedAbsolute","normalize","isAbsolute","trailingSlash","paths","relative","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","root","basename","ext","depth","_flatten","d","acc","tasks","isSync","each","pending","task","hasOwn","toStr","isPlainObject","hasOwnConstructor","hasIsPrototypeOf","copy","copyIsArray","deep","quot","ATTR_VALUE_SQ","ATTR_VALUE_DQ","selfClosing","closeRE","attrToProp","VAR","TEXT","OPEN","CLOSE","ATTR","ATTR_KEY","ATTR_KEY_W","ATTR_VALUE_W","ATTR_VALUE","ATTR_EQ","ATTR_BREAK","h","strfn","reg","arglen","xstate","tree","stack","cur","ix","pop","copyKey","j","turnon","watch","turnoff","eachAttr","mutation","KEY_ATTR","sameOrigin","oldValue","eachMutation","nodes","onloadid","k","KEY_ID","INDEX","mutations","attributeName","removedNodes","addedNodes","childList","subtree","attributeOldValue","attributeFilter","topLevel","minDoc","doccy","factory","amd","numUrls","base","resolved","attributeToProperty","tagName","transform","class","for","http-equiv"],"mappings":"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","file":"bundle.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})","module.exports={\"application/1d-interleaved-parityfec\":{\"source\":\"iana\"},\"application/3gpdash-qoe-report+xml\":{\"source\":\"iana\"},\"application/3gpp-ims+xml\":{\"source\":\"iana\"},\"application/a2l\":{\"source\":\"iana\"},\"application/activemessage\":{\"source\":\"iana\"},\"application/alto-costmap+json\":{\"source\":\"iana\",\"compressible\":true},\"application/alto-costmapfilter+json\":{\"source\":\"iana\",\"compressible\":true},\"application/alto-directory+json\":{\"source\":\"iana\",\"compressible\":true},\"application/alto-endpointcost+json\":{\"source\":\"iana\",\"compressible\":true},\"application/alto-endpointcostparams+json\":{\"source\":\"iana\",\"compressible\":true},\"application/alto-endpointprop+json\":{\"source\":\"iana\",\"compressible\":true},\"application/alto-endpointpropparams+json\":{\"source\":\"iana\",\"compressible\":true},\"application/alto-error+json\":{\"source\":\"iana\",\"compressible\":true},\"application/alto-networkmap+json\":{\"source\":\"iana\",\"compressible\":true},\"application/alto-networkmapfilter+json\":{\"source\":\"iana\",\"compressible\":true},\"application/aml\":{\"source\":\"iana\"},\"application/andrew-inset\":{\"source\":\"iana\",\"extensions\":[\"ez\"]},\"application/applefile\":{\"source\":\"iana\"},\"application/applixware\":{\"source\":\"apache\",\"extensions\":[\"aw\"]},\"application/atf\":{\"source\":\"iana\"},\"application/atfx\":{\"source\":\"iana\"},\"application/atom+xml\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"atom\"]},\"application/atomcat+xml\":{\"source\":\"iana\",\"extensions\":[\"atomcat\"]},\"application/atomdeleted+xml\":{\"source\":\"iana\"},\"application/atomicmail\":{\"source\":\"iana\"},\"application/atomsvc+xml\":{\"source\":\"iana\",\"extensions\":[\"atomsvc\"]},\"application/atxml\":{\"source\":\"iana\"},\"application/auth-policy+xml\":{\"source\":\"iana\"},\"application/bacnet-xdd+zip\":{\"source\":\"iana\"},\"application/batch-smtp\":{\"source\":\"iana\"},\"application/bdoc\":{\"compressible\":false,\"extensions\":[\"bdoc\"]},\"application/beep+xml\":{\"source\":\"iana\"},\"application/calendar+json\":{\"source\":\"iana\",\"compressible\":true},\"application/calendar+xml\":{\"source\":\"iana\"},\"application/call-completion\":{\"source\":\"iana\"},\"application/cals-1840\":{\"source\":\"iana\"},\"application/cbor\":{\"source\":\"iana\"},\"application/ccmp+xml\":{\"source\":\"iana\"},\"application/ccxml+xml\":{\"source\":\"iana\",\"extensions\":[\"ccxml\"]},\"application/cdfx+xml\":{\"source\":\"iana\"},\"application/cdmi-capability\":{\"source\":\"iana\",\"extensions\":[\"cdmia\"]},\"application/cdmi-container\":{\"source\":\"iana\",\"extensions\":[\"cdmic\"]},\"application/cdmi-domain\":{\"source\":\"iana\",\"extensions\":[\"cdmid\"]},\"application/cdmi-object\":{\"source\":\"iana\",\"extensions\":[\"cdmio\"]},\"application/cdmi-queue\":{\"source\":\"iana\",\"extensions\":[\"cdmiq\"]},\"application/cdni\":{\"source\":\"iana\"},\"application/cea\":{\"source\":\"iana\"},\"application/cea-2018+xml\":{\"source\":\"iana\"},\"application/cellml+xml\":{\"source\":\"iana\"},\"application/cfw\":{\"source\":\"iana\"},\"application/cms\":{\"source\":\"iana\"},\"application/cnrp+xml\":{\"source\":\"iana\"},\"application/coap-group+json\":{\"source\":\"iana\",\"compressible\":true},\"application/commonground\":{\"source\":\"iana\"},\"application/conference-info+xml\":{\"source\":\"iana\"},\"application/cpl+xml\":{\"source\":\"iana\"},\"application/csrattrs\":{\"source\":\"iana\"},\"application/csta+xml\":{\"source\":\"iana\"},\"application/cstadata+xml\":{\"source\":\"iana\"},\"application/csvm+json\":{\"source\":\"iana\",\"compressible\":true},\"application/cu-seeme\":{\"source\":\"apache\",\"extensions\":[\"cu\"]},\"application/cybercash\":{\"source\":\"iana\"},\"application/dart\":{\"compressible\":true},\"application/dash+xml\":{\"source\":\"iana\",\"extensions\":[\"mpd\"]},\"application/dashdelta\":{\"source\":\"iana\"},\"application/davmount+xml\":{\"source\":\"iana\",\"extensions\":[\"davmount\"]},\"application/dca-rft\":{\"source\":\"iana\"},\"application/dcd\":{\"source\":\"iana\"},\"application/dec-dx\":{\"source\":\"iana\"},\"application/dialog-info+xml\":{\"source\":\"iana\"},\"application/dicom\":{\"source\":\"iana\"},\"application/dii\":{\"source\":\"iana\"},\"application/dit\":{\"source\":\"iana\"},\"application/dns\":{\"source\":\"iana\"},\"application/docbook+xml\":{\"source\":\"apache\",\"extensions\":[\"dbk\"]},\"application/dskpp+xml\":{\"source\":\"iana\"},\"application/dssc+der\":{\"source\":\"iana\",\"extensions\":[\"dssc\"]},\"application/dssc+xml\":{\"source\":\"iana\",\"extensions\":[\"xdssc\"]},\"application/dvcs\":{\"source\":\"iana\"},\"application/ecmascript\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"ecma\"]},\"application/edi-consent\":{\"source\":\"iana\"},\"application/edi-x12\":{\"source\":\"iana\",\"compressible\":false},\"application/edifact\":{\"source\":\"iana\",\"compressible\":false},\"application/efi\":{\"source\":\"iana\"},\"application/emergencycalldata.comment+xml\":{\"source\":\"iana\"},\"application/emergencycalldata.deviceinfo+xml\":{\"source\":\"iana\"},\"application/emergencycalldata.providerinfo+xml\":{\"source\":\"iana\"},\"application/emergencycalldata.serviceinfo+xml\":{\"source\":\"iana\"},\"application/emergencycalldata.subscriberinfo+xml\":{\"source\":\"iana\"},\"application/emma+xml\":{\"source\":\"iana\",\"extensions\":[\"emma\"]},\"application/emotionml+xml\":{\"source\":\"iana\"},\"application/encaprtp\":{\"source\":\"iana\"},\"application/epp+xml\":{\"source\":\"iana\"},\"application/epub+zip\":{\"source\":\"iana\",\"extensions\":[\"epub\"]},\"application/eshop\":{\"source\":\"iana\"},\"application/exi\":{\"source\":\"iana\",\"extensions\":[\"exi\"]},\"application/fastinfoset\":{\"source\":\"iana\"},\"application/fastsoap\":{\"source\":\"iana\"},\"application/fdt+xml\":{\"source\":\"iana\"},\"application/fits\":{\"source\":\"iana\"},\"application/font-sfnt\":{\"source\":\"iana\"},\"application/font-tdpfr\":{\"source\":\"iana\",\"extensions\":[\"pfr\"]},\"application/font-woff\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"woff\"]},\"application/font-woff2\":{\"compressible\":false,\"extensions\":[\"woff2\"]},\"application/framework-attributes+xml\":{\"source\":\"iana\"},\"application/gml+xml\":{\"source\":\"apache\",\"extensions\":[\"gml\"]},\"application/gpx+xml\":{\"source\":\"apache\",\"extensions\":[\"gpx\"]},\"application/gxf\":{\"source\":\"apache\",\"extensions\":[\"gxf\"]},\"application/gzip\":{\"source\":\"iana\",\"compressible\":false},\"application/h224\":{\"source\":\"iana\"},\"application/held+xml\":{\"source\":\"iana\"},\"application/http\":{\"source\":\"iana\"},\"application/hyperstudio\":{\"source\":\"iana\",\"extensions\":[\"stk\"]},\"application/ibe-key-request+xml\":{\"source\":\"iana\"},\"application/ibe-pkg-reply+xml\":{\"source\":\"iana\"},\"application/ibe-pp-data\":{\"source\":\"iana\"},\"application/iges\":{\"source\":\"iana\"},\"application/im-iscomposing+xml\":{\"source\":\"iana\"},\"application/index\":{\"source\":\"iana\"},\"application/index.cmd\":{\"source\":\"iana\"},\"application/index.obj\":{\"source\":\"iana\"},\"application/index.response\":{\"source\":\"iana\"},\"application/index.vnd\":{\"source\":\"iana\"},\"application/inkml+xml\":{\"source\":\"iana\",\"extensions\":[\"ink\",\"inkml\"]},\"application/iotp\":{\"source\":\"iana\"},\"application/ipfix\":{\"source\":\"iana\",\"extensions\":[\"ipfix\"]},\"application/ipp\":{\"source\":\"iana\"},\"application/isup\":{\"source\":\"iana\"},\"application/its+xml\":{\"source\":\"iana\"},\"application/java-archive\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"jar\",\"war\",\"ear\"]},\"application/java-serialized-object\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"ser\"]},\"application/java-vm\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"class\"]},\"application/javascript\":{\"source\":\"iana\",\"charset\":\"UTF-8\",\"compressible\":true,\"extensions\":[\"js\"]},\"application/jose\":{\"source\":\"iana\"},\"application/jose+json\":{\"source\":\"iana\",\"compressible\":true},\"application/jrd+json\":{\"source\":\"iana\",\"compressible\":true},\"application/json\":{\"source\":\"iana\",\"charset\":\"UTF-8\",\"compressible\":true,\"extensions\":[\"json\",\"map\"]},\"application/json-patch+json\":{\"source\":\"iana\",\"compressible\":true},\"application/json-seq\":{\"source\":\"iana\"},\"application/json5\":{\"extensions\":[\"json5\"]},\"application/jsonml+json\":{\"source\":\"apache\",\"compressible\":true,\"extensions\":[\"jsonml\"]},\"application/jwk+json\":{\"source\":\"iana\",\"compressible\":true},\"application/jwk-set+json\":{\"source\":\"iana\",\"compressible\":true},\"application/jwt\":{\"source\":\"iana\"},\"application/kpml-request+xml\":{\"source\":\"iana\"},\"application/kpml-response+xml\":{\"source\":\"iana\"},\"application/ld+json\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"jsonld\"]},\"application/link-format\":{\"source\":\"iana\"},\"application/load-control+xml\":{\"source\":\"iana\"},\"application/lost+xml\":{\"source\":\"iana\",\"extensions\":[\"lostxml\"]},\"application/lostsync+xml\":{\"source\":\"iana\"},\"application/lxf\":{\"source\":\"iana\"},\"application/mac-binhex40\":{\"source\":\"iana\",\"extensions\":[\"hqx\"]},\"application/mac-compactpro\":{\"source\":\"apache\",\"extensions\":[\"cpt\"]},\"application/macwriteii\":{\"source\":\"iana\"},\"application/mads+xml\":{\"source\":\"iana\",\"extensions\":[\"mads\"]},\"application/manifest+json\":{\"charset\":\"UTF-8\",\"compressible\":true,\"extensions\":[\"webmanifest\"]},\"application/marc\":{\"source\":\"iana\",\"extensions\":[\"mrc\"]},\"application/marcxml+xml\":{\"source\":\"iana\",\"extensions\":[\"mrcx\"]},\"application/mathematica\":{\"source\":\"iana\",\"extensions\":[\"ma\",\"nb\",\"mb\"]},\"application/mathml+xml\":{\"source\":\"iana\",\"extensions\":[\"mathml\"]},\"application/mathml-content+xml\":{\"source\":\"iana\"},\"application/mathml-presentation+xml\":{\"source\":\"iana\"},\"application/mbms-associated-procedure-description+xml\":{\"source\":\"iana\"},\"application/mbms-deregister+xml\":{\"source\":\"iana\"},\"application/mbms-envelope+xml\":{\"source\":\"iana\"},\"application/mbms-msk+xml\":{\"source\":\"iana\"},\"application/mbms-msk-response+xml\":{\"source\":\"iana\"},\"application/mbms-protection-description+xml\":{\"source\":\"iana\"},\"application/mbms-reception-report+xml\":{\"source\":\"iana\"},\"application/mbms-register+xml\":{\"source\":\"iana\"},\"application/mbms-register-response+xml\":{\"source\":\"iana\"},\"application/mbms-schedule+xml\":{\"source\":\"iana\"},\"application/mbms-user-service-description+xml\":{\"source\":\"iana\"},\"application/mbox\":{\"source\":\"iana\",\"extensions\":[\"mbox\"]},\"application/media-policy-dataset+xml\":{\"source\":\"iana\"},\"application/media_control+xml\":{\"source\":\"iana\"},\"application/mediaservercontrol+xml\":{\"source\":\"iana\",\"extensions\":[\"mscml\"]},\"application/merge-patch+json\":{\"source\":\"iana\",\"compressible\":true},\"application/metalink+xml\":{\"source\":\"apache\",\"extensions\":[\"metalink\"]},\"application/metalink4+xml\":{\"source\":\"iana\",\"extensions\":[\"meta4\"]},\"application/mets+xml\":{\"source\":\"iana\",\"extensions\":[\"mets\"]},\"application/mf4\":{\"source\":\"iana\"},\"application/mikey\":{\"source\":\"iana\"},\"application/mods+xml\":{\"source\":\"iana\",\"extensions\":[\"mods\"]},\"application/moss-keys\":{\"source\":\"iana\"},\"application/moss-signature\":{\"source\":\"iana\"},\"application/mosskey-data\":{\"source\":\"iana\"},\"application/mosskey-request\":{\"source\":\"iana\"},\"application/mp21\":{\"source\":\"iana\",\"extensions\":[\"m21\",\"mp21\"]},\"application/mp4\":{\"source\":\"iana\",\"extensions\":[\"mp4s\",\"m4p\"]},\"application/mpeg4-generic\":{\"source\":\"iana\"},\"application/mpeg4-iod\":{\"source\":\"iana\"},\"application/mpeg4-iod-xmt\":{\"source\":\"iana\"},\"application/mrb-consumer+xml\":{\"source\":\"iana\"},\"application/mrb-publish+xml\":{\"source\":\"iana\"},\"application/msc-ivr+xml\":{\"source\":\"iana\"},\"application/msc-mixer+xml\":{\"source\":\"iana\"},\"application/msword\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"doc\",\"dot\"]},\"application/mxf\":{\"source\":\"iana\",\"extensions\":[\"mxf\"]},\"application/nasdata\":{\"source\":\"iana\"},\"application/news-checkgroups\":{\"source\":\"iana\"},\"application/news-groupinfo\":{\"source\":\"iana\"},\"application/news-transmission\":{\"source\":\"iana\"},\"application/nlsml+xml\":{\"source\":\"iana\"},\"application/nss\":{\"source\":\"iana\"},\"application/ocsp-request\":{\"source\":\"iana\"},\"application/ocsp-response\":{\"source\":\"iana\"},\"application/octet-stream\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"]},\"application/oda\":{\"source\":\"iana\",\"extensions\":[\"oda\"]},\"application/odx\":{\"source\":\"iana\"},\"application/oebps-package+xml\":{\"source\":\"iana\",\"extensions\":[\"opf\"]},\"application/ogg\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"ogx\"]},\"application/omdoc+xml\":{\"source\":\"apache\",\"extensions\":[\"omdoc\"]},\"application/onenote\":{\"source\":\"apache\",\"extensions\":[\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"]},\"application/oxps\":{\"source\":\"iana\",\"extensions\":[\"oxps\"]},\"application/p2p-overlay+xml\":{\"source\":\"iana\"},\"application/parityfec\":{\"source\":\"iana\"},\"application/patch-ops-error+xml\":{\"source\":\"iana\",\"extensions\":[\"xer\"]},\"application/pdf\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"pdf\"]},\"application/pdx\":{\"source\":\"iana\"},\"application/pgp-encrypted\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"pgp\"]},\"application/pgp-keys\":{\"source\":\"iana\"},\"application/pgp-signature\":{\"source\":\"iana\",\"extensions\":[\"asc\",\"sig\"]},\"application/pics-rules\":{\"source\":\"apache\",\"extensions\":[\"prf\"]},\"application/pidf+xml\":{\"source\":\"iana\"},\"application/pidf-diff+xml\":{\"source\":\"iana\"},\"application/pkcs10\":{\"source\":\"iana\",\"extensions\":[\"p10\"]},\"application/pkcs12\":{\"source\":\"iana\"},\"application/pkcs7-mime\":{\"source\":\"iana\",\"extensions\":[\"p7m\",\"p7c\"]},\"application/pkcs7-signature\":{\"source\":\"iana\",\"extensions\":[\"p7s\"]},\"application/pkcs8\":{\"source\":\"iana\",\"extensions\":[\"p8\"]},\"application/pkix-attr-cert\":{\"source\":\"iana\",\"extensions\":[\"ac\"]},\"application/pkix-cert\":{\"source\":\"iana\",\"extensions\":[\"cer\"]},\"application/pkix-crl\":{\"source\":\"iana\",\"extensions\":[\"crl\"]},\"application/pkix-pkipath\":{\"source\":\"iana\",\"extensions\":[\"pkipath\"]},\"application/pkixcmp\":{\"source\":\"iana\",\"extensions\":[\"pki\"]},\"application/pls+xml\":{\"source\":\"iana\",\"extensions\":[\"pls\"]},\"application/poc-settings+xml\":{\"source\":\"iana\"},\"application/postscript\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"ai\",\"eps\",\"ps\"]},\"application/ppsp-tracker+json\":{\"source\":\"iana\",\"compressible\":true},\"application/problem+json\":{\"source\":\"iana\",\"compressible\":true},\"application/problem+xml\":{\"source\":\"iana\"},\"application/provenance+xml\":{\"source\":\"iana\"},\"application/prs.alvestrand.titrax-sheet\":{\"source\":\"iana\"},\"application/prs.cww\":{\"source\":\"iana\",\"extensions\":[\"cww\"]},\"application/prs.hpub+zip\":{\"source\":\"iana\"},\"application/prs.nprend\":{\"source\":\"iana\"},\"application/prs.plucker\":{\"source\":\"iana\"},\"application/prs.rdf-xml-crypt\":{\"source\":\"iana\"},\"application/prs.xsf+xml\":{\"source\":\"iana\"},\"application/pskc+xml\":{\"source\":\"iana\",\"extensions\":[\"pskcxml\"]},\"application/qsig\":{\"source\":\"iana\"},\"application/raptorfec\":{\"source\":\"iana\"},\"application/rdap+json\":{\"source\":\"iana\",\"compressible\":true},\"application/rdf+xml\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"rdf\"]},\"application/reginfo+xml\":{\"source\":\"iana\",\"extensions\":[\"rif\"]},\"application/relax-ng-compact-syntax\":{\"source\":\"iana\",\"extensions\":[\"rnc\"]},\"application/remote-printing\":{\"source\":\"iana\"},\"application/reputon+json\":{\"source\":\"iana\",\"compressible\":true},\"application/resource-lists+xml\":{\"source\":\"iana\",\"extensions\":[\"rl\"]},\"application/resource-lists-diff+xml\":{\"source\":\"iana\",\"extensions\":[\"rld\"]},\"application/rfc+xml\":{\"source\":\"iana\"},\"application/riscos\":{\"source\":\"iana\"},\"application/rlmi+xml\":{\"source\":\"iana\"},\"application/rls-services+xml\":{\"source\":\"iana\",\"extensions\":[\"rs\"]},\"application/rpki-ghostbusters\":{\"source\":\"iana\",\"extensions\":[\"gbr\"]},\"application/rpki-manifest\":{\"source\":\"iana\",\"extensions\":[\"mft\"]},\"application/rpki-roa\":{\"source\":\"iana\",\"extensions\":[\"roa\"]},\"application/rpki-updown\":{\"source\":\"iana\"},\"application/rsd+xml\":{\"source\":\"apache\",\"extensions\":[\"rsd\"]},\"application/rss+xml\":{\"source\":\"apache\",\"compressible\":true,\"extensions\":[\"rss\"]},\"application/rtf\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"rtf\"]},\"application/rtploopback\":{\"source\":\"iana\"},\"application/rtx\":{\"source\":\"iana\"},\"application/samlassertion+xml\":{\"source\":\"iana\"},\"application/samlmetadata+xml\":{\"source\":\"iana\"},\"application/sbml+xml\":{\"source\":\"iana\",\"extensions\":[\"sbml\"]},\"application/scaip+xml\":{\"source\":\"iana\"},\"application/scim+json\":{\"source\":\"iana\",\"compressible\":true},\"application/scvp-cv-request\":{\"source\":\"iana\",\"extensions\":[\"scq\"]},\"application/scvp-cv-response\":{\"source\":\"iana\",\"extensions\":[\"scs\"]},\"application/scvp-vp-request\":{\"source\":\"iana\",\"extensions\":[\"spq\"]},\"application/scvp-vp-response\":{\"source\":\"iana\",\"extensions\":[\"spp\"]},\"application/sdp\":{\"source\":\"iana\",\"extensions\":[\"sdp\"]},\"application/sep+xml\":{\"source\":\"iana\"},\"application/sep-exi\":{\"source\":\"iana\"},\"application/session-info\":{\"source\":\"iana\"},\"application/set-payment\":{\"source\":\"iana\"},\"application/set-payment-initiation\":{\"source\":\"iana\",\"extensions\":[\"setpay\"]},\"application/set-registration\":{\"source\":\"iana\"},\"application/set-registration-initiation\":{\"source\":\"iana\",\"extensions\":[\"setreg\"]},\"application/sgml\":{\"source\":\"iana\"},\"application/sgml-open-catalog\":{\"source\":\"iana\"},\"application/shf+xml\":{\"source\":\"iana\",\"extensions\":[\"shf\"]},\"application/sieve\":{\"source\":\"iana\"},\"application/simple-filter+xml\":{\"source\":\"iana\"},\"application/simple-message-summary\":{\"source\":\"iana\"},\"application/simplesymbolcontainer\":{\"source\":\"iana\"},\"application/slate\":{\"source\":\"iana\"},\"application/smil\":{\"source\":\"iana\"},\"application/smil+xml\":{\"source\":\"iana\",\"extensions\":[\"smi\",\"smil\"]},\"application/smpte336m\":{\"source\":\"iana\"},\"application/soap+fastinfoset\":{\"source\":\"iana\"},\"application/soap+xml\":{\"source\":\"iana\",\"compressible\":true},\"application/sparql-query\":{\"source\":\"iana\",\"extensions\":[\"rq\"]},\"application/sparql-results+xml\":{\"source\":\"iana\",\"extensions\":[\"srx\"]},\"application/spirits-event+xml\":{\"source\":\"iana\"},\"application/sql\":{\"source\":\"iana\"},\"application/srgs\":{\"source\":\"iana\",\"extensions\":[\"gram\"]},\"application/srgs+xml\":{\"source\":\"iana\",\"extensions\":[\"grxml\"]},\"application/sru+xml\":{\"source\":\"iana\",\"extensions\":[\"sru\"]},\"application/ssdl+xml\":{\"source\":\"apache\",\"extensions\":[\"ssdl\"]},\"application/ssml+xml\":{\"source\":\"iana\",\"extensions\":[\"ssml\"]},\"application/tamp-apex-update\":{\"source\":\"iana\"},\"application/tamp-apex-update-confirm\":{\"source\":\"iana\"},\"application/tamp-community-update\":{\"source\":\"iana\"},\"application/tamp-community-update-confirm\":{\"source\":\"iana\"},\"application/tamp-error\":{\"source\":\"iana\"},\"application/tamp-sequence-adjust\":{\"source\":\"iana\"},\"application/tamp-sequence-adjust-confirm\":{\"source\":\"iana\"},\"application/tamp-status-query\":{\"source\":\"iana\"},\"application/tamp-status-response\":{\"source\":\"iana\"},\"application/tamp-update\":{\"source\":\"iana\"},\"application/tamp-update-confirm\":{\"source\":\"iana\"},\"application/tar\":{\"compressible\":true},\"application/tei+xml\":{\"source\":\"iana\",\"extensions\":[\"tei\",\"teicorpus\"]},\"application/thraud+xml\":{\"source\":\"iana\",\"extensions\":[\"tfi\"]},\"application/timestamp-query\":{\"source\":\"iana\"},\"application/timestamp-reply\":{\"source\":\"iana\"},\"application/timestamped-data\":{\"source\":\"iana\",\"extensions\":[\"tsd\"]},\"application/ttml+xml\":{\"source\":\"iana\"},\"application/tve-trigger\":{\"source\":\"iana\"},\"application/ulpfec\":{\"source\":\"iana\"},\"application/urc-grpsheet+xml\":{\"source\":\"iana\"},\"application/urc-ressheet+xml\":{\"source\":\"iana\"},\"application/urc-targetdesc+xml\":{\"source\":\"iana\"},\"application/urc-uisocketdesc+xml\":{\"source\":\"iana\"},\"application/vcard+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vcard+xml\":{\"source\":\"iana\"},\"application/vemmi\":{\"source\":\"iana\"},\"application/vividence.scriptfile\":{\"source\":\"apache\"},\"application/vnd.3gpp-prose+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp-prose-pc3ch+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp.access-transfer-events+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp.bsf+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp.mid-call+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp.pic-bw-large\":{\"source\":\"iana\",\"extensions\":[\"plb\"]},\"application/vnd.3gpp.pic-bw-small\":{\"source\":\"iana\",\"extensions\":[\"psb\"]},\"application/vnd.3gpp.pic-bw-var\":{\"source\":\"iana\",\"extensions\":[\"pvb\"]},\"application/vnd.3gpp.sms\":{\"source\":\"iana\"},\"application/vnd.3gpp.sms+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp.srvcc-ext+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp.srvcc-info+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp.state-and-event-info+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp.ussd+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp2.bcmcsinfo+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp2.sms\":{\"source\":\"iana\"},\"application/vnd.3gpp2.tcap\":{\"source\":\"iana\",\"extensions\":[\"tcap\"]},\"application/vnd.3lightssoftware.imagescal\":{\"source\":\"iana\"},\"application/vnd.3m.post-it-notes\":{\"source\":\"iana\",\"extensions\":[\"pwn\"]},\"application/vnd.accpac.simply.aso\":{\"source\":\"iana\",\"extensions\":[\"aso\"]},\"application/vnd.accpac.simply.imp\":{\"source\":\"iana\",\"extensions\":[\"imp\"]},\"application/vnd.acucobol\":{\"source\":\"iana\",\"extensions\":[\"acu\"]},\"application/vnd.acucorp\":{\"source\":\"iana\",\"extensions\":[\"atc\",\"acutc\"]},\"application/vnd.adobe.air-application-installer-package+zip\":{\"source\":\"apache\",\"extensions\":[\"air\"]},\"application/vnd.adobe.flash.movie\":{\"source\":\"iana\"},\"application/vnd.adobe.formscentral.fcdt\":{\"source\":\"iana\",\"extensions\":[\"fcdt\"]},\"application/vnd.adobe.fxp\":{\"source\":\"iana\",\"extensions\":[\"fxp\",\"fxpl\"]},\"application/vnd.adobe.partial-upload\":{\"source\":\"iana\"},\"application/vnd.adobe.xdp+xml\":{\"source\":\"iana\",\"extensions\":[\"xdp\"]},\"application/vnd.adobe.xfdf\":{\"source\":\"iana\",\"extensions\":[\"xfdf\"]},\"application/vnd.aether.imp\":{\"source\":\"iana\"},\"application/vnd.ah-barcode\":{\"source\":\"iana\"},\"application/vnd.ahead.space\":{\"source\":\"iana\",\"extensions\":[\"ahead\"]},\"application/vnd.airzip.filesecure.azf\":{\"source\":\"iana\",\"extensions\":[\"azf\"]},\"application/vnd.airzip.filesecure.azs\":{\"source\":\"iana\",\"extensions\":[\"azs\"]},\"application/vnd.amazon.ebook\":{\"source\":\"apache\",\"extensions\":[\"azw\"]},\"application/vnd.americandynamics.acc\":{\"source\":\"iana\",\"extensions\":[\"acc\"]},\"application/vnd.amiga.ami\":{\"source\":\"iana\",\"extensions\":[\"ami\"]},\"application/vnd.amundsen.maze+xml\":{\"source\":\"iana\"},\"application/vnd.android.package-archive\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"apk\"]},\"application/vnd.anki\":{\"source\":\"iana\"},\"application/vnd.anser-web-certificate-issue-initiation\":{\"source\":\"iana\",\"extensions\":[\"cii\"]},\"application/vnd.anser-web-funds-transfer-initiation\":{\"source\":\"apache\",\"extensions\":[\"fti\"]},\"application/vnd.antix.game-component\":{\"source\":\"iana\",\"extensions\":[\"atx\"]},\"application/vnd.apache.thrift.binary\":{\"source\":\"iana\"},\"application/vnd.apache.thrift.compact\":{\"source\":\"iana\"},\"application/vnd.apache.thrift.json\":{\"source\":\"iana\"},\"application/vnd.api+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.apple.installer+xml\":{\"source\":\"iana\",\"extensions\":[\"mpkg\"]},\"application/vnd.apple.mpegurl\":{\"source\":\"iana\",\"extensions\":[\"m3u8\"]},\"application/vnd.apple.pkpass\":{\"compressible\":false,\"extensions\":[\"pkpass\"]},\"application/vnd.arastra.swi\":{\"source\":\"iana\"},\"application/vnd.aristanetworks.swi\":{\"source\":\"iana\",\"extensions\":[\"swi\"]},\"application/vnd.artsquare\":{\"source\":\"iana\"},\"application/vnd.astraea-software.iota\":{\"source\":\"iana\",\"extensions\":[\"iota\"]},\"application/vnd.audiograph\":{\"source\":\"iana\",\"extensions\":[\"aep\"]},\"application/vnd.autopackage\":{\"source\":\"iana\"},\"application/vnd.avistar+xml\":{\"source\":\"iana\"},\"application/vnd.balsamiq.bmml+xml\":{\"source\":\"iana\"},\"application/vnd.balsamiq.bmpr\":{\"source\":\"iana\"},\"application/vnd.bekitzur-stech+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.biopax.rdf+xml\":{\"source\":\"iana\"},\"application/vnd.blueice.multipass\":{\"source\":\"iana\",\"extensions\":[\"mpm\"]},\"application/vnd.bluetooth.ep.oob\":{\"source\":\"iana\"},\"application/vnd.bluetooth.le.oob\":{\"source\":\"iana\"},\"application/vnd.bmi\":{\"source\":\"iana\",\"extensions\":[\"bmi\"]},\"application/vnd.businessobjects\":{\"source\":\"iana\",\"extensions\":[\"rep\"]},\"application/vnd.cab-jscript\":{\"source\":\"iana\"},\"application/vnd.canon-cpdl\":{\"source\":\"iana\"},\"application/vnd.canon-lips\":{\"source\":\"iana\"},\"application/vnd.cendio.thinlinc.clientconf\":{\"source\":\"iana\"},\"application/vnd.century-systems.tcp_stream\":{\"source\":\"iana\"},\"application/vnd.chemdraw+xml\":{\"source\":\"iana\",\"extensions\":[\"cdxml\"]},\"application/vnd.chipnuts.karaoke-mmd\":{\"source\":\"iana\",\"extensions\":[\"mmd\"]},\"application/vnd.cinderella\":{\"source\":\"iana\",\"extensions\":[\"cdy\"]},\"application/vnd.cirpack.isdn-ext\":{\"source\":\"iana\"},\"application/vnd.citationstyles.style+xml\":{\"source\":\"iana\"},\"application/vnd.claymore\":{\"source\":\"iana\",\"extensions\":[\"cla\"]},\"application/vnd.cloanto.rp9\":{\"source\":\"iana\",\"extensions\":[\"rp9\"]},\"application/vnd.clonk.c4group\":{\"source\":\"iana\",\"extensions\":[\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"]},\"application/vnd.cluetrust.cartomobile-config\":{\"source\":\"iana\",\"extensions\":[\"c11amc\"]},\"application/vnd.cluetrust.cartomobile-config-pkg\":{\"source\":\"iana\",\"extensions\":[\"c11amz\"]},\"application/vnd.coffeescript\":{\"source\":\"iana\"},\"application/vnd.collection+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.collection.doc+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.collection.next+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.commerce-battelle\":{\"source\":\"iana\"},\"application/vnd.commonspace\":{\"source\":\"iana\",\"extensions\":[\"csp\"]},\"application/vnd.contact.cmsg\":{\"source\":\"iana\",\"extensions\":[\"cdbcmsg\"]},\"application/vnd.coreos.ignition+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.cosmocaller\":{\"source\":\"iana\",\"extensions\":[\"cmc\"]},\"application/vnd.crick.clicker\":{\"source\":\"iana\",\"extensions\":[\"clkx\"]},\"application/vnd.crick.clicker.keyboard\":{\"source\":\"iana\",\"extensions\":[\"clkk\"]},\"application/vnd.crick.clicker.palette\":{\"source\":\"iana\",\"extensions\":[\"clkp\"]},\"application/vnd.crick.clicker.template\":{\"source\":\"iana\",\"extensions\":[\"clkt\"]},\"application/vnd.crick.clicker.wordbank\":{\"source\":\"iana\",\"extensions\":[\"clkw\"]},\"application/vnd.criticaltools.wbs+xml\":{\"source\":\"iana\",\"extensions\":[\"wbs\"]},\"application/vnd.ctc-posml\":{\"source\":\"iana\",\"extensions\":[\"pml\"]},\"application/vnd.ctct.ws+xml\":{\"source\":\"iana\"},\"application/vnd.cups-pdf\":{\"source\":\"iana\"},\"application/vnd.cups-postscript\":{\"source\":\"iana\"},\"application/vnd.cups-ppd\":{\"source\":\"iana\",\"extensions\":[\"ppd\"]},\"application/vnd.cups-raster\":{\"source\":\"iana\"},\"application/vnd.cups-raw\":{\"source\":\"iana\"},\"application/vnd.curl\":{\"source\":\"iana\"},\"application/vnd.curl.car\":{\"source\":\"apache\",\"extensions\":[\"car\"]},\"application/vnd.curl.pcurl\":{\"source\":\"apache\",\"extensions\":[\"pcurl\"]},\"application/vnd.cyan.dean.root+xml\":{\"source\":\"iana\"},\"application/vnd.cybank\":{\"source\":\"iana\"},\"application/vnd.dart\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"dart\"]},\"application/vnd.data-vision.rdz\":{\"source\":\"iana\",\"extensions\":[\"rdz\"]},\"application/vnd.debian.binary-package\":{\"source\":\"iana\"},\"application/vnd.dece.data\":{\"source\":\"iana\",\"extensions\":[\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"]},\"application/vnd.dece.ttml+xml\":{\"source\":\"iana\",\"extensions\":[\"uvt\",\"uvvt\"]},\"application/vnd.dece.unspecified\":{\"source\":\"iana\",\"extensions\":[\"uvx\",\"uvvx\"]},\"application/vnd.dece.zip\":{\"source\":\"iana\",\"extensions\":[\"uvz\",\"uvvz\"]},\"application/vnd.denovo.fcselayout-link\":{\"source\":\"iana\",\"extensions\":[\"fe_launch\"]},\"application/vnd.desmume-movie\":{\"source\":\"iana\"},\"application/vnd.desmume.movie\":{\"source\":\"apache\"},\"application/vnd.dir-bi.plate-dl-nosuffix\":{\"source\":\"iana\"},\"application/vnd.dm.delegation+xml\":{\"source\":\"iana\"},\"application/vnd.dna\":{\"source\":\"iana\",\"extensions\":[\"dna\"]},\"application/vnd.document+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.dolby.mlp\":{\"source\":\"apache\",\"extensions\":[\"mlp\"]},\"application/vnd.dolby.mobile.1\":{\"source\":\"iana\"},\"application/vnd.dolby.mobile.2\":{\"source\":\"iana\"},\"application/vnd.doremir.scorecloud-binary-document\":{\"source\":\"iana\"},\"application/vnd.dpgraph\":{\"source\":\"iana\",\"extensions\":[\"dpg\"]},\"application/vnd.dreamfactory\":{\"source\":\"iana\",\"extensions\":[\"dfac\"]},\"application/vnd.drive+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.ds-keypoint\":{\"source\":\"apache\",\"extensions\":[\"kpxx\"]},\"application/vnd.dtg.local\":{\"source\":\"iana\"},\"application/vnd.dtg.local.flash\":{\"source\":\"iana\"},\"application/vnd.dtg.local.html\":{\"source\":\"iana\"},\"application/vnd.dvb.ait\":{\"source\":\"iana\",\"extensions\":[\"ait\"]},\"application/vnd.dvb.dvbj\":{\"source\":\"iana\"},\"application/vnd.dvb.esgcontainer\":{\"source\":\"iana\"},\"application/vnd.dvb.ipdcdftnotifaccess\":{\"source\":\"iana\"},\"application/vnd.dvb.ipdcesgaccess\":{\"source\":\"iana\"},\"application/vnd.dvb.ipdcesgaccess2\":{\"source\":\"iana\"},\"application/vnd.dvb.ipdcesgpdd\":{\"source\":\"iana\"},\"application/vnd.dvb.ipdcroaming\":{\"source\":\"iana\"},\"application/vnd.dvb.iptv.alfec-base\":{\"source\":\"iana\"},\"application/vnd.dvb.iptv.alfec-enhancement\":{\"source\":\"iana\"},\"application/vnd.dvb.notif-aggregate-root+xml\":{\"source\":\"iana\"},\"application/vnd.dvb.notif-container+xml\":{\"source\":\"iana\"},\"application/vnd.dvb.notif-generic+xml\":{\"source\":\"iana\"},\"application/vnd.dvb.notif-ia-msglist+xml\":{\"source\":\"iana\"},\"application/vnd.dvb.notif-ia-registration-request+xml\":{\"source\":\"iana\"},\"application/vnd.dvb.notif-ia-registration-response+xml\":{\"source\":\"iana\"},\"application/vnd.dvb.notif-init+xml\":{\"source\":\"iana\"},\"application/vnd.dvb.pfr\":{\"source\":\"iana\"},\"application/vnd.dvb.service\":{\"source\":\"iana\",\"extensions\":[\"svc\"]},\"application/vnd.dxr\":{\"source\":\"iana\"},\"application/vnd.dynageo\":{\"source\":\"iana\",\"extensions\":[\"geo\"]},\"application/vnd.dzr\":{\"source\":\"iana\"},\"application/vnd.easykaraoke.cdgdownload\":{\"source\":\"iana\"},\"application/vnd.ecdis-update\":{\"source\":\"iana\"},\"application/vnd.ecowin.chart\":{\"source\":\"iana\",\"extensions\":[\"mag\"]},\"application/vnd.ecowin.filerequest\":{\"source\":\"iana\"},\"application/vnd.ecowin.fileupdate\":{\"source\":\"iana\"},\"application/vnd.ecowin.series\":{\"source\":\"iana\"},\"application/vnd.ecowin.seriesrequest\":{\"source\":\"iana\"},\"application/vnd.ecowin.seriesupdate\":{\"source\":\"iana\"},\"application/vnd.emclient.accessrequest+xml\":{\"source\":\"iana\"},\"application/vnd.enliven\":{\"source\":\"iana\",\"extensions\":[\"nml\"]},\"application/vnd.enphase.envoy\":{\"source\":\"iana\"},\"application/vnd.eprints.data+xml\":{\"source\":\"iana\"},\"application/vnd.epson.esf\":{\"source\":\"iana\",\"extensions\":[\"esf\"]},\"application/vnd.epson.msf\":{\"source\":\"iana\",\"extensions\":[\"msf\"]},\"application/vnd.epson.quickanime\":{\"source\":\"iana\",\"extensions\":[\"qam\"]},\"application/vnd.epson.salt\":{\"source\":\"iana\",\"extensions\":[\"slt\"]},\"application/vnd.epson.ssf\":{\"source\":\"iana\",\"extensions\":[\"ssf\"]},\"application/vnd.ericsson.quickcall\":{\"source\":\"iana\"},\"application/vnd.eszigno3+xml\":{\"source\":\"iana\",\"extensions\":[\"es3\",\"et3\"]},\"application/vnd.etsi.aoc+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.asic-e+zip\":{\"source\":\"iana\"},\"application/vnd.etsi.asic-s+zip\":{\"source\":\"iana\"},\"application/vnd.etsi.cug+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.iptvcommand+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.iptvdiscovery+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.iptvprofile+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.iptvsad-bc+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.iptvsad-cod+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.iptvsad-npvr+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.iptvservice+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.iptvsync+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.iptvueprofile+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.mcid+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.mheg5\":{\"source\":\"iana\"},\"application/vnd.etsi.overload-control-policy-dataset+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.pstn+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.sci+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.simservs+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.timestamp-token\":{\"source\":\"iana\"},\"application/vnd.etsi.tsl+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.tsl.der\":{\"source\":\"iana\"},\"application/vnd.eudora.data\":{\"source\":\"iana\"},\"application/vnd.ezpix-album\":{\"source\":\"iana\",\"extensions\":[\"ez2\"]},\"application/vnd.ezpix-package\":{\"source\":\"iana\",\"extensions\":[\"ez3\"]},\"application/vnd.f-secure.mobile\":{\"source\":\"iana\"},\"application/vnd.fastcopy-disk-image\":{\"source\":\"iana\"},\"application/vnd.fdf\":{\"source\":\"iana\",\"extensions\":[\"fdf\"]},\"application/vnd.fdsn.mseed\":{\"source\":\"iana\",\"extensions\":[\"mseed\"]},\"application/vnd.fdsn.seed\":{\"source\":\"iana\",\"extensions\":[\"seed\",\"dataless\"]},\"application/vnd.ffsns\":{\"source\":\"iana\"},\"application/vnd.filmit.zfc\":{\"source\":\"iana\"},\"application/vnd.fints\":{\"source\":\"iana\"},\"application/vnd.firemonkeys.cloudcell\":{\"source\":\"iana\"},\"application/vnd.flographit\":{\"source\":\"iana\",\"extensions\":[\"gph\"]},\"application/vnd.fluxtime.clip\":{\"source\":\"iana\",\"extensions\":[\"ftc\"]},\"application/vnd.font-fontforge-sfd\":{\"source\":\"iana\"},\"application/vnd.framemaker\":{\"source\":\"iana\",\"extensions\":[\"fm\",\"frame\",\"maker\",\"book\"]},\"application/vnd.frogans.fnc\":{\"source\":\"iana\",\"extensions\":[\"fnc\"]},\"application/vnd.frogans.ltf\":{\"source\":\"iana\",\"extensions\":[\"ltf\"]},\"application/vnd.fsc.weblaunch\":{\"source\":\"iana\",\"extensions\":[\"fsc\"]},\"application/vnd.fujitsu.oasys\":{\"source\":\"iana\",\"extensions\":[\"oas\"]},\"application/vnd.fujitsu.oasys2\":{\"source\":\"iana\",\"extensions\":[\"oa2\"]},\"application/vnd.fujitsu.oasys3\":{\"source\":\"iana\",\"extensions\":[\"oa3\"]},\"application/vnd.fujitsu.oasysgp\":{\"source\":\"iana\",\"extensions\":[\"fg5\"]},\"application/vnd.fujitsu.oasysprs\":{\"source\":\"iana\",\"extensions\":[\"bh2\"]},\"application/vnd.fujixerox.art-ex\":{\"source\":\"iana\"},\"application/vnd.fujixerox.art4\":{\"source\":\"iana\"},\"application/vnd.fujixerox.ddd\":{\"source\":\"iana\",\"extensions\":[\"ddd\"]},\"application/vnd.fujixerox.docuworks\":{\"source\":\"iana\",\"extensions\":[\"xdw\"]},\"application/vnd.fujixerox.docuworks.binder\":{\"source\":\"iana\",\"extensions\":[\"xbd\"]},\"application/vnd.fujixerox.docuworks.container\":{\"source\":\"iana\"},\"application/vnd.fujixerox.hbpl\":{\"source\":\"iana\"},\"application/vnd.fut-misnet\":{\"source\":\"iana\"},\"application/vnd.fuzzysheet\":{\"source\":\"iana\",\"extensions\":[\"fzs\"]},\"application/vnd.genomatix.tuxedo\":{\"source\":\"iana\",\"extensions\":[\"txd\"]},\"application/vnd.geo+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.geocube+xml\":{\"source\":\"iana\"},\"application/vnd.geogebra.file\":{\"source\":\"iana\",\"extensions\":[\"ggb\"]},\"application/vnd.geogebra.tool\":{\"source\":\"iana\",\"extensions\":[\"ggt\"]},\"application/vnd.geometry-explorer\":{\"source\":\"iana\",\"extensions\":[\"gex\",\"gre\"]},\"application/vnd.geonext\":{\"source\":\"iana\",\"extensions\":[\"gxt\"]},\"application/vnd.geoplan\":{\"source\":\"iana\",\"extensions\":[\"g2w\"]},\"application/vnd.geospace\":{\"source\":\"iana\",\"extensions\":[\"g3w\"]},\"application/vnd.gerber\":{\"source\":\"iana\"},\"application/vnd.globalplatform.card-content-mgt\":{\"source\":\"iana\"},\"application/vnd.globalplatform.card-content-mgt-response\":{\"source\":\"iana\"},\"application/vnd.gmx\":{\"source\":\"iana\",\"extensions\":[\"gmx\"]},\"application/vnd.google-apps.document\":{\"compressible\":false,\"extensions\":[\"gdoc\"]},\"application/vnd.google-apps.presentation\":{\"compressible\":false,\"extensions\":[\"gslides\"]},\"application/vnd.google-apps.spreadsheet\":{\"compressible\":false,\"extensions\":[\"gsheet\"]},\"application/vnd.google-earth.kml+xml\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"kml\"]},\"application/vnd.google-earth.kmz\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"kmz\"]},\"application/vnd.gov.sk.e-form+xml\":{\"source\":\"iana\"},\"application/vnd.gov.sk.e-form+zip\":{\"source\":\"iana\"},\"application/vnd.gov.sk.xmldatacontainer+xml\":{\"source\":\"iana\"},\"application/vnd.grafeq\":{\"source\":\"iana\",\"extensions\":[\"gqf\",\"gqs\"]},\"application/vnd.gridmp\":{\"source\":\"iana\"},\"application/vnd.groove-account\":{\"source\":\"iana\",\"extensions\":[\"gac\"]},\"application/vnd.groove-help\":{\"source\":\"iana\",\"extensions\":[\"ghf\"]},\"application/vnd.groove-identity-message\":{\"source\":\"iana\",\"extensions\":[\"gim\"]},\"application/vnd.groove-injector\":{\"source\":\"iana\",\"extensions\":[\"grv\"]},\"application/vnd.groove-tool-message\":{\"source\":\"iana\",\"extensions\":[\"gtm\"]},\"application/vnd.groove-tool-template\":{\"source\":\"iana\",\"extensions\":[\"tpl\"]},\"application/vnd.groove-vcard\":{\"source\":\"iana\",\"extensions\":[\"vcg\"]},\"application/vnd.hal+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.hal+xml\":{\"source\":\"iana\",\"extensions\":[\"hal\"]},\"application/vnd.handheld-entertainment+xml\":{\"source\":\"iana\",\"extensions\":[\"zmm\"]},\"application/vnd.hbci\":{\"source\":\"iana\",\"extensions\":[\"hbci\"]},\"application/vnd.hcl-bireports\":{\"source\":\"iana\"},\"application/vnd.hdt\":{\"source\":\"iana\"},\"application/vnd.heroku+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.hhe.lesson-player\":{\"source\":\"iana\",\"extensions\":[\"les\"]},\"application/vnd.hp-hpgl\":{\"source\":\"iana\",\"extensions\":[\"hpgl\"]},\"application/vnd.hp-hpid\":{\"source\":\"iana\",\"extensions\":[\"hpid\"]},\"application/vnd.hp-hps\":{\"source\":\"iana\",\"extensions\":[\"hps\"]},\"application/vnd.hp-jlyt\":{\"source\":\"iana\",\"extensions\":[\"jlt\"]},\"application/vnd.hp-pcl\":{\"source\":\"iana\",\"extensions\":[\"pcl\"]},\"application/vnd.hp-pclxl\":{\"source\":\"iana\",\"extensions\":[\"pclxl\"]},\"application/vnd.httphone\":{\"source\":\"iana\"},\"application/vnd.hydrostatix.sof-data\":{\"source\":\"iana\",\"extensions\":[\"sfd-hdstx\"]},\"application/vnd.hyperdrive+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.hzn-3d-crossword\":{\"source\":\"iana\"},\"application/vnd.ibm.afplinedata\":{\"source\":\"iana\"},\"application/vnd.ibm.electronic-media\":{\"source\":\"iana\"},\"application/vnd.ibm.minipay\":{\"source\":\"iana\",\"extensions\":[\"mpy\"]},\"application/vnd.ibm.modcap\":{\"source\":\"iana\",\"extensions\":[\"afp\",\"listafp\",\"list3820\"]},\"application/vnd.ibm.rights-management\":{\"source\":\"iana\",\"extensions\":[\"irm\"]},\"application/vnd.ibm.secure-container\":{\"source\":\"iana\",\"extensions\":[\"sc\"]},\"application/vnd.iccprofile\":{\"source\":\"iana\",\"extensions\":[\"icc\",\"icm\"]},\"application/vnd.ieee.1905\":{\"source\":\"iana\"},\"application/vnd.igloader\":{\"source\":\"iana\",\"extensions\":[\"igl\"]},\"application/vnd.immervision-ivp\":{\"source\":\"iana\",\"extensions\":[\"ivp\"]},\"application/vnd.immervision-ivu\":{\"source\":\"iana\",\"extensions\":[\"ivu\"]},\"application/vnd.ims.imsccv1p1\":{\"source\":\"iana\"},\"application/vnd.ims.imsccv1p2\":{\"source\":\"iana\"},\"application/vnd.ims.imsccv1p3\":{\"source\":\"iana\"},\"application/vnd.ims.lis.v2.result+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.ims.lti.v2.toolconsumerprofile+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.ims.lti.v2.toolproxy+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.ims.lti.v2.toolproxy.id+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.ims.lti.v2.toolsettings+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.ims.lti.v2.toolsettings.simple+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.informedcontrol.rms+xml\":{\"source\":\"iana\"},\"application/vnd.informix-visionary\":{\"source\":\"iana\"},\"application/vnd.infotech.project\":{\"source\":\"iana\"},\"application/vnd.infotech.project+xml\":{\"source\":\"iana\"},\"application/vnd.innopath.wamp.notification\":{\"source\":\"iana\"},\"application/vnd.insors.igm\":{\"source\":\"iana\",\"extensions\":[\"igm\"]},\"application/vnd.intercon.formnet\":{\"source\":\"iana\",\"extensions\":[\"xpw\",\"xpx\"]},\"application/vnd.intergeo\":{\"source\":\"iana\",\"extensions\":[\"i2g\"]},\"application/vnd.intertrust.digibox\":{\"source\":\"iana\"},\"application/vnd.intertrust.nncp\":{\"source\":\"iana\"},\"application/vnd.intu.qbo\":{\"source\":\"iana\",\"extensions\":[\"qbo\"]},\"application/vnd.intu.qfx\":{\"source\":\"iana\",\"extensions\":[\"qfx\"]},\"application/vnd.iptc.g2.catalogitem+xml\":{\"source\":\"iana\"},\"application/vnd.iptc.g2.conceptitem+xml\":{\"source\":\"iana\"},\"application/vnd.iptc.g2.knowledgeitem+xml\":{\"source\":\"iana\"},\"application/vnd.iptc.g2.newsitem+xml\":{\"source\":\"iana\"},\"application/vnd.iptc.g2.newsmessage+xml\":{\"source\":\"iana\"},\"application/vnd.iptc.g2.packageitem+xml\":{\"source\":\"iana\"},\"application/vnd.iptc.g2.planningitem+xml\":{\"source\":\"iana\"},\"application/vnd.ipunplugged.rcprofile\":{\"source\":\"iana\",\"extensions\":[\"rcprofile\"]},\"application/vnd.irepository.package+xml\":{\"source\":\"iana\",\"extensions\":[\"irp\"]},\"application/vnd.is-xpr\":{\"source\":\"iana\",\"extensions\":[\"xpr\"]},\"application/vnd.isac.fcs\":{\"source\":\"iana\",\"extensions\":[\"fcs\"]},\"application/vnd.jam\":{\"source\":\"iana\",\"extensions\":[\"jam\"]},\"application/vnd.japannet-directory-service\":{\"source\":\"iana\"},\"application/vnd.japannet-jpnstore-wakeup\":{\"source\":\"iana\"},\"application/vnd.japannet-payment-wakeup\":{\"source\":\"iana\"},\"application/vnd.japannet-registration\":{\"source\":\"iana\"},\"application/vnd.japannet-registration-wakeup\":{\"source\":\"iana\"},\"application/vnd.japannet-setstore-wakeup\":{\"source\":\"iana\"},\"application/vnd.japannet-verification\":{\"source\":\"iana\"},\"application/vnd.japannet-verification-wakeup\":{\"source\":\"iana\"},\"application/vnd.jcp.javame.midlet-rms\":{\"source\":\"iana\",\"extensions\":[\"rms\"]},\"application/vnd.jisp\":{\"source\":\"iana\",\"extensions\":[\"jisp\"]},\"application/vnd.joost.joda-archive\":{\"source\":\"iana\",\"extensions\":[\"joda\"]},\"application/vnd.jsk.isdn-ngn\":{\"source\":\"iana\"},\"application/vnd.kahootz\":{\"source\":\"iana\",\"extensions\":[\"ktz\",\"ktr\"]},\"application/vnd.kde.karbon\":{\"source\":\"iana\",\"extensions\":[\"karbon\"]},\"application/vnd.kde.kchart\":{\"source\":\"iana\",\"extensions\":[\"chrt\"]},\"application/vnd.kde.kformula\":{\"source\":\"iana\",\"extensions\":[\"kfo\"]},\"application/vnd.kde.kivio\":{\"source\":\"iana\",\"extensions\":[\"flw\"]},\"application/vnd.kde.kontour\":{\"source\":\"iana\",\"extensions\":[\"kon\"]},\"application/vnd.kde.kpresenter\":{\"source\":\"iana\",\"extensions\":[\"kpr\",\"kpt\"]},\"application/vnd.kde.kspread\":{\"source\":\"iana\",\"extensions\":[\"ksp\"]},\"application/vnd.kde.kword\":{\"source\":\"iana\",\"extensions\":[\"kwd\",\"kwt\"]},\"application/vnd.kenameaapp\":{\"source\":\"iana\",\"extensions\":[\"htke\"]},\"application/vnd.kidspiration\":{\"source\":\"iana\",\"extensions\":[\"kia\"]},\"application/vnd.kinar\":{\"source\":\"iana\",\"extensions\":[\"kne\",\"knp\"]},\"application/vnd.koan\":{\"source\":\"iana\",\"extensions\":[\"skp\",\"skd\",\"skt\",\"skm\"]},\"application/vnd.kodak-descriptor\":{\"source\":\"iana\",\"extensions\":[\"sse\"]},\"application/vnd.las.las+xml\":{\"source\":\"iana\",\"extensions\":[\"lasxml\"]},\"application/vnd.liberty-request+xml\":{\"source\":\"iana\"},\"application/vnd.llamagraphics.life-balance.desktop\":{\"source\":\"iana\",\"extensions\":[\"lbd\"]},\"application/vnd.llamagraphics.life-balance.exchange+xml\":{\"source\":\"iana\",\"extensions\":[\"lbe\"]},\"application/vnd.lotus-1-2-3\":{\"source\":\"iana\",\"extensions\":[\"123\"]},\"application/vnd.lotus-approach\":{\"source\":\"iana\",\"extensions\":[\"apr\"]},\"application/vnd.lotus-freelance\":{\"source\":\"iana\",\"extensions\":[\"pre\"]},\"application/vnd.lotus-notes\":{\"source\":\"iana\",\"extensions\":[\"nsf\"]},\"application/vnd.lotus-organizer\":{\"source\":\"iana\",\"extensions\":[\"org\"]},\"application/vnd.lotus-screencam\":{\"source\":\"iana\",\"extensions\":[\"scm\"]},\"application/vnd.lotus-wordpro\":{\"source\":\"iana\",\"extensions\":[\"lwp\"]},\"application/vnd.macports.portpkg\":{\"source\":\"iana\",\"extensions\":[\"portpkg\"]},\"application/vnd.mapbox-vector-tile\":{\"source\":\"iana\"},\"application/vnd.marlin.drm.actiontoken+xml\":{\"source\":\"iana\"},\"application/vnd.marlin.drm.conftoken+xml\":{\"source\":\"iana\"},\"application/vnd.marlin.drm.license+xml\":{\"source\":\"iana\"},\"application/vnd.marlin.drm.mdcf\":{\"source\":\"iana\"},\"application/vnd.mason+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.maxmind.maxmind-db\":{\"source\":\"iana\"},\"application/vnd.mcd\":{\"source\":\"iana\",\"extensions\":[\"mcd\"]},\"application/vnd.medcalcdata\":{\"source\":\"iana\",\"extensions\":[\"mc1\"]},\"application/vnd.mediastation.cdkey\":{\"source\":\"iana\",\"extensions\":[\"cdkey\"]},\"application/vnd.meridian-slingshot\":{\"source\":\"iana\"},\"application/vnd.mfer\":{\"source\":\"iana\",\"extensions\":[\"mwf\"]},\"application/vnd.mfmp\":{\"source\":\"iana\",\"extensions\":[\"mfm\"]},\"application/vnd.micro+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.micrografx.flo\":{\"source\":\"iana\",\"extensions\":[\"flo\"]},\"application/vnd.micrografx.igx\":{\"source\":\"iana\",\"extensions\":[\"igx\"]},\"application/vnd.microsoft.portable-executable\":{\"source\":\"iana\"},\"application/vnd.miele+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.mif\":{\"source\":\"iana\",\"extensions\":[\"mif\"]},\"application/vnd.minisoft-hp3000-save\":{\"source\":\"iana\"},\"application/vnd.mitsubishi.misty-guard.trustweb\":{\"source\":\"iana\"},\"application/vnd.mobius.daf\":{\"source\":\"iana\",\"extensions\":[\"daf\"]},\"application/vnd.mobius.dis\":{\"source\":\"iana\",\"extensions\":[\"dis\"]},\"application/vnd.mobius.mbk\":{\"source\":\"iana\",\"extensions\":[\"mbk\"]},\"application/vnd.mobius.mqy\":{\"source\":\"iana\",\"extensions\":[\"mqy\"]},\"application/vnd.mobius.msl\":{\"source\":\"iana\",\"extensions\":[\"msl\"]},\"application/vnd.mobius.plc\":{\"source\":\"iana\",\"extensions\":[\"plc\"]},\"application/vnd.mobius.txf\":{\"source\":\"iana\",\"extensions\":[\"txf\"]},\"application/vnd.mophun.application\":{\"source\":\"iana\",\"extensions\":[\"mpn\"]},\"application/vnd.mophun.certificate\":{\"source\":\"iana\",\"extensions\":[\"mpc\"]},\"application/vnd.motorola.flexsuite\":{\"source\":\"iana\"},\"application/vnd.motorola.flexsuite.adsi\":{\"source\":\"iana\"},\"application/vnd.motorola.flexsuite.fis\":{\"source\":\"iana\"},\"application/vnd.motorola.flexsuite.gotap\":{\"source\":\"iana\"},\"application/vnd.motorola.flexsuite.kmr\":{\"source\":\"iana\"},\"application/vnd.motorola.flexsuite.ttc\":{\"source\":\"iana\"},\"application/vnd.motorola.flexsuite.wem\":{\"source\":\"iana\"},\"application/vnd.motorola.iprm\":{\"source\":\"iana\"},\"application/vnd.mozilla.xul+xml\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"xul\"]},\"application/vnd.ms-3mfdocument\":{\"source\":\"iana\"},\"application/vnd.ms-artgalry\":{\"source\":\"iana\",\"extensions\":[\"cil\"]},\"application/vnd.ms-asf\":{\"source\":\"iana\"},\"application/vnd.ms-cab-compressed\":{\"source\":\"iana\",\"extensions\":[\"cab\"]},\"application/vnd.ms-color.iccprofile\":{\"source\":\"apache\"},\"application/vnd.ms-excel\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"]},\"application/vnd.ms-excel.addin.macroenabled.12\":{\"source\":\"iana\",\"extensions\":[\"xlam\"]},\"application/vnd.ms-excel.sheet.binary.macroenabled.12\":{\"source\":\"iana\",\"extensions\":[\"xlsb\"]},\"application/vnd.ms-excel.sheet.macroenabled.12\":{\"source\":\"iana\",\"extensions\":[\"xlsm\"]},\"application/vnd.ms-excel.template.macroenabled.12\":{\"source\":\"iana\",\"extensions\":[\"xltm\"]},\"application/vnd.ms-fontobject\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"eot\"]},\"application/vnd.ms-htmlhelp\":{\"source\":\"iana\",\"extensions\":[\"chm\"]},\"application/vnd.ms-ims\":{\"source\":\"iana\",\"extensions\":[\"ims\"]},\"application/vnd.ms-lrm\":{\"source\":\"iana\",\"extensions\":[\"lrm\"]},\"application/vnd.ms-office.activex+xml\":{\"source\":\"iana\"},\"application/vnd.ms-officetheme\":{\"source\":\"iana\",\"extensions\":[\"thmx\"]},\"application/vnd.ms-opentype\":{\"source\":\"apache\",\"compressible\":true},\"application/vnd.ms-package.obfuscated-opentype\":{\"source\":\"apache\"},\"application/vnd.ms-pki.seccat\":{\"source\":\"apache\",\"extensions\":[\"cat\"]},\"application/vnd.ms-pki.stl\":{\"source\":\"apache\",\"extensions\":[\"stl\"]},\"application/vnd.ms-playready.initiator+xml\":{\"source\":\"iana\"},\"application/vnd.ms-powerpoint\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"ppt\",\"pps\",\"pot\"]},\"application/vnd.ms-powerpoint.addin.macroenabled.12\":{\"source\":\"iana\",\"extensions\":[\"ppam\"]},\"application/vnd.ms-powerpoint.presentation.macroenabled.12\":{\"source\":\"iana\",\"extensions\":[\"pptm\"]},\"application/vnd.ms-powerpoint.slide.macroenabled.12\":{\"source\":\"iana\",\"extensions\":[\"sldm\"]},\"application/vnd.ms-powerpoint.slideshow.macroenabled.12\":{\"source\":\"iana\",\"extensions\":[\"ppsm\"]},\"application/vnd.ms-powerpoint.template.macroenabled.12\":{\"source\":\"iana\",\"extensions\":[\"potm\"]},\"application/vnd.ms-printdevicecapabilities+xml\":{\"source\":\"iana\"},\"application/vnd.ms-printing.printticket+xml\":{\"source\":\"apache\"},\"application/vnd.ms-printschematicket+xml\":{\"source\":\"iana\"},\"application/vnd.ms-project\":{\"source\":\"iana\",\"extensions\":[\"mpp\",\"mpt\"]},\"application/vnd.ms-tnef\":{\"source\":\"iana\"},\"application/vnd.ms-windows.devicepairing\":{\"source\":\"iana\"},\"application/vnd.ms-windows.nwprinting.oob\":{\"source\":\"iana\"},\"application/vnd.ms-windows.printerpairing\":{\"source\":\"iana\"},\"application/vnd.ms-windows.wsd.oob\":{\"source\":\"iana\"},\"application/vnd.ms-wmdrm.lic-chlg-req\":{\"source\":\"iana\"},\"application/vnd.ms-wmdrm.lic-resp\":{\"source\":\"iana\"},\"application/vnd.ms-wmdrm.meter-chlg-req\":{\"source\":\"iana\"},\"application/vnd.ms-wmdrm.meter-resp\":{\"source\":\"iana\"},\"application/vnd.ms-word.document.macroenabled.12\":{\"source\":\"iana\",\"extensions\":[\"docm\"]},\"application/vnd.ms-word.template.macroenabled.12\":{\"source\":\"iana\",\"extensions\":[\"dotm\"]},\"application/vnd.ms-works\":{\"source\":\"iana\",\"extensions\":[\"wps\",\"wks\",\"wcm\",\"wdb\"]},\"application/vnd.ms-wpl\":{\"source\":\"iana\",\"extensions\":[\"wpl\"]},\"application/vnd.ms-xpsdocument\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"xps\"]},\"application/vnd.msa-disk-image\":{\"source\":\"iana\"},\"application/vnd.mseq\":{\"source\":\"iana\",\"extensions\":[\"mseq\"]},\"application/vnd.msign\":{\"source\":\"iana\"},\"application/vnd.multiad.creator\":{\"source\":\"iana\"},\"application/vnd.multiad.creator.cif\":{\"source\":\"iana\"},\"application/vnd.music-niff\":{\"source\":\"iana\"},\"application/vnd.musician\":{\"source\":\"iana\",\"extensions\":[\"mus\"]},\"application/vnd.muvee.style\":{\"source\":\"iana\",\"extensions\":[\"msty\"]},\"application/vnd.mynfc\":{\"source\":\"iana\",\"extensions\":[\"taglet\"]},\"application/vnd.ncd.control\":{\"source\":\"iana\"},\"application/vnd.ncd.reference\":{\"source\":\"iana\"},\"application/vnd.nervana\":{\"source\":\"iana\"},\"application/vnd.netfpx\":{\"source\":\"iana\"},\"application/vnd.neurolanguage.nlu\":{\"source\":\"iana\",\"extensions\":[\"nlu\"]},\"application/vnd.nintendo.nitro.rom\":{\"source\":\"iana\"},\"application/vnd.nintendo.snes.rom\":{\"source\":\"iana\"},\"application/vnd.nitf\":{\"source\":\"iana\",\"extensions\":[\"ntf\",\"nitf\"]},\"application/vnd.noblenet-directory\":{\"source\":\"iana\",\"extensions\":[\"nnd\"]},\"application/vnd.noblenet-sealer\":{\"source\":\"iana\",\"extensions\":[\"nns\"]},\"application/vnd.noblenet-web\":{\"source\":\"iana\",\"extensions\":[\"nnw\"]},\"application/vnd.nokia.catalogs\":{\"source\":\"iana\"},\"application/vnd.nokia.conml+wbxml\":{\"source\":\"iana\"},\"application/vnd.nokia.conml+xml\":{\"source\":\"iana\"},\"application/vnd.nokia.iptv.config+xml\":{\"source\":\"iana\"},\"application/vnd.nokia.isds-radio-presets\":{\"source\":\"iana\"},\"application/vnd.nokia.landmark+wbxml\":{\"source\":\"iana\"},\"application/vnd.nokia.landmark+xml\":{\"source\":\"iana\"},\"application/vnd.nokia.landmarkcollection+xml\":{\"source\":\"iana\"},\"application/vnd.nokia.n-gage.ac+xml\":{\"source\":\"iana\"},\"application/vnd.nokia.n-gage.data\":{\"source\":\"iana\",\"extensions\":[\"ngdat\"]},\"application/vnd.nokia.n-gage.symbian.install\":{\"source\":\"iana\",\"extensions\":[\"n-gage\"]},\"application/vnd.nokia.ncd\":{\"source\":\"iana\"},\"application/vnd.nokia.pcd+wbxml\":{\"source\":\"iana\"},\"application/vnd.nokia.pcd+xml\":{\"source\":\"iana\"},\"application/vnd.nokia.radio-preset\":{\"source\":\"iana\",\"extensions\":[\"rpst\"]},\"application/vnd.nokia.radio-presets\":{\"source\":\"iana\",\"extensions\":[\"rpss\"]},\"application/vnd.novadigm.edm\":{\"source\":\"iana\",\"extensions\":[\"edm\"]},\"application/vnd.novadigm.edx\":{\"source\":\"iana\",\"extensions\":[\"edx\"]},\"application/vnd.novadigm.ext\":{\"source\":\"iana\",\"extensions\":[\"ext\"]},\"application/vnd.ntt-local.content-share\":{\"source\":\"iana\"},\"application/vnd.ntt-local.file-transfer\":{\"source\":\"iana\"},\"application/vnd.ntt-local.ogw_remote-access\":{\"source\":\"iana\"},\"application/vnd.ntt-local.sip-ta_remote\":{\"source\":\"iana\"},\"application/vnd.ntt-local.sip-ta_tcp_stream\":{\"source\":\"iana\"},\"application/vnd.oasis.opendocument.chart\":{\"source\":\"iana\",\"extensions\":[\"odc\"]},\"application/vnd.oasis.opendocument.chart-template\":{\"source\":\"iana\",\"extensions\":[\"otc\"]},\"application/vnd.oasis.opendocument.database\":{\"source\":\"iana\",\"extensions\":[\"odb\"]},\"application/vnd.oasis.opendocument.formula\":{\"source\":\"iana\",\"extensions\":[\"odf\"]},\"application/vnd.oasis.opendocument.formula-template\":{\"source\":\"iana\",\"extensions\":[\"odft\"]},\"application/vnd.oasis.opendocument.graphics\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"odg\"]},\"application/vnd.oasis.opendocument.graphics-template\":{\"source\":\"iana\",\"extensions\":[\"otg\"]},\"application/vnd.oasis.opendocument.image\":{\"source\":\"iana\",\"extensions\":[\"odi\"]},\"application/vnd.oasis.opendocument.image-template\":{\"source\":\"iana\",\"extensions\":[\"oti\"]},\"application/vnd.oasis.opendocument.presentation\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"odp\"]},\"application/vnd.oasis.opendocument.presentation-template\":{\"source\":\"iana\",\"extensions\":[\"otp\"]},\"application/vnd.oasis.opendocument.spreadsheet\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"ods\"]},\"application/vnd.oasis.opendocument.spreadsheet-template\":{\"source\":\"iana\",\"extensions\":[\"ots\"]},\"application/vnd.oasis.opendocument.text\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"odt\"]},\"application/vnd.oasis.opendocument.text-master\":{\"source\":\"iana\",\"extensions\":[\"odm\"]},\"application/vnd.oasis.opendocument.text-template\":{\"source\":\"iana\",\"extensions\":[\"ott\"]},\"application/vnd.oasis.opendocument.text-web\":{\"source\":\"iana\",\"extensions\":[\"oth\"]},\"application/vnd.obn\":{\"source\":\"iana\"},\"application/vnd.oftn.l10n+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.oipf.contentaccessdownload+xml\":{\"source\":\"iana\"},\"application/vnd.oipf.contentaccessstreaming+xml\":{\"source\":\"iana\"},\"application/vnd.oipf.cspg-hexbinary\":{\"source\":\"iana\"},\"application/vnd.oipf.dae.svg+xml\":{\"source\":\"iana\"},\"application/vnd.oipf.dae.xhtml+xml\":{\"source\":\"iana\"},\"application/vnd.oipf.mippvcontrolmessage+xml\":{\"source\":\"iana\"},\"application/vnd.oipf.pae.gem\":{\"source\":\"iana\"},\"application/vnd.oipf.spdiscovery+xml\":{\"source\":\"iana\"},\"application/vnd.oipf.spdlist+xml\":{\"source\":\"iana\"},\"application/vnd.oipf.ueprofile+xml\":{\"source\":\"iana\"},\"application/vnd.oipf.userprofile+xml\":{\"source\":\"iana\"},\"application/vnd.olpc-sugar\":{\"source\":\"iana\",\"extensions\":[\"xo\"]},\"application/vnd.oma-scws-config\":{\"source\":\"iana\"},\"application/vnd.oma-scws-http-request\":{\"source\":\"iana\"},\"application/vnd.oma-scws-http-response\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.associated-procedure-parameter+xml\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.drm-trigger+xml\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.imd+xml\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.ltkm\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.notification+xml\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.provisioningtrigger\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.sgboot\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.sgdd+xml\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.sgdu\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.simple-symbol-container\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.smartcard-trigger+xml\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.sprov+xml\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.stkm\":{\"source\":\"iana\"},\"application/vnd.oma.cab-address-book+xml\":{\"source\":\"iana\"},\"application/vnd.oma.cab-feature-handler+xml\":{\"source\":\"iana\"},\"application/vnd.oma.cab-pcc+xml\":{\"source\":\"iana\"},\"application/vnd.oma.cab-subs-invite+xml\":{\"source\":\"iana\"},\"application/vnd.oma.cab-user-prefs+xml\":{\"source\":\"iana\"},\"application/vnd.oma.dcd\":{\"source\":\"iana\"},\"application/vnd.oma.dcdc\":{\"source\":\"iana\"},\"application/vnd.oma.dd2+xml\":{\"source\":\"iana\",\"extensions\":[\"dd2\"]},\"application/vnd.oma.drm.risd+xml\":{\"source\":\"iana\"},\"application/vnd.oma.group-usage-list+xml\":{\"source\":\"iana\"},\"application/vnd.oma.pal+xml\":{\"source\":\"iana\"},\"application/vnd.oma.poc.detailed-progress-report+xml\":{\"source\":\"iana\"},\"application/vnd.oma.poc.final-report+xml\":{\"source\":\"iana\"},\"application/vnd.oma.poc.groups+xml\":{\"source\":\"iana\"},\"application/vnd.oma.poc.invocation-descriptor+xml\":{\"source\":\"iana\"},\"application/vnd.oma.poc.optimized-progress-report+xml\":{\"source\":\"iana\"},\"application/vnd.oma.push\":{\"source\":\"iana\"},\"application/vnd.oma.scidm.messages+xml\":{\"source\":\"iana\"},\"application/vnd.oma.xcap-directory+xml\":{\"source\":\"iana\"},\"application/vnd.omads-email+xml\":{\"source\":\"iana\"},\"application/vnd.omads-file+xml\":{\"source\":\"iana\"},\"application/vnd.omads-folder+xml\":{\"source\":\"iana\"},\"application/vnd.omaloc-supl-init\":{\"source\":\"iana\"},\"application/vnd.onepager\":{\"source\":\"iana\"},\"application/vnd.openblox.game+xml\":{\"source\":\"iana\"},\"application/vnd.openblox.game-binary\":{\"source\":\"iana\"},\"application/vnd.openeye.oeb\":{\"source\":\"iana\"},\"application/vnd.openofficeorg.extension\":{\"source\":\"apache\",\"extensions\":[\"oxt\"]},\"application/vnd.openxmlformats-officedocument.custom-properties+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.drawing+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.extended-properties+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml-template\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.presentation\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"pptx\"]},\"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.slide\":{\"source\":\"iana\",\"extensions\":[\"sldx\"]},\"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.slideshow\":{\"source\":\"iana\",\"extensions\":[\"ppsx\"]},\"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.template\":{\"source\":\"apache\",\"extensions\":[\"potx\"]},\"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml-template\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"xlsx\"]},\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.template\":{\"source\":\"apache\",\"extensions\":[\"xltx\"]},\"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.theme+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.themeoverride+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.vmldrawing\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.wordprocessingml-template\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"docx\"]},\"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.wordprocessingml.template\":{\"source\":\"apache\",\"extensions\":[\"dotx\"]},\"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-package.core-properties+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-package.relationships+xml\":{\"source\":\"iana\"},\"application/vnd.oracle.resource+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.orange.indata\":{\"source\":\"iana\"},\"application/vnd.osa.netdeploy\":{\"source\":\"iana\"},\"application/vnd.osgeo.mapguide.package\":{\"source\":\"iana\",\"extensions\":[\"mgp\"]},\"application/vnd.osgi.bundle\":{\"source\":\"iana\"},\"application/vnd.osgi.dp\":{\"source\":\"iana\",\"extensions\":[\"dp\"]},\"application/vnd.osgi.subsystem\":{\"source\":\"iana\",\"extensions\":[\"esa\"]},\"application/vnd.otps.ct-kip+xml\":{\"source\":\"iana\"},\"application/vnd.oxli.countgraph\":{\"source\":\"iana\"},\"application/vnd.pagerduty+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.palm\":{\"source\":\"iana\",\"extensions\":[\"pdb\",\"pqa\",\"oprc\"]},\"application/vnd.panoply\":{\"source\":\"iana\"},\"application/vnd.paos+xml\":{\"source\":\"iana\"},\"application/vnd.paos.xml\":{\"source\":\"apache\"},\"application/vnd.pawaafile\":{\"source\":\"iana\",\"extensions\":[\"paw\"]},\"application/vnd.pcos\":{\"source\":\"iana\"},\"application/vnd.pg.format\":{\"source\":\"iana\",\"extensions\":[\"str\"]},\"application/vnd.pg.osasli\":{\"source\":\"iana\",\"extensions\":[\"ei6\"]},\"application/vnd.piaccess.application-licence\":{\"source\":\"iana\"},\"application/vnd.picsel\":{\"source\":\"iana\",\"extensions\":[\"efif\"]},\"application/vnd.pmi.widget\":{\"source\":\"iana\",\"extensions\":[\"wg\"]},\"application/vnd.poc.group-advertisement+xml\":{\"source\":\"iana\"},\"application/vnd.pocketlearn\":{\"source\":\"iana\",\"extensions\":[\"plf\"]},\"application/vnd.powerbuilder6\":{\"source\":\"iana\",\"extensions\":[\"pbd\"]},\"application/vnd.powerbuilder6-s\":{\"source\":\"iana\"},\"application/vnd.powerbuilder7\":{\"source\":\"iana\"},\"application/vnd.powerbuilder7-s\":{\"source\":\"iana\"},\"application/vnd.powerbuilder75\":{\"source\":\"iana\"},\"application/vnd.powerbuilder75-s\":{\"source\":\"iana\"},\"application/vnd.preminet\":{\"source\":\"iana\"},\"application/vnd.previewsystems.box\":{\"source\":\"iana\",\"extensions\":[\"box\"]},\"application/vnd.proteus.magazine\":{\"source\":\"iana\",\"extensions\":[\"mgz\"]},\"application/vnd.publishare-delta-tree\":{\"source\":\"iana\",\"extensions\":[\"qps\"]},\"application/vnd.pvi.ptid1\":{\"source\":\"iana\",\"extensions\":[\"ptid\"]},\"application/vnd.pwg-multiplexed\":{\"source\":\"iana\"},\"application/vnd.pwg-xhtml-print+xml\":{\"source\":\"iana\"},\"application/vnd.qualcomm.brew-app-res\":{\"source\":\"iana\"},\"application/vnd.quark.quarkxpress\":{\"source\":\"iana\",\"extensions\":[\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"]},\"application/vnd.quobject-quoxdocument\":{\"source\":\"iana\"},\"application/vnd.radisys.moml+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-audit+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-audit-conf+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-audit-conn+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-audit-dialog+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-audit-stream+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-conf+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-dialog+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-dialog-base+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-dialog-fax-detect+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-dialog-group+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-dialog-speech+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-dialog-transform+xml\":{\"source\":\"iana\"},\"application/vnd.rainstor.data\":{\"source\":\"iana\"},\"application/vnd.rapid\":{\"source\":\"iana\"},\"application/vnd.realvnc.bed\":{\"source\":\"iana\",\"extensions\":[\"bed\"]},\"application/vnd.recordare.musicxml\":{\"source\":\"iana\",\"extensions\":[\"mxl\"]},\"application/vnd.recordare.musicxml+xml\":{\"source\":\"iana\",\"extensions\":[\"musicxml\"]},\"application/vnd.renlearn.rlprint\":{\"source\":\"iana\"},\"application/vnd.rig.cryptonote\":{\"source\":\"iana\",\"extensions\":[\"cryptonote\"]},\"application/vnd.rim.cod\":{\"source\":\"apache\",\"extensions\":[\"cod\"]},\"application/vnd.rn-realmedia\":{\"source\":\"apache\",\"extensions\":[\"rm\"]},\"application/vnd.rn-realmedia-vbr\":{\"source\":\"apache\",\"extensions\":[\"rmvb\"]},\"application/vnd.route66.link66+xml\":{\"source\":\"iana\",\"extensions\":[\"link66\"]},\"application/vnd.rs-274x\":{\"source\":\"iana\"},\"application/vnd.ruckus.download\":{\"source\":\"iana\"},\"application/vnd.s3sms\":{\"source\":\"iana\"},\"application/vnd.sailingtracker.track\":{\"source\":\"iana\",\"extensions\":[\"st\"]},\"application/vnd.sbm.cid\":{\"source\":\"iana\"},\"application/vnd.sbm.mid2\":{\"source\":\"iana\"},\"application/vnd.scribus\":{\"source\":\"iana\"},\"application/vnd.sealed.3df\":{\"source\":\"iana\"},\"application/vnd.sealed.csf\":{\"source\":\"iana\"},\"application/vnd.sealed.doc\":{\"source\":\"iana\"},\"application/vnd.sealed.eml\":{\"source\":\"iana\"},\"application/vnd.sealed.mht\":{\"source\":\"iana\"},\"application/vnd.sealed.net\":{\"source\":\"iana\"},\"application/vnd.sealed.ppt\":{\"source\":\"iana\"},\"application/vnd.sealed.tiff\":{\"source\":\"iana\"},\"application/vnd.sealed.xls\":{\"source\":\"iana\"},\"application/vnd.sealedmedia.softseal.html\":{\"source\":\"iana\"},\"application/vnd.sealedmedia.softseal.pdf\":{\"source\":\"iana\"},\"application/vnd.seemail\":{\"source\":\"iana\",\"extensions\":[\"see\"]},\"application/vnd.sema\":{\"source\":\"iana\",\"extensions\":[\"sema\"]},\"application/vnd.semd\":{\"source\":\"iana\",\"extensions\":[\"semd\"]},\"application/vnd.semf\":{\"source\":\"iana\",\"extensions\":[\"semf\"]},\"application/vnd.shana.informed.formdata\":{\"source\":\"iana\",\"extensions\":[\"ifm\"]},\"application/vnd.shana.informed.formtemplate\":{\"source\":\"iana\",\"extensions\":[\"itp\"]},\"application/vnd.shana.informed.interchange\":{\"source\":\"iana\",\"extensions\":[\"iif\"]},\"application/vnd.shana.informed.package\":{\"source\":\"iana\",\"extensions\":[\"ipk\"]},\"application/vnd.simtech-mindmapper\":{\"source\":\"iana\",\"extensions\":[\"twd\",\"twds\"]},\"application/vnd.siren+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.smaf\":{\"source\":\"iana\",\"extensions\":[\"mmf\"]},\"application/vnd.smart.notebook\":{\"source\":\"iana\"},\"application/vnd.smart.teacher\":{\"source\":\"iana\",\"extensions\":[\"teacher\"]},\"application/vnd.software602.filler.form+xml\":{\"source\":\"iana\"},\"application/vnd.software602.filler.form-xml-zip\":{\"source\":\"iana\"},\"application/vnd.solent.sdkm+xml\":{\"source\":\"iana\",\"extensions\":[\"sdkm\",\"sdkd\"]},\"application/vnd.spotfire.dxp\":{\"source\":\"iana\",\"extensions\":[\"dxp\"]},\"application/vnd.spotfire.sfs\":{\"source\":\"iana\",\"extensions\":[\"sfs\"]},\"application/vnd.sss-cod\":{\"source\":\"iana\"},\"application/vnd.sss-dtf\":{\"source\":\"iana\"},\"application/vnd.sss-ntf\":{\"source\":\"iana\"},\"application/vnd.stardivision.calc\":{\"source\":\"apache\",\"extensions\":[\"sdc\"]},\"application/vnd.stardivision.draw\":{\"source\":\"apache\",\"extensions\":[\"sda\"]},\"application/vnd.stardivision.impress\":{\"source\":\"apache\",\"extensions\":[\"sdd\"]},\"application/vnd.stardivision.math\":{\"source\":\"apache\",\"extensions\":[\"smf\"]},\"application/vnd.stardivision.writer\":{\"source\":\"apache\",\"extensions\":[\"sdw\",\"vor\"]},\"application/vnd.stardivision.writer-global\":{\"source\":\"apache\",\"extensions\":[\"sgl\"]},\"application/vnd.stepmania.package\":{\"source\":\"iana\",\"extensions\":[\"smzip\"]},\"application/vnd.stepmania.stepchart\":{\"source\":\"iana\",\"extensions\":[\"sm\"]},\"application/vnd.street-stream\":{\"source\":\"iana\"},\"application/vnd.sun.wadl+xml\":{\"source\":\"iana\"},\"application/vnd.sun.xml.calc\":{\"source\":\"apache\",\"extensions\":[\"sxc\"]},\"application/vnd.sun.xml.calc.template\":{\"source\":\"apache\",\"extensions\":[\"stc\"]},\"application/vnd.sun.xml.draw\":{\"source\":\"apache\",\"extensions\":[\"sxd\"]},\"application/vnd.sun.xml.draw.template\":{\"source\":\"apache\",\"extensions\":[\"std\"]},\"application/vnd.sun.xml.impress\":{\"source\":\"apache\",\"extensions\":[\"sxi\"]},\"application/vnd.sun.xml.impress.template\":{\"source\":\"apache\",\"extensions\":[\"sti\"]},\"application/vnd.sun.xml.math\":{\"source\":\"apache\",\"extensions\":[\"sxm\"]},\"application/vnd.sun.xml.writer\":{\"source\":\"apache\",\"extensions\":[\"sxw\"]},\"application/vnd.sun.xml.writer.global\":{\"source\":\"apache\",\"extensions\":[\"sxg\"]},\"application/vnd.sun.xml.writer.template\":{\"source\":\"apache\",\"extensions\":[\"stw\"]},\"application/vnd.sus-calendar\":{\"source\":\"iana\",\"extensions\":[\"sus\",\"susp\"]},\"application/vnd.svd\":{\"source\":\"iana\",\"extensions\":[\"svd\"]},\"application/vnd.swiftview-ics\":{\"source\":\"iana\"},\"application/vnd.symbian.install\":{\"source\":\"apache\",\"extensions\":[\"sis\",\"sisx\"]},\"application/vnd.syncml+xml\":{\"source\":\"iana\",\"extensions\":[\"xsm\"]},\"application/vnd.syncml.dm+wbxml\":{\"source\":\"iana\",\"extensions\":[\"bdm\"]},\"application/vnd.syncml.dm+xml\":{\"source\":\"iana\",\"extensions\":[\"xdm\"]},\"application/vnd.syncml.dm.notification\":{\"source\":\"iana\"},\"application/vnd.syncml.dmddf+wbxml\":{\"source\":\"iana\"},\"application/vnd.syncml.dmddf+xml\":{\"source\":\"iana\"},\"application/vnd.syncml.dmtnds+wbxml\":{\"source\":\"iana\"},\"application/vnd.syncml.dmtnds+xml\":{\"source\":\"iana\"},\"application/vnd.syncml.ds.notification\":{\"source\":\"iana\"},\"application/vnd.tao.intent-module-archive\":{\"source\":\"iana\",\"extensions\":[\"tao\"]},\"application/vnd.tcpdump.pcap\":{\"source\":\"iana\",\"extensions\":[\"pcap\",\"cap\",\"dmp\"]},\"application/vnd.tmd.mediaflex.api+xml\":{\"source\":\"iana\"},\"application/vnd.tml\":{\"source\":\"iana\"},\"application/vnd.tmobile-livetv\":{\"source\":\"iana\",\"extensions\":[\"tmo\"]},\"application/vnd.trid.tpt\":{\"source\":\"iana\",\"extensions\":[\"tpt\"]},\"application/vnd.triscape.mxs\":{\"source\":\"iana\",\"extensions\":[\"mxs\"]},\"application/vnd.trueapp\":{\"source\":\"iana\",\"extensions\":[\"tra\"]},\"application/vnd.truedoc\":{\"source\":\"iana\"},\"application/vnd.ubisoft.webplayer\":{\"source\":\"iana\"},\"application/vnd.ufdl\":{\"source\":\"iana\",\"extensions\":[\"ufd\",\"ufdl\"]},\"application/vnd.uiq.theme\":{\"source\":\"iana\",\"extensions\":[\"utz\"]},\"application/vnd.umajin\":{\"source\":\"iana\",\"extensions\":[\"umj\"]},\"application/vnd.unity\":{\"source\":\"iana\",\"extensions\":[\"unityweb\"]},\"application/vnd.uoml+xml\":{\"source\":\"iana\",\"extensions\":[\"uoml\"]},\"application/vnd.uplanet.alert\":{\"source\":\"iana\"},\"application/vnd.uplanet.alert-wbxml\":{\"source\":\"iana\"},\"application/vnd.uplanet.bearer-choice\":{\"source\":\"iana\"},\"application/vnd.uplanet.bearer-choice-wbxml\":{\"source\":\"iana\"},\"application/vnd.uplanet.cacheop\":{\"source\":\"iana\"},\"application/vnd.uplanet.cacheop-wbxml\":{\"source\":\"iana\"},\"application/vnd.uplanet.channel\":{\"source\":\"iana\"},\"application/vnd.uplanet.channel-wbxml\":{\"source\":\"iana\"},\"application/vnd.uplanet.list\":{\"source\":\"iana\"},\"application/vnd.uplanet.list-wbxml\":{\"source\":\"iana\"},\"application/vnd.uplanet.listcmd\":{\"source\":\"iana\"},\"application/vnd.uplanet.listcmd-wbxml\":{\"source\":\"iana\"},\"application/vnd.uplanet.signal\":{\"source\":\"iana\"},\"application/vnd.uri-map\":{\"source\":\"iana\"},\"application/vnd.valve.source.material\":{\"source\":\"iana\"},\"application/vnd.vcx\":{\"source\":\"iana\",\"extensions\":[\"vcx\"]},\"application/vnd.vd-study\":{\"source\":\"iana\"},\"application/vnd.vectorworks\":{\"source\":\"iana\"},\"application/vnd.vel+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.verimatrix.vcas\":{\"source\":\"iana\"},\"application/vnd.vidsoft.vidconference\":{\"source\":\"iana\"},\"application/vnd.visio\":{\"source\":\"iana\",\"extensions\":[\"vsd\",\"vst\",\"vss\",\"vsw\"]},\"application/vnd.visionary\":{\"source\":\"iana\",\"extensions\":[\"vis\"]},\"application/vnd.vividence.scriptfile\":{\"source\":\"iana\"},\"application/vnd.vsf\":{\"source\":\"iana\",\"extensions\":[\"vsf\"]},\"application/vnd.wap.sic\":{\"source\":\"iana\"},\"application/vnd.wap.slc\":{\"source\":\"iana\"},\"application/vnd.wap.wbxml\":{\"source\":\"iana\",\"extensions\":[\"wbxml\"]},\"application/vnd.wap.wmlc\":{\"source\":\"iana\",\"extensions\":[\"wmlc\"]},\"application/vnd.wap.wmlscriptc\":{\"source\":\"iana\",\"extensions\":[\"wmlsc\"]},\"application/vnd.webturbo\":{\"source\":\"iana\",\"extensions\":[\"wtb\"]},\"application/vnd.wfa.p2p\":{\"source\":\"iana\"},\"application/vnd.wfa.wsc\":{\"source\":\"iana\"},\"application/vnd.windows.devicepairing\":{\"source\":\"iana\"},\"application/vnd.wmc\":{\"source\":\"iana\"},\"application/vnd.wmf.bootstrap\":{\"source\":\"iana\"},\"application/vnd.wolfram.mathematica\":{\"source\":\"iana\"},\"application/vnd.wolfram.mathematica.package\":{\"source\":\"iana\"},\"application/vnd.wolfram.player\":{\"source\":\"iana\",\"extensions\":[\"nbp\"]},\"application/vnd.wordperfect\":{\"source\":\"iana\",\"extensions\":[\"wpd\"]},\"application/vnd.wqd\":{\"source\":\"iana\",\"extensions\":[\"wqd\"]},\"application/vnd.wrq-hp3000-labelled\":{\"source\":\"iana\"},\"application/vnd.wt.stf\":{\"source\":\"iana\",\"extensions\":[\"stf\"]},\"application/vnd.wv.csp+wbxml\":{\"source\":\"iana\"},\"application/vnd.wv.csp+xml\":{\"source\":\"iana\"},\"application/vnd.wv.ssp+xml\":{\"source\":\"iana\"},\"application/vnd.xacml+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.xara\":{\"source\":\"iana\",\"extensions\":[\"xar\"]},\"application/vnd.xfdl\":{\"source\":\"iana\",\"extensions\":[\"xfdl\"]},\"application/vnd.xfdl.webform\":{\"source\":\"iana\"},\"application/vnd.xmi+xml\":{\"source\":\"iana\"},\"application/vnd.xmpie.cpkg\":{\"source\":\"iana\"},\"application/vnd.xmpie.dpkg\":{\"source\":\"iana\"},\"application/vnd.xmpie.plan\":{\"source\":\"iana\"},\"application/vnd.xmpie.ppkg\":{\"source\":\"iana\"},\"application/vnd.xmpie.xlim\":{\"source\":\"iana\"},\"application/vnd.yamaha.hv-dic\":{\"source\":\"iana\",\"extensions\":[\"hvd\"]},\"application/vnd.yamaha.hv-script\":{\"source\":\"iana\",\"extensions\":[\"hvs\"]},\"application/vnd.yamaha.hv-voice\":{\"source\":\"iana\",\"extensions\":[\"hvp\"]},\"application/vnd.yamaha.openscoreformat\":{\"source\":\"iana\",\"extensions\":[\"osf\"]},\"application/vnd.yamaha.openscoreformat.osfpvg+xml\":{\"source\":\"iana\",\"extensions\":[\"osfpvg\"]},\"application/vnd.yamaha.remote-setup\":{\"source\":\"iana\"},\"application/vnd.yamaha.smaf-audio\":{\"source\":\"iana\",\"extensions\":[\"saf\"]},\"application/vnd.yamaha.smaf-phrase\":{\"source\":\"iana\",\"extensions\":[\"spf\"]},\"application/vnd.yamaha.through-ngn\":{\"source\":\"iana\"},\"application/vnd.yamaha.tunnel-udpencap\":{\"source\":\"iana\"},\"application/vnd.yaoweme\":{\"source\":\"iana\"},\"application/vnd.yellowriver-custom-menu\":{\"source\":\"iana\",\"extensions\":[\"cmp\"]},\"application/vnd.zul\":{\"source\":\"iana\",\"extensions\":[\"zir\",\"zirz\"]},\"application/vnd.zzazz.deck+xml\":{\"source\":\"iana\",\"extensions\":[\"zaz\"]},\"application/voicexml+xml\":{\"source\":\"iana\",\"extensions\":[\"vxml\"]},\"application/vq-rtcpxr\":{\"source\":\"iana\"},\"application/watcherinfo+xml\":{\"source\":\"iana\"},\"application/whoispp-query\":{\"source\":\"iana\"},\"application/whoispp-response\":{\"source\":\"iana\"},\"application/widget\":{\"source\":\"iana\",\"extensions\":[\"wgt\"]},\"application/winhlp\":{\"source\":\"apache\",\"extensions\":[\"hlp\"]},\"application/wita\":{\"source\":\"iana\"},\"application/wordperfect5.1\":{\"source\":\"iana\"},\"application/wsdl+xml\":{\"source\":\"iana\",\"extensions\":[\"wsdl\"]},\"application/wspolicy+xml\":{\"source\":\"iana\",\"extensions\":[\"wspolicy\"]},\"application/x-7z-compressed\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"7z\"]},\"application/x-abiword\":{\"source\":\"apache\",\"extensions\":[\"abw\"]},\"application/x-ace-compressed\":{\"source\":\"apache\",\"extensions\":[\"ace\"]},\"application/x-amf\":{\"source\":\"apache\"},\"application/x-apple-diskimage\":{\"source\":\"apache\",\"extensions\":[\"dmg\"]},\"application/x-authorware-bin\":{\"source\":\"apache\",\"extensions\":[\"aab\",\"x32\",\"u32\",\"vox\"]},\"application/x-authorware-map\":{\"source\":\"apache\",\"extensions\":[\"aam\"]},\"application/x-authorware-seg\":{\"source\":\"apache\",\"extensions\":[\"aas\"]},\"application/x-bcpio\":{\"source\":\"apache\",\"extensions\":[\"bcpio\"]},\"application/x-bdoc\":{\"compressible\":false,\"extensions\":[\"bdoc\"]},\"application/x-bittorrent\":{\"source\":\"apache\",\"extensions\":[\"torrent\"]},\"application/x-blorb\":{\"source\":\"apache\",\"extensions\":[\"blb\",\"blorb\"]},\"application/x-bzip\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"bz\"]},\"application/x-bzip2\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"bz2\",\"boz\"]},\"application/x-cbr\":{\"source\":\"apache\",\"extensions\":[\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"]},\"application/x-cdlink\":{\"source\":\"apache\",\"extensions\":[\"vcd\"]},\"application/x-cfs-compressed\":{\"source\":\"apache\",\"extensions\":[\"cfs\"]},\"application/x-chat\":{\"source\":\"apache\",\"extensions\":[\"chat\"]},\"application/x-chess-pgn\":{\"source\":\"apache\",\"extensions\":[\"pgn\"]},\"application/x-chrome-extension\":{\"extensions\":[\"crx\"]},\"application/x-cocoa\":{\"source\":\"nginx\",\"extensions\":[\"cco\"]},\"application/x-compress\":{\"source\":\"apache\"},\"application/x-conference\":{\"source\":\"apache\",\"extensions\":[\"nsc\"]},\"application/x-cpio\":{\"source\":\"apache\",\"extensions\":[\"cpio\"]},\"application/x-csh\":{\"source\":\"apache\",\"extensions\":[\"csh\"]},\"application/x-deb\":{\"compressible\":false},\"application/x-debian-package\":{\"source\":\"apache\",\"extensions\":[\"deb\",\"udeb\"]},\"application/x-dgc-compressed\":{\"source\":\"apache\",\"extensions\":[\"dgc\"]},\"application/x-director\":{\"source\":\"apache\",\"extensions\":[\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"]},\"application/x-doom\":{\"source\":\"apache\",\"extensions\":[\"wad\"]},\"application/x-dtbncx+xml\":{\"source\":\"apache\",\"extensions\":[\"ncx\"]},\"application/x-dtbook+xml\":{\"source\":\"apache\",\"extensions\":[\"dtb\"]},\"application/x-dtbresource+xml\":{\"source\":\"apache\",\"extensions\":[\"res\"]},\"application/x-dvi\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"dvi\"]},\"application/x-envoy\":{\"source\":\"apache\",\"extensions\":[\"evy\"]},\"application/x-eva\":{\"source\":\"apache\",\"extensions\":[\"eva\"]},\"application/x-font-bdf\":{\"source\":\"apache\",\"extensions\":[\"bdf\"]},\"application/x-font-dos\":{\"source\":\"apache\"},\"application/x-font-framemaker\":{\"source\":\"apache\"},\"application/x-font-ghostscript\":{\"source\":\"apache\",\"extensions\":[\"gsf\"]},\"application/x-font-libgrx\":{\"source\":\"apache\"},\"application/x-font-linux-psf\":{\"source\":\"apache\",\"extensions\":[\"psf\"]},\"application/x-font-otf\":{\"source\":\"apache\",\"compressible\":true,\"extensions\":[\"otf\"]},\"application/x-font-pcf\":{\"source\":\"apache\",\"extensions\":[\"pcf\"]},\"application/x-font-snf\":{\"source\":\"apache\",\"extensions\":[\"snf\"]},\"application/x-font-speedo\":{\"source\":\"apache\"},\"application/x-font-sunos-news\":{\"source\":\"apache\"},\"application/x-font-ttf\":{\"source\":\"apache\",\"compressible\":true,\"extensions\":[\"ttf\",\"ttc\"]},\"application/x-font-type1\":{\"source\":\"apache\",\"extensions\":[\"pfa\",\"pfb\",\"pfm\",\"afm\"]},\"application/x-font-vfont\":{\"source\":\"apache\"},\"application/x-freearc\":{\"source\":\"apache\",\"extensions\":[\"arc\"]},\"application/x-futuresplash\":{\"source\":\"apache\",\"extensions\":[\"spl\"]},\"application/x-gca-compressed\":{\"source\":\"apache\",\"extensions\":[\"gca\"]},\"application/x-glulx\":{\"source\":\"apache\",\"extensions\":[\"ulx\"]},\"application/x-gnumeric\":{\"source\":\"apache\",\"extensions\":[\"gnumeric\"]},\"application/x-gramps-xml\":{\"source\":\"apache\",\"extensions\":[\"gramps\"]},\"application/x-gtar\":{\"source\":\"apache\",\"extensions\":[\"gtar\"]},\"application/x-gzip\":{\"source\":\"apache\"},\"application/x-hdf\":{\"source\":\"apache\",\"extensions\":[\"hdf\"]},\"application/x-httpd-php\":{\"compressible\":true,\"extensions\":[\"php\"]},\"application/x-install-instructions\":{\"source\":\"apache\",\"extensions\":[\"install\"]},\"application/x-iso9660-image\":{\"source\":\"apache\",\"extensions\":[\"iso\"]},\"application/x-java-archive-diff\":{\"source\":\"nginx\",\"extensions\":[\"jardiff\"]},\"application/x-java-jnlp-file\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"jnlp\"]},\"application/x-javascript\":{\"compressible\":true},\"application/x-latex\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"latex\"]},\"application/x-lua-bytecode\":{\"extensions\":[\"luac\"]},\"application/x-lzh-compressed\":{\"source\":\"apache\",\"extensions\":[\"lzh\",\"lha\"]},\"application/x-makeself\":{\"source\":\"nginx\",\"extensions\":[\"run\"]},\"application/x-mie\":{\"source\":\"apache\",\"extensions\":[\"mie\"]},\"application/x-mobipocket-ebook\":{\"source\":\"apache\",\"extensions\":[\"prc\",\"mobi\"]},\"application/x-mpegurl\":{\"compressible\":false},\"application/x-ms-application\":{\"source\":\"apache\",\"extensions\":[\"application\"]},\"application/x-ms-shortcut\":{\"source\":\"apache\",\"extensions\":[\"lnk\"]},\"application/x-ms-wmd\":{\"source\":\"apache\",\"extensions\":[\"wmd\"]},\"application/x-ms-wmz\":{\"source\":\"apache\",\"extensions\":[\"wmz\"]},\"application/x-ms-xbap\":{\"source\":\"apache\",\"extensions\":[\"xbap\"]},\"application/x-msaccess\":{\"source\":\"apache\",\"extensions\":[\"mdb\"]},\"application/x-msbinder\":{\"source\":\"apache\",\"extensions\":[\"obd\"]},\"application/x-mscardfile\":{\"source\":\"apache\",\"extensions\":[\"crd\"]},\"application/x-msclip\":{\"source\":\"apache\",\"extensions\":[\"clp\"]},\"application/x-msdos-program\":{\"extensions\":[\"exe\"]},\"application/x-msdownload\":{\"source\":\"apache\",\"extensions\":[\"exe\",\"dll\",\"com\",\"bat\",\"msi\"]},\"application/x-msmediaview\":{\"source\":\"apache\",\"extensions\":[\"mvb\",\"m13\",\"m14\"]},\"application/x-msmetafile\":{\"source\":\"apache\",\"extensions\":[\"wmf\",\"wmz\",\"emf\",\"emz\"]},\"application/x-msmoney\":{\"source\":\"apache\",\"extensions\":[\"mny\"]},\"application/x-mspublisher\":{\"source\":\"apache\",\"extensions\":[\"pub\"]},\"application/x-msschedule\":{\"source\":\"apache\",\"extensions\":[\"scd\"]},\"application/x-msterminal\":{\"source\":\"apache\",\"extensions\":[\"trm\"]},\"application/x-mswrite\":{\"source\":\"apache\",\"extensions\":[\"wri\"]},\"application/x-netcdf\":{\"source\":\"apache\",\"extensions\":[\"nc\",\"cdf\"]},\"application/x-ns-proxy-autoconfig\":{\"compressible\":true,\"extensions\":[\"pac\"]},\"application/x-nzb\":{\"source\":\"apache\",\"extensions\":[\"nzb\"]},\"application/x-perl\":{\"source\":\"nginx\",\"extensions\":[\"pl\",\"pm\"]},\"application/x-pilot\":{\"source\":\"nginx\",\"extensions\":[\"prc\",\"pdb\"]},\"application/x-pkcs12\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"p12\",\"pfx\"]},\"application/x-pkcs7-certificates\":{\"source\":\"apache\",\"extensions\":[\"p7b\",\"spc\"]},\"application/x-pkcs7-certreqresp\":{\"source\":\"apache\",\"extensions\":[\"p7r\"]},\"application/x-rar-compressed\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"rar\"]},\"application/x-redhat-package-manager\":{\"source\":\"nginx\",\"extensions\":[\"rpm\"]},\"application/x-research-info-systems\":{\"source\":\"apache\",\"extensions\":[\"ris\"]},\"application/x-sea\":{\"source\":\"nginx\",\"extensions\":[\"sea\"]},\"application/x-sh\":{\"source\":\"apache\",\"compressible\":true,\"extensions\":[\"sh\"]},\"application/x-shar\":{\"source\":\"apache\",\"extensions\":[\"shar\"]},\"application/x-shockwave-flash\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"swf\"]},\"application/x-silverlight-app\":{\"source\":\"apache\",\"extensions\":[\"xap\"]},\"application/x-sql\":{\"source\":\"apache\",\"extensions\":[\"sql\"]},\"application/x-stuffit\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"sit\"]},\"application/x-stuffitx\":{\"source\":\"apache\",\"extensions\":[\"sitx\"]},\"application/x-subrip\":{\"source\":\"apache\",\"extensions\":[\"srt\"]},\"application/x-sv4cpio\":{\"source\":\"apache\",\"extensions\":[\"sv4cpio\"]},\"application/x-sv4crc\":{\"source\":\"apache\",\"extensions\":[\"sv4crc\"]},\"application/x-t3vm-image\":{\"source\":\"apache\",\"extensions\":[\"t3\"]},\"application/x-tads\":{\"source\":\"apache\",\"extensions\":[\"gam\"]},\"application/x-tar\":{\"source\":\"apache\",\"compressible\":true,\"extensions\":[\"tar\"]},\"application/x-tcl\":{\"source\":\"apache\",\"extensions\":[\"tcl\",\"tk\"]},\"application/x-tex\":{\"source\":\"apache\",\"extensions\":[\"tex\"]},\"application/x-tex-tfm\":{\"source\":\"apache\",\"extensions\":[\"tfm\"]},\"application/x-texinfo\":{\"source\":\"apache\",\"extensions\":[\"texinfo\",\"texi\"]},\"application/x-tgif\":{\"source\":\"apache\",\"extensions\":[\"obj\"]},\"application/x-ustar\":{\"source\":\"apache\",\"extensions\":[\"ustar\"]},\"application/x-wais-source\":{\"source\":\"apache\",\"extensions\":[\"src\"]},\"application/x-web-app-manifest+json\":{\"compressible\":true,\"extensions\":[\"webapp\"]},\"application/x-www-form-urlencoded\":{\"source\":\"iana\",\"compressible\":true},\"application/x-x509-ca-cert\":{\"source\":\"apache\",\"extensions\":[\"der\",\"crt\",\"pem\"]},\"application/x-xfig\":{\"source\":\"apache\",\"extensions\":[\"fig\"]},\"application/x-xliff+xml\":{\"source\":\"apache\",\"extensions\":[\"xlf\"]},\"application/x-xpinstall\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"xpi\"]},\"application/x-xz\":{\"source\":\"apache\",\"extensions\":[\"xz\"]},\"application/x-zmachine\":{\"source\":\"apache\",\"extensions\":[\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"]},\"application/x400-bp\":{\"source\":\"iana\"},\"application/xacml+xml\":{\"source\":\"iana\"},\"application/xaml+xml\":{\"source\":\"apache\",\"extensions\":[\"xaml\"]},\"application/xcap-att+xml\":{\"source\":\"iana\"},\"application/xcap-caps+xml\":{\"source\":\"iana\"},\"application/xcap-diff+xml\":{\"source\":\"iana\",\"extensions\":[\"xdf\"]},\"application/xcap-el+xml\":{\"source\":\"iana\"},\"application/xcap-error+xml\":{\"source\":\"iana\"},\"application/xcap-ns+xml\":{\"source\":\"iana\"},\"application/xcon-conference-info+xml\":{\"source\":\"iana\"},\"application/xcon-conference-info-diff+xml\":{\"source\":\"iana\"},\"application/xenc+xml\":{\"source\":\"iana\",\"extensions\":[\"xenc\"]},\"application/xhtml+xml\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"xhtml\",\"xht\"]},\"application/xhtml-voice+xml\":{\"source\":\"apache\"},\"application/xml\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"xml\",\"xsl\",\"xsd\",\"rng\"]},\"application/xml-dtd\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"dtd\"]},\"application/xml-external-parsed-entity\":{\"source\":\"iana\"},\"application/xml-patch+xml\":{\"source\":\"iana\"},\"application/xmpp+xml\":{\"source\":\"iana\"},\"application/xop+xml\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"xop\"]},\"application/xproc+xml\":{\"source\":\"apache\",\"extensions\":[\"xpl\"]},\"application/xslt+xml\":{\"source\":\"iana\",\"extensions\":[\"xslt\"]},\"application/xspf+xml\":{\"source\":\"apache\",\"extensions\":[\"xspf\"]},\"application/xv+xml\":{\"source\":\"iana\",\"extensions\":[\"mxml\",\"xhvml\",\"xvml\",\"xvm\"]},\"application/yang\":{\"source\":\"iana\",\"extensions\":[\"yang\"]},\"application/yin+xml\":{\"source\":\"iana\",\"extensions\":[\"yin\"]},\"application/zip\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"zip\"]},\"application/zlib\":{\"source\":\"iana\"},\"audio/1d-interleaved-parityfec\":{\"source\":\"iana\"},\"audio/32kadpcm\":{\"source\":\"iana\"},\"audio/3gpp\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"3gpp\"]},\"audio/3gpp2\":{\"source\":\"iana\"},\"audio/ac3\":{\"source\":\"iana\"},\"audio/adpcm\":{\"source\":\"apache\",\"extensions\":[\"adp\"]},\"audio/amr\":{\"source\":\"iana\"},\"audio/amr-wb\":{\"source\":\"iana\"},\"audio/amr-wb+\":{\"source\":\"iana\"},\"audio/aptx\":{\"source\":\"iana\"},\"audio/asc\":{\"source\":\"iana\"},\"audio/atrac-advanced-lossless\":{\"source\":\"iana\"},\"audio/atrac-x\":{\"source\":\"iana\"},\"audio/atrac3\":{\"source\":\"iana\"},\"audio/basic\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"au\",\"snd\"]},\"audio/bv16\":{\"source\":\"iana\"},\"audio/bv32\":{\"source\":\"iana\"},\"audio/clearmode\":{\"source\":\"iana\"},\"audio/cn\":{\"source\":\"iana\"},\"audio/dat12\":{\"source\":\"iana\"},\"audio/dls\":{\"source\":\"iana\"},\"audio/dsr-es201108\":{\"source\":\"iana\"},\"audio/dsr-es202050\":{\"source\":\"iana\"},\"audio/dsr-es202211\":{\"source\":\"iana\"},\"audio/dsr-es202212\":{\"source\":\"iana\"},\"audio/dv\":{\"source\":\"iana\"},\"audio/dvi4\":{\"source\":\"iana\"},\"audio/eac3\":{\"source\":\"iana\"},\"audio/encaprtp\":{\"source\":\"iana\"},\"audio/evrc\":{\"source\":\"iana\"},\"audio/evrc-qcp\":{\"source\":\"iana\"},\"audio/evrc0\":{\"source\":\"iana\"},\"audio/evrc1\":{\"source\":\"iana\"},\"audio/evrcb\":{\"source\":\"iana\"},\"audio/evrcb0\":{\"source\":\"iana\"},\"audio/evrcb1\":{\"source\":\"iana\"},\"audio/evrcnw\":{\"source\":\"iana\"},\"audio/evrcnw0\":{\"source\":\"iana\"},\"audio/evrcnw1\":{\"source\":\"iana\"},\"audio/evrcwb\":{\"source\":\"iana\"},\"audio/evrcwb0\":{\"source\":\"iana\"},\"audio/evrcwb1\":{\"source\":\"iana\"},\"audio/evs\":{\"source\":\"iana\"},\"audio/fwdred\":{\"source\":\"iana\"},\"audio/g711-0\":{\"source\":\"iana\"},\"audio/g719\":{\"source\":\"iana\"},\"audio/g722\":{\"source\":\"iana\"},\"audio/g7221\":{\"source\":\"iana\"},\"audio/g723\":{\"source\":\"iana\"},\"audio/g726-16\":{\"source\":\"iana\"},\"audio/g726-24\":{\"source\":\"iana\"},\"audio/g726-32\":{\"source\":\"iana\"},\"audio/g726-40\":{\"source\":\"iana\"},\"audio/g728\":{\"source\":\"iana\"},\"audio/g729\":{\"source\":\"iana\"},\"audio/g7291\":{\"source\":\"iana\"},\"audio/g729d\":{\"source\":\"iana\"},\"audio/g729e\":{\"source\":\"iana\"},\"audio/gsm\":{\"source\":\"iana\"},\"audio/gsm-efr\":{\"source\":\"iana\"},\"audio/gsm-hr-08\":{\"source\":\"iana\"},\"audio/ilbc\":{\"source\":\"iana\"},\"audio/ip-mr_v2.5\":{\"source\":\"iana\"},\"audio/isac\":{\"source\":\"apache\"},\"audio/l16\":{\"source\":\"iana\"},\"audio/l20\":{\"source\":\"iana\"},\"audio/l24\":{\"source\":\"iana\",\"compressible\":false},\"audio/l8\":{\"source\":\"iana\"},\"audio/lpc\":{\"source\":\"iana\"},\"audio/midi\":{\"source\":\"apache\",\"extensions\":[\"mid\",\"midi\",\"kar\",\"rmi\"]},\"audio/mobile-xmf\":{\"source\":\"iana\"},\"audio/mp4\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"m4a\",\"mp4a\"]},\"audio/mp4a-latm\":{\"source\":\"iana\"},\"audio/mpa\":{\"source\":\"iana\"},\"audio/mpa-robust\":{\"source\":\"iana\"},\"audio/mpeg\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"]},\"audio/mpeg4-generic\":{\"source\":\"iana\"},\"audio/musepack\":{\"source\":\"apache\"},\"audio/ogg\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"oga\",\"ogg\",\"spx\"]},\"audio/opus\":{\"source\":\"iana\"},\"audio/parityfec\":{\"source\":\"iana\"},\"audio/pcma\":{\"source\":\"iana\"},\"audio/pcma-wb\":{\"source\":\"iana\"},\"audio/pcmu\":{\"source\":\"iana\"},\"audio/pcmu-wb\":{\"source\":\"iana\"},\"audio/prs.sid\":{\"source\":\"iana\"},\"audio/qcelp\":{\"source\":\"iana\"},\"audio/raptorfec\":{\"source\":\"iana\"},\"audio/red\":{\"source\":\"iana\"},\"audio/rtp-enc-aescm128\":{\"source\":\"iana\"},\"audio/rtp-midi\":{\"source\":\"iana\"},\"audio/rtploopback\":{\"source\":\"iana\"},\"audio/rtx\":{\"source\":\"iana\"},\"audio/s3m\":{\"source\":\"apache\",\"extensions\":[\"s3m\"]},\"audio/silk\":{\"source\":\"apache\",\"extensions\":[\"sil\"]},\"audio/smv\":{\"source\":\"iana\"},\"audio/smv-qcp\":{\"source\":\"iana\"},\"audio/smv0\":{\"source\":\"iana\"},\"audio/sp-midi\":{\"source\":\"iana\"},\"audio/speex\":{\"source\":\"iana\"},\"audio/t140c\":{\"source\":\"iana\"},\"audio/t38\":{\"source\":\"iana\"},\"audio/telephone-event\":{\"source\":\"iana\"},\"audio/tone\":{\"source\":\"iana\"},\"audio/uemclip\":{\"source\":\"iana\"},\"audio/ulpfec\":{\"source\":\"iana\"},\"audio/vdvi\":{\"source\":\"iana\"},\"audio/vmr-wb\":{\"source\":\"iana\"},\"audio/vnd.3gpp.iufp\":{\"source\":\"iana\"},\"audio/vnd.4sb\":{\"source\":\"iana\"},\"audio/vnd.audiokoz\":{\"source\":\"iana\"},\"audio/vnd.celp\":{\"source\":\"iana\"},\"audio/vnd.cisco.nse\":{\"source\":\"iana\"},\"audio/vnd.cmles.radio-events\":{\"source\":\"iana\"},\"audio/vnd.cns.anp1\":{\"source\":\"iana\"},\"audio/vnd.cns.inf1\":{\"source\":\"iana\"},\"audio/vnd.dece.audio\":{\"source\":\"iana\",\"extensions\":[\"uva\",\"uvva\"]},\"audio/vnd.digital-winds\":{\"source\":\"iana\",\"extensions\":[\"eol\"]},\"audio/vnd.dlna.adts\":{\"source\":\"iana\"},\"audio/vnd.dolby.heaac.1\":{\"source\":\"iana\"},\"audio/vnd.dolby.heaac.2\":{\"source\":\"iana\"},\"audio/vnd.dolby.mlp\":{\"source\":\"iana\"},\"audio/vnd.dolby.mps\":{\"source\":\"iana\"},\"audio/vnd.dolby.pl2\":{\"source\":\"iana\"},\"audio/vnd.dolby.pl2x\":{\"source\":\"iana\"},\"audio/vnd.dolby.pl2z\":{\"source\":\"iana\"},\"audio/vnd.dolby.pulse.1\":{\"source\":\"iana\"},\"audio/vnd.dra\":{\"source\":\"iana\",\"extensions\":[\"dra\"]},\"audio/vnd.dts\":{\"source\":\"iana\",\"extensions\":[\"dts\"]},\"audio/vnd.dts.hd\":{\"source\":\"iana\",\"extensions\":[\"dtshd\"]},\"audio/vnd.dvb.file\":{\"source\":\"iana\"},\"audio/vnd.everad.plj\":{\"source\":\"iana\"},\"audio/vnd.hns.audio\":{\"source\":\"iana\"},\"audio/vnd.lucent.voice\":{\"source\":\"iana\",\"extensions\":[\"lvp\"]},\"audio/vnd.ms-playready.media.pya\":{\"source\":\"iana\",\"extensions\":[\"pya\"]},\"audio/vnd.nokia.mobile-xmf\":{\"source\":\"iana\"},\"audio/vnd.nortel.vbk\":{\"source\":\"iana\"},\"audio/vnd.nuera.ecelp4800\":{\"source\":\"iana\",\"extensions\":[\"ecelp4800\"]},\"audio/vnd.nuera.ecelp7470\":{\"source\":\"iana\",\"extensions\":[\"ecelp7470\"]},\"audio/vnd.nuera.ecelp9600\":{\"source\":\"iana\",\"extensions\":[\"ecelp9600\"]},\"audio/vnd.octel.sbc\":{\"source\":\"iana\"},\"audio/vnd.qcelp\":{\"source\":\"iana\"},\"audio/vnd.rhetorex.32kadpcm\":{\"source\":\"iana\"},\"audio/vnd.rip\":{\"source\":\"iana\",\"extensions\":[\"rip\"]},\"audio/vnd.rn-realaudio\":{\"compressible\":false},\"audio/vnd.sealedmedia.softseal.mpeg\":{\"source\":\"iana\"},\"audio/vnd.vmx.cvsd\":{\"source\":\"iana\"},\"audio/vnd.wave\":{\"compressible\":false},\"audio/vorbis\":{\"source\":\"iana\",\"compressible\":false},\"audio/vorbis-config\":{\"source\":\"iana\"},\"audio/wav\":{\"compressible\":false,\"extensions\":[\"wav\"]},\"audio/wave\":{\"compressible\":false,\"extensions\":[\"wav\"]},\"audio/webm\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"weba\"]},\"audio/x-aac\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"aac\"]},\"audio/x-aiff\":{\"source\":\"apache\",\"extensions\":[\"aif\",\"aiff\",\"aifc\"]},\"audio/x-caf\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"caf\"]},\"audio/x-flac\":{\"source\":\"apache\",\"extensions\":[\"flac\"]},\"audio/x-m4a\":{\"source\":\"nginx\",\"extensions\":[\"m4a\"]},\"audio/x-matroska\":{\"source\":\"apache\",\"extensions\":[\"mka\"]},\"audio/x-mpegurl\":{\"source\":\"apache\",\"extensions\":[\"m3u\"]},\"audio/x-ms-wax\":{\"source\":\"apache\",\"extensions\":[\"wax\"]},\"audio/x-ms-wma\":{\"source\":\"apache\",\"extensions\":[\"wma\"]},\"audio/x-pn-realaudio\":{\"source\":\"apache\",\"extensions\":[\"ram\",\"ra\"]},\"audio/x-pn-realaudio-plugin\":{\"source\":\"apache\",\"extensions\":[\"rmp\"]},\"audio/x-realaudio\":{\"source\":\"nginx\",\"extensions\":[\"ra\"]},\"audio/x-tta\":{\"source\":\"apache\"},\"audio/x-wav\":{\"source\":\"apache\",\"extensions\":[\"wav\"]},\"audio/xm\":{\"source\":\"apache\",\"extensions\":[\"xm\"]},\"chemical/x-cdx\":{\"source\":\"apache\",\"extensions\":[\"cdx\"]},\"chemical/x-cif\":{\"source\":\"apache\",\"extensions\":[\"cif\"]},\"chemical/x-cmdf\":{\"source\":\"apache\",\"extensions\":[\"cmdf\"]},\"chemical/x-cml\":{\"source\":\"apache\",\"extensions\":[\"cml\"]},\"chemical/x-csml\":{\"source\":\"apache\",\"extensions\":[\"csml\"]},\"chemical/x-pdb\":{\"source\":\"apache\"},\"chemical/x-xyz\":{\"source\":\"apache\",\"extensions\":[\"xyz\"]},\"font/opentype\":{\"compressible\":true,\"extensions\":[\"otf\"]},\"image/bmp\":{\"source\":\"apache\",\"compressible\":true,\"extensions\":[\"bmp\"]},\"image/cgm\":{\"source\":\"iana\",\"extensions\":[\"cgm\"]},\"image/fits\":{\"source\":\"iana\"},\"image/g3fax\":{\"source\":\"iana\",\"extensions\":[\"g3\"]},\"image/gif\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"gif\"]},\"image/ief\":{\"source\":\"iana\",\"extensions\":[\"ief\"]},\"image/jp2\":{\"source\":\"iana\"},\"image/jpeg\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"jpeg\",\"jpg\",\"jpe\"]},\"image/jpm\":{\"source\":\"iana\"},\"image/jpx\":{\"source\":\"iana\"},\"image/ktx\":{\"source\":\"iana\",\"extensions\":[\"ktx\"]},\"image/naplps\":{\"source\":\"iana\"},\"image/pjpeg\":{\"compressible\":false},\"image/png\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"png\"]},\"image/prs.btif\":{\"source\":\"iana\",\"extensions\":[\"btif\"]},\"image/prs.pti\":{\"source\":\"iana\"},\"image/pwg-raster\":{\"source\":\"iana\"},\"image/sgi\":{\"source\":\"apache\",\"extensions\":[\"sgi\"]},\"image/svg+xml\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"svg\",\"svgz\"]},\"image/t38\":{\"source\":\"iana\"},\"image/tiff\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"tiff\",\"tif\"]},\"image/tiff-fx\":{\"source\":\"iana\"},\"image/vnd.adobe.photoshop\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"psd\"]},\"image/vnd.airzip.accelerator.azv\":{\"source\":\"iana\"},\"image/vnd.cns.inf2\":{\"source\":\"iana\"},\"image/vnd.dece.graphic\":{\"source\":\"iana\",\"extensions\":[\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"]},\"image/vnd.djvu\":{\"source\":\"iana\",\"extensions\":[\"djvu\",\"djv\"]},\"image/vnd.dvb.subtitle\":{\"source\":\"iana\",\"extensions\":[\"sub\"]},\"image/vnd.dwg\":{\"source\":\"iana\",\"extensions\":[\"dwg\"]},\"image/vnd.dxf\":{\"source\":\"iana\",\"extensions\":[\"dxf\"]},\"image/vnd.fastbidsheet\":{\"source\":\"iana\",\"extensions\":[\"fbs\"]},\"image/vnd.fpx\":{\"source\":\"iana\",\"extensions\":[\"fpx\"]},\"image/vnd.fst\":{\"source\":\"iana\",\"extensions\":[\"fst\"]},\"image/vnd.fujixerox.edmics-mmr\":{\"source\":\"iana\",\"extensions\":[\"mmr\"]},\"image/vnd.fujixerox.edmics-rlc\":{\"source\":\"iana\",\"extensions\":[\"rlc\"]},\"image/vnd.globalgraphics.pgb\":{\"source\":\"iana\"},\"image/vnd.microsoft.icon\":{\"source\":\"iana\"},\"image/vnd.mix\":{\"source\":\"iana\"},\"image/vnd.mozilla.apng\":{\"source\":\"iana\"},\"image/vnd.ms-modi\":{\"source\":\"iana\",\"extensions\":[\"mdi\"]},\"image/vnd.ms-photo\":{\"source\":\"apache\",\"extensions\":[\"wdp\"]},\"image/vnd.net-fpx\":{\"source\":\"iana\",\"extensions\":[\"npx\"]},\"image/vnd.radiance\":{\"source\":\"iana\"},\"image/vnd.sealed.png\":{\"source\":\"iana\"},\"image/vnd.sealedmedia.softseal.gif\":{\"source\":\"iana\"},\"image/vnd.sealedmedia.softseal.jpg\":{\"source\":\"iana\"},\"image/vnd.svf\":{\"source\":\"iana\"},\"image/vnd.tencent.tap\":{\"source\":\"iana\"},\"image/vnd.valve.source.texture\":{\"source\":\"iana\"},\"image/vnd.wap.wbmp\":{\"source\":\"iana\",\"extensions\":[\"wbmp\"]},\"image/vnd.xiff\":{\"source\":\"iana\",\"extensions\":[\"xif\"]},\"image/vnd.zbrush.pcx\":{\"source\":\"iana\"},\"image/webp\":{\"source\":\"apache\",\"extensions\":[\"webp\"]},\"image/x-3ds\":{\"source\":\"apache\",\"extensions\":[\"3ds\"]},\"image/x-cmu-raster\":{\"source\":\"apache\",\"extensions\":[\"ras\"]},\"image/x-cmx\":{\"source\":\"apache\",\"extensions\":[\"cmx\"]},\"image/x-freehand\":{\"source\":\"apache\",\"extensions\":[\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"]},\"image/x-icon\":{\"source\":\"apache\",\"compressible\":true,\"extensions\":[\"ico\"]},\"image/x-jng\":{\"source\":\"nginx\",\"extensions\":[\"jng\"]},\"image/x-mrsid-image\":{\"source\":\"apache\",\"extensions\":[\"sid\"]},\"image/x-ms-bmp\":{\"source\":\"nginx\",\"compressible\":true,\"extensions\":[\"bmp\"]},\"image/x-pcx\":{\"source\":\"apache\",\"extensions\":[\"pcx\"]},\"image/x-pict\":{\"source\":\"apache\",\"extensions\":[\"pic\",\"pct\"]},\"image/x-portable-anymap\":{\"source\":\"apache\",\"extensions\":[\"pnm\"]},\"image/x-portable-bitmap\":{\"source\":\"apache\",\"extensions\":[\"pbm\"]},\"image/x-portable-graymap\":{\"source\":\"apache\",\"extensions\":[\"pgm\"]},\"image/x-portable-pixmap\":{\"source\":\"apache\",\"extensions\":[\"ppm\"]},\"image/x-rgb\":{\"source\":\"apache\",\"extensions\":[\"rgb\"]},\"image/x-tga\":{\"source\":\"apache\",\"extensions\":[\"tga\"]},\"image/x-xbitmap\":{\"source\":\"apache\",\"extensions\":[\"xbm\"]},\"image/x-xcf\":{\"compressible\":false},\"image/x-xpixmap\":{\"source\":\"apache\",\"extensions\":[\"xpm\"]},\"image/x-xwindowdump\":{\"source\":\"apache\",\"extensions\":[\"xwd\"]},\"message/cpim\":{\"source\":\"iana\"},\"message/delivery-status\":{\"source\":\"iana\"},\"message/disposition-notification\":{\"source\":\"iana\"},\"message/external-body\":{\"source\":\"iana\"},\"message/feedback-report\":{\"source\":\"iana\"},\"message/global\":{\"source\":\"iana\"},\"message/global-delivery-status\":{\"source\":\"iana\"},\"message/global-disposition-notification\":{\"source\":\"iana\"},\"message/global-headers\":{\"source\":\"iana\"},\"message/http\":{\"source\":\"iana\",\"compressible\":false},\"message/imdn+xml\":{\"source\":\"iana\",\"compressible\":true},\"message/news\":{\"source\":\"iana\"},\"message/partial\":{\"source\":\"iana\",\"compressible\":false},\"message/rfc822\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"eml\",\"mime\"]},\"message/s-http\":{\"source\":\"iana\"},\"message/sip\":{\"source\":\"iana\"},\"message/sipfrag\":{\"source\":\"iana\"},\"message/tracking-status\":{\"source\":\"iana\"},\"message/vnd.si.simp\":{\"source\":\"iana\"},\"message/vnd.wfa.wsc\":{\"source\":\"iana\"},\"model/iges\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"igs\",\"iges\"]},\"model/mesh\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"msh\",\"mesh\",\"silo\"]},\"model/vnd.collada+xml\":{\"source\":\"iana\",\"extensions\":[\"dae\"]},\"model/vnd.dwf\":{\"source\":\"iana\",\"extensions\":[\"dwf\"]},\"model/vnd.flatland.3dml\":{\"source\":\"iana\"},\"model/vnd.gdl\":{\"source\":\"iana\",\"extensions\":[\"gdl\"]},\"model/vnd.gs-gdl\":{\"source\":\"apache\"},\"model/vnd.gs.gdl\":{\"source\":\"iana\"},\"model/vnd.gtw\":{\"source\":\"iana\",\"extensions\":[\"gtw\"]},\"model/vnd.moml+xml\":{\"source\":\"iana\"},\"model/vnd.mts\":{\"source\":\"iana\",\"extensions\":[\"mts\"]},\"model/vnd.opengex\":{\"source\":\"iana\"},\"model/vnd.parasolid.transmit.binary\":{\"source\":\"iana\"},\"model/vnd.parasolid.transmit.text\":{\"source\":\"iana\"},\"model/vnd.rosette.annotated-data-model\":{\"source\":\"iana\"},\"model/vnd.valve.source.compiled-map\":{\"source\":\"iana\"},\"model/vnd.vtu\":{\"source\":\"iana\",\"extensions\":[\"vtu\"]},\"model/vrml\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"wrl\",\"vrml\"]},\"model/x3d+binary\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"x3db\",\"x3dbz\"]},\"model/x3d+fastinfoset\":{\"source\":\"iana\"},\"model/x3d+vrml\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"x3dv\",\"x3dvz\"]},\"model/x3d+xml\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"x3d\",\"x3dz\"]},\"model/x3d-vrml\":{\"source\":\"iana\"},\"multipart/alternative\":{\"source\":\"iana\",\"compressible\":false},\"multipart/appledouble\":{\"source\":\"iana\"},\"multipart/byteranges\":{\"source\":\"iana\"},\"multipart/digest\":{\"source\":\"iana\"},\"multipart/encrypted\":{\"source\":\"iana\",\"compressible\":false},\"multipart/form-data\":{\"source\":\"iana\",\"compressible\":false},\"multipart/header-set\":{\"source\":\"iana\"},\"multipart/mixed\":{\"source\":\"iana\",\"compressible\":false},\"multipart/parallel\":{\"source\":\"iana\"},\"multipart/related\":{\"source\":\"iana\",\"compressible\":false},\"multipart/report\":{\"source\":\"iana\"},\"multipart/signed\":{\"source\":\"iana\",\"compressible\":false},\"multipart/voice-message\":{\"source\":\"iana\"},\"multipart/x-mixed-replace\":{\"source\":\"iana\"},\"text/1d-interleaved-parityfec\":{\"source\":\"iana\"},\"text/cache-manifest\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"appcache\",\"manifest\"]},\"text/calendar\":{\"source\":\"iana\",\"extensions\":[\"ics\",\"ifb\"]},\"text/calender\":{\"compressible\":true},\"text/cmd\":{\"compressible\":true},\"text/coffeescript\":{\"extensions\":[\"coffee\",\"litcoffee\"]},\"text/css\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"css\"]},\"text/csv\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"csv\"]},\"text/csv-schema\":{\"source\":\"iana\"},\"text/directory\":{\"source\":\"iana\"},\"text/dns\":{\"source\":\"iana\"},\"text/ecmascript\":{\"source\":\"iana\"},\"text/encaprtp\":{\"source\":\"iana\"},\"text/enriched\":{\"source\":\"iana\"},\"text/fwdred\":{\"source\":\"iana\"},\"text/grammar-ref-list\":{\"source\":\"iana\"},\"text/hjson\":{\"extensions\":[\"hjson\"]},\"text/html\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"html\",\"htm\",\"shtml\"]},\"text/jade\":{\"extensions\":[\"jade\"]},\"text/javascript\":{\"source\":\"iana\",\"compressible\":true},\"text/jcr-cnd\":{\"source\":\"iana\"},\"text/jsx\":{\"compressible\":true,\"extensions\":[\"jsx\"]},\"text/less\":{\"extensions\":[\"less\"]},\"text/markdown\":{\"source\":\"iana\"},\"text/mathml\":{\"source\":\"nginx\",\"extensions\":[\"mml\"]},\"text/mizar\":{\"source\":\"iana\"},\"text/n3\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"n3\"]},\"text/parameters\":{\"source\":\"iana\"},\"text/parityfec\":{\"source\":\"iana\"},\"text/plain\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"]},\"text/provenance-notation\":{\"source\":\"iana\"},\"text/prs.fallenstein.rst\":{\"source\":\"iana\"},\"text/prs.lines.tag\":{\"source\":\"iana\",\"extensions\":[\"dsc\"]},\"text/prs.prop.logic\":{\"source\":\"iana\"},\"text/raptorfec\":{\"source\":\"iana\"},\"text/red\":{\"source\":\"iana\"},\"text/rfc822-headers\":{\"source\":\"iana\"},\"text/richtext\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"rtx\"]},\"text/rtf\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"rtf\"]},\"text/rtp-enc-aescm128\":{\"source\":\"iana\"},\"text/rtploopback\":{\"source\":\"iana\"},\"text/rtx\":{\"source\":\"iana\"},\"text/sgml\":{\"source\":\"iana\",\"extensions\":[\"sgml\",\"sgm\"]},\"text/slim\":{\"extensions\":[\"slim\",\"slm\"]},\"text/stylus\":{\"extensions\":[\"stylus\",\"styl\"]},\"text/t140\":{\"source\":\"iana\"},\"text/tab-separated-values\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"tsv\"]},\"text/troff\":{\"source\":\"iana\",\"extensions\":[\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"]},\"text/turtle\":{\"source\":\"iana\",\"extensions\":[\"ttl\"]},\"text/ulpfec\":{\"source\":\"iana\"},\"text/uri-list\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"uri\",\"uris\",\"urls\"]},\"text/vcard\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"vcard\"]},\"text/vnd.a\":{\"source\":\"iana\"},\"text/vnd.abc\":{\"source\":\"iana\"},\"text/vnd.curl\":{\"source\":\"iana\",\"extensions\":[\"curl\"]},\"text/vnd.curl.dcurl\":{\"source\":\"apache\",\"extensions\":[\"dcurl\"]},\"text/vnd.curl.mcurl\":{\"source\":\"apache\",\"extensions\":[\"mcurl\"]},\"text/vnd.curl.scurl\":{\"source\":\"apache\",\"extensions\":[\"scurl\"]},\"text/vnd.debian.copyright\":{\"source\":\"iana\"},\"text/vnd.dmclientscript\":{\"source\":\"iana\"},\"text/vnd.dvb.subtitle\":{\"source\":\"iana\",\"extensions\":[\"sub\"]},\"text/vnd.esmertec.theme-descriptor\":{\"source\":\"iana\"},\"text/vnd.fly\":{\"source\":\"iana\",\"extensions\":[\"fly\"]},\"text/vnd.fmi.flexstor\":{\"source\":\"iana\",\"extensions\":[\"flx\"]},\"text/vnd.graphviz\":{\"source\":\"iana\",\"extensions\":[\"gv\"]},\"text/vnd.in3d.3dml\":{\"source\":\"iana\",\"extensions\":[\"3dml\"]},\"text/vnd.in3d.spot\":{\"source\":\"iana\",\"extensions\":[\"spot\"]},\"text/vnd.iptc.newsml\":{\"source\":\"iana\"},\"text/vnd.iptc.nitf\":{\"source\":\"iana\"},\"text/vnd.latex-z\":{\"source\":\"iana\"},\"text/vnd.motorola.reflex\":{\"source\":\"iana\"},\"text/vnd.ms-mediapackage\":{\"source\":\"iana\"},\"text/vnd.net2phone.commcenter.command\":{\"source\":\"iana\"},\"text/vnd.radisys.msml-basic-layout\":{\"source\":\"iana\"},\"text/vnd.si.uricatalogue\":{\"source\":\"iana\"},\"text/vnd.sun.j2me.app-descriptor\":{\"source\":\"iana\",\"extensions\":[\"jad\"]},\"text/vnd.trolltech.linguist\":{\"source\":\"iana\"},\"text/vnd.wap.si\":{\"source\":\"iana\"},\"text/vnd.wap.sl\":{\"source\":\"iana\"},\"text/vnd.wap.wml\":{\"source\":\"iana\",\"extensions\":[\"wml\"]},\"text/vnd.wap.wmlscript\":{\"source\":\"iana\",\"extensions\":[\"wmls\"]},\"text/vtt\":{\"charset\":\"UTF-8\",\"compressible\":true,\"extensions\":[\"vtt\"]},\"text/x-asm\":{\"source\":\"apache\",\"extensions\":[\"s\",\"asm\"]},\"text/x-c\":{\"source\":\"apache\",\"extensions\":[\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"]},\"text/x-component\":{\"source\":\"nginx\",\"extensions\":[\"htc\"]},\"text/x-fortran\":{\"source\":\"apache\",\"extensions\":[\"f\",\"for\",\"f77\",\"f90\"]},\"text/x-gwt-rpc\":{\"compressible\":true},\"text/x-handlebars-template\":{\"extensions\":[\"hbs\"]},\"text/x-java-source\":{\"source\":\"apache\",\"extensions\":[\"java\"]},\"text/x-jquery-tmpl\":{\"compressible\":true},\"text/x-lua\":{\"extensions\":[\"lua\"]},\"text/x-markdown\":{\"compressible\":true,\"extensions\":[\"markdown\",\"md\",\"mkd\"]},\"text/x-nfo\":{\"source\":\"apache\",\"extensions\":[\"nfo\"]},\"text/x-opml\":{\"source\":\"apache\",\"extensions\":[\"opml\"]},\"text/x-pascal\":{\"source\":\"apache\",\"extensions\":[\"p\",\"pas\"]},\"text/x-processing\":{\"compressible\":true,\"extensions\":[\"pde\"]},\"text/x-sass\":{\"extensions\":[\"sass\"]},\"text/x-scss\":{\"extensions\":[\"scss\"]},\"text/x-setext\":{\"source\":\"apache\",\"extensions\":[\"etx\"]},\"text/x-sfv\":{\"source\":\"apache\",\"extensions\":[\"sfv\"]},\"text/x-suse-ymp\":{\"compressible\":true,\"extensions\":[\"ymp\"]},\"text/x-uuencode\":{\"source\":\"apache\",\"extensions\":[\"uu\"]},\"text/x-vcalendar\":{\"source\":\"apache\",\"extensions\":[\"vcs\"]},\"text/x-vcard\":{\"source\":\"apache\",\"extensions\":[\"vcf\"]},\"text/xml\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"xml\"]},\"text/xml-external-parsed-entity\":{\"source\":\"iana\"},\"text/yaml\":{\"extensions\":[\"yaml\",\"yml\"]},\"video/1d-interleaved-parityfec\":{\"source\":\"apache\"},\"video/3gpp\":{\"source\":\"apache\",\"extensions\":[\"3gp\",\"3gpp\"]},\"video/3gpp-tt\":{\"source\":\"apache\"},\"video/3gpp2\":{\"source\":\"apache\",\"extensions\":[\"3g2\"]},\"video/bmpeg\":{\"source\":\"apache\"},\"video/bt656\":{\"source\":\"apache\"},\"video/celb\":{\"source\":\"apache\"},\"video/dv\":{\"source\":\"apache\"},\"video/encaprtp\":{\"source\":\"apache\"},\"video/h261\":{\"source\":\"apache\",\"extensions\":[\"h261\"]},\"video/h263\":{\"source\":\"apache\",\"extensions\":[\"h263\"]},\"video/h263-1998\":{\"source\":\"apache\"},\"video/h263-2000\":{\"source\":\"apache\"},\"video/h264\":{\"source\":\"apache\",\"extensions\":[\"h264\"]},\"video/h264-rcdo\":{\"source\":\"apache\"},\"video/h264-svc\":{\"source\":\"apache\"},\"video/h265\":{\"source\":\"apache\"},\"video/iso.segment\":{\"source\":\"apache\"},\"video/jpeg\":{\"source\":\"apache\",\"extensions\":[\"jpgv\"]},\"video/jpeg2000\":{\"source\":\"apache\"},\"video/jpm\":{\"source\":\"apache\",\"extensions\":[\"jpm\",\"jpgm\"]},\"video/mj2\":{\"source\":\"apache\",\"extensions\":[\"mj2\",\"mjp2\"]},\"video/mp1s\":{\"source\":\"apache\"},\"video/mp2p\":{\"source\":\"apache\"},\"video/mp2t\":{\"source\":\"apache\",\"extensions\":[\"ts\"]},\"video/mp4\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"mp4\",\"mp4v\",\"mpg4\"]},\"video/mp4v-es\":{\"source\":\"apache\"},\"video/mpeg\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"]},\"video/mpeg4-generic\":{\"source\":\"apache\"},\"video/mpv\":{\"source\":\"apache\"},\"video/nv\":{\"source\":\"apache\"},\"video/ogg\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"ogv\"]},\"video/parityfec\":{\"source\":\"apache\"},\"video/pointer\":{\"source\":\"apache\"},\"video/quicktime\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"qt\",\"mov\"]},\"video/raptorfec\":{\"source\":\"apache\"},\"video/raw\":{\"source\":\"apache\"},\"video/rtp-enc-aescm128\":{\"source\":\"apache\"},\"video/rtploopback\":{\"source\":\"apache\"},\"video/rtx\":{\"source\":\"apache\"},\"video/smpte292m\":{\"source\":\"apache\"},\"video/ulpfec\":{\"source\":\"apache\"},\"video/vc1\":{\"source\":\"apache\"},\"video/vnd.cctv\":{\"source\":\"apache\"},\"video/vnd.dece.hd\":{\"source\":\"apache\",\"extensions\":[\"uvh\",\"uvvh\"]},\"video/vnd.dece.mobile\":{\"source\":\"apache\",\"extensions\":[\"uvm\",\"uvvm\"]},\"video/vnd.dece.mp4\":{\"source\":\"apache\"},\"video/vnd.dece.pd\":{\"source\":\"apache\",\"extensions\":[\"uvp\",\"uvvp\"]},\"video/vnd.dece.sd\":{\"source\":\"apache\",\"extensions\":[\"uvs\",\"uvvs\"]},\"video/vnd.dece.video\":{\"source\":\"apache\",\"extensions\":[\"uvv\",\"uvvv\"]},\"video/vnd.directv.mpeg\":{\"source\":\"apache\"},\"video/vnd.directv.mpeg-tts\":{\"source\":\"apache\"},\"video/vnd.dlna.mpeg-tts\":{\"source\":\"apache\"},\"video/vnd.dvb.file\":{\"source\":\"apache\",\"extensions\":[\"dvb\"]},\"video/vnd.fvt\":{\"source\":\"apache\",\"extensions\":[\"fvt\"]},\"video/vnd.hns.video\":{\"source\":\"apache\"},\"video/vnd.iptvforum.1dparityfec-1010\":{\"source\":\"apache\"},\"video/vnd.iptvforum.1dparityfec-2005\":{\"source\":\"apache\"},\"video/vnd.iptvforum.2dparityfec-1010\":{\"source\":\"apache\"},\"video/vnd.iptvforum.2dparityfec-2005\":{\"source\":\"apache\"},\"video/vnd.iptvforum.ttsavc\":{\"source\":\"apache\"},\"video/vnd.iptvforum.ttsmpeg2\":{\"source\":\"apache\"},\"video/vnd.motorola.video\":{\"source\":\"apache\"},\"video/vnd.motorola.videop\":{\"source\":\"apache\"},\"video/vnd.mpegurl\":{\"source\":\"apache\",\"extensions\":[\"mxu\",\"m4u\"]},\"video/vnd.ms-playready.media.pyv\":{\"source\":\"apache\",\"extensions\":[\"pyv\"]},\"video/vnd.nokia.interleaved-multimedia\":{\"source\":\"apache\"},\"video/vnd.nokia.videovoip\":{\"source\":\"apache\"},\"video/vnd.objectvideo\":{\"source\":\"apache\"},\"video/vnd.radgamettools.bink\":{\"source\":\"apache\"},\"video/vnd.radgamettools.smacker\":{\"source\":\"apache\"},\"video/vnd.sealed.mpeg1\":{\"source\":\"apache\"},\"video/vnd.sealed.mpeg4\":{\"source\":\"apache\"},\"video/vnd.sealed.swf\":{\"source\":\"apache\"},\"video/vnd.sealedmedia.softseal.mov\":{\"source\":\"apache\"},\"video/vnd.uvvu.mp4\":{\"source\":\"apache\",\"extensions\":[\"uvu\",\"uvvu\"]},\"video/vnd.vivo\":{\"source\":\"apache\",\"extensions\":[\"viv\"]},\"video/vp8\":{\"source\":\"apache\"},\"video/webm\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"webm\"]},\"video/x-f4v\":{\"source\":\"apache\",\"extensions\":[\"f4v\"]},\"video/x-fli\":{\"source\":\"apache\",\"extensions\":[\"fli\"]},\"video/x-flv\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"flv\"]},\"video/x-m4v\":{\"source\":\"apache\",\"extensions\":[\"m4v\"]},\"video/x-matroska\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"mkv\",\"mk3d\",\"mks\"]},\"video/x-mng\":{\"source\":\"apache\",\"extensions\":[\"mng\"]},\"video/x-ms-asf\":{\"source\":\"apache\",\"extensions\":[\"asf\",\"asx\"]},\"video/x-ms-vob\":{\"source\":\"apache\",\"extensions\":[\"vob\"]},\"video/x-ms-wm\":{\"source\":\"apache\",\"extensions\":[\"wm\"]},\"video/x-ms-wmv\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"wmv\"]},\"video/x-ms-wmx\":{\"source\":\"apache\",\"extensions\":[\"wmx\"]},\"video/x-ms-wvx\":{\"source\":\"apache\",\"extensions\":[\"wvx\"]},\"video/x-msvideo\":{\"source\":\"apache\",\"extensions\":[\"avi\"]},\"video/x-sgi-movie\":{\"source\":\"apache\",\"extensions\":[\"movie\"]},\"video/x-smv\":{\"source\":\"apache\",\"extensions\":[\"smv\"]},\"x-conference/x-cooltalk\":{\"source\":\"apache\",\"extensions\":[\"ice\"]},\"x-shader/x-fragment\":{\"compressible\":true},\"x-shader/x-vertex\":{\"compressible\":true}}","import Core from './core/index.js'\n\n// Parent\nimport Plugin from './plugins/Plugin'\n\nconst locales = {}\n\n// Orchestrators\nimport Dashboard from './plugins/Dashboard/index.js'\n\n// Acquirers\nimport Dummy from './plugins/Dummy'\nimport DragDrop from './plugins/DragDrop/index.js'\nimport FileInput from './plugins/FileInput.js'\nimport GoogleDrive from './plugins/GoogleDrive/index.js'\nimport Webcam from './plugins/Webcam/index.js'\n\n// Progressindicators\nimport ProgressBar from './plugins/ProgressBar.js'\nimport Informer from './plugins/Informer.js'\n\n// Modifiers\nimport MetaData from './plugins/MetaData.js'\n\n// Uploaders\nimport Tus10 from './plugins/Tus10'\nimport Multipart from './plugins/Multipart'\n\nexport default {\n Core,\n Plugin,\n locales,\n Dummy,\n ProgressBar,\n Informer,\n DragDrop,\n GoogleDrive,\n FileInput,\n Tus10,\n Multipart,\n Dashboard,\n MetaData,\n Webcam\n}\n\nexport {\n Core,\n Plugin,\n locales,\n Dummy,\n ProgressBar,\n Informer,\n DragDrop,\n GoogleDrive,\n FileInput,\n Tus10,\n Multipart,\n Dashboard,\n MetaData,\n Webcam\n}\n","import Core from './Core'\nexport default Core\n","import Plugin from './Plugin'\nimport Utils from '../core/Utils'\nimport html from '../core/html'\n\nexport default class FileInput extends Plugin {\n constructor (core, opts) {\n super(core, opts)\n this.id = 'FileInput'\n this.title = 'FileInput'\n this.type = 'acquirer'\n\n // Default options\n const defaultOptions = {\n target: '.UppyForm',\n replaceTargetContent: true,\n multipleFiles: true,\n text: this.core.i18n('selectToUpload'),\n pretty: true\n }\n\n // Merge default options with the ones set by user\n this.opts = Object.assign({}, defaultOptions, opts)\n\n this.render = this.render.bind(this)\n }\n\n handleInputChange (ev) {\n this.core.log('All right, something selected through input...')\n\n // this added rubbish keys like “length” to the resulting array\n // const files = Object.keys(ev.target.files).map((key) => {\n // return ev.target.files[key]\n // })\n\n const files = Utils.toArray(ev.target.files)\n\n files.forEach((file) => {\n this.core.emitter.emit('core:file-add', {\n source: this.id,\n name: file.name,\n type: file.type,\n data: file\n })\n })\n }\n\n render (state) {\n // const upload = (ev) => {\n // ev.preventDefault()\n // ev.stopPropagation()\n // this.core.emitter.emit('core:upload')\n // }\n\n const hiddenInputStyle = 'width: 0.1px; height: 0.1px; opacity: 0; overflow: hidden; position: absolute; z-index: -1;'\n\n const input = html`<input class=\"uppy-FileInput-input\"\n style=\"${this.opts.pretty ? hiddenInputStyle : ''}\"\n type=\"file\"\n name=\"files[]\"\n onchange=${this.handleInputChange.bind(this)}\n multiple=\"${this.opts.multipleFiles ? 'true' : 'false'}\"\n value=\"\">`\n\n return html`<form class=\"uppy-FileInput-form\">\n ${input}\n\n ${this.opts.pretty\n ? html`<button class=\"uppy-FileInput-btn\" type=\"button\" onclick=${() => input.click()}>\n ${this.opts.text}\n </button>`\n : null\n }\n\n </form>`\n }\n\n install () {\n const target = this.opts.target\n const plugin = this\n this.target = this.mount(target, plugin)\n }\n}\n","import Plugin from './Plugin'\n\n/**\n * Meta Data\n * Adds metadata fields to Uppy\n *\n */\nexport default class MetaData extends Plugin {\n constructor (core, opts) {\n super(core, opts)\n this.type = 'modifier'\n this.id = 'MetaData'\n this.title = 'Meta Data'\n\n // set default options\n const defaultOptions = {}\n\n // merge default options with the ones set by user\n this.opts = Object.assign({}, defaultOptions, opts)\n }\n\n addInitialMeta () {\n const metaFields = this.opts.fields\n\n this.core.setState({\n metaFields: metaFields\n })\n\n this.core.emitter.on('file-added', (fileID) => {\n metaFields.forEach((item) => {\n const obj = {}\n obj[item.id] = item.value\n this.core.updateMeta(obj, fileID)\n })\n })\n }\n\n install () {\n this.addInitialMeta()\n }\n}\n","import Plugin from './Plugin'\nimport html from '../core/html'\n\n/**\n * Informer\n * Shows rad message bubbles\n * used like this: `bus.emit('informer', 'hello world', 'info', 5000)`\n * or for errors: `bus.emit('informer', 'Error uploading img.jpg', 'error', 5000)`\n *\n */\nexport default class Informer extends Plugin {\n constructor (core, opts) {\n super(core, opts)\n this.type = 'progressindicator'\n this.id = 'Informer'\n this.title = 'Informer'\n\n // set default options\n const defaultOptions = {}\n\n // merge default options with the ones set by user\n this.opts = Object.assign({}, defaultOptions, opts)\n }\n\n showInformer (msg, type, duration) {\n this.core.setState({\n informer: {\n isHidden: false,\n msg: msg\n }\n })\n\n if (duration === 0) return\n\n // hide the informer after `duration` milliseconds\n setTimeout(() => {\n const newInformer = Object.assign({}, this.core.getState().informer, {\n isHidden: true\n })\n this.core.setState({\n informer: newInformer\n })\n }, duration)\n }\n\n hideInformer () {\n const newInformer = Object.assign({}, this.core.getState().informer, {\n isHidden: true\n })\n this.core.setState({\n informer: newInformer\n })\n }\n\n render (state) {\n const msg = state.informer.msg\n const isHidden = state.informer.isHidden\n\n // @TODO add aria-live for screen-readers\n return html`<div class=\"UppyInformer\" aria-hidden=\"${isHidden}\">\n <p>${msg}</p>\n </div>`\n }\n\n install () {\n // Set default state for Google Drive\n this.core.setState({\n informer: {\n isHidden: true,\n msg: ''\n }\n })\n\n const bus = this.core.bus\n\n bus.on('informer', (msg, type, duration) => {\n this.showInformer(msg, type, duration)\n })\n\n bus.on('informer-hide', () => {\n this.hideInformer()\n })\n\n const target = this.opts.target\n const plugin = this\n this.target = this.mount(target, plugin)\n }\n}\n","import Plugin from './Plugin'\nimport html from '../core/html'\n\n/**\n * Progress bar\n *\n */\nexport default class ProgressBar extends Plugin {\n constructor (core, opts) {\n super(core, opts)\n this.id = 'ProgressBar'\n this.title = 'Progress Bar'\n this.type = 'progressindicator'\n\n // set default options\n const defaultOptions = {\n replaceTargetContent: false,\n fixed: false\n }\n\n // merge default options with the ones set by user\n this.opts = Object.assign({}, defaultOptions, opts)\n\n this.render = this.render.bind(this)\n }\n\n render (state) {\n const progress = state.totalProgress || 0\n\n return html`<div class=\"UppyProgressBar\" style=\"${this.opts.fixed ? 'position: fixed' : 'null'}\">\n <div class=\"UppyProgressBar-inner\" style=\"width: ${progress}%\"></div>\n <div class=\"UppyProgressBar-percentage\">${progress}</div>\n </div>`\n }\n\n install () {\n const target = this.opts.target\n const plugin = this\n this.target = this.mount(target, plugin)\n }\n}\n","import Plugin from '../Plugin'\nimport dragDrop from 'drag-drop'\nimport Dashboard from './Dashboard'\nimport { getSpeed, getETA, prettyETA } from '../../core/Utils'\nimport prettyBytes from 'pretty-bytes'\nimport { defaultTabIcon } from './icons'\n\n/**\n * Modal Dialog & Dashboard\n */\nexport default class DashboardUI extends Plugin {\n constructor (core, opts) {\n super(core, opts)\n this.id = 'DashboardUI'\n this.title = 'Dashboard UI'\n this.type = 'orchestrator'\n\n // set default options\n const defaultOptions = {\n target: 'body',\n inline: false,\n semiTransparent: false,\n defaultTabIcon: defaultTabIcon(),\n panelSelectorPrefix: 'UppyDashboardContent-panel',\n showProgressDetails: true\n }\n\n // merge default options with the ones set by user\n this.opts = Object.assign({}, defaultOptions, opts)\n\n this.hideModal = this.hideModal.bind(this)\n this.showModal = this.showModal.bind(this)\n\n this.addTarget = this.addTarget.bind(this)\n this.actions = this.actions.bind(this)\n this.hideAllPanels = this.hideAllPanels.bind(this)\n this.showPanel = this.showPanel.bind(this)\n this.initEvents = this.initEvents.bind(this)\n this.handleDrop = this.handleDrop.bind(this)\n this.pauseAll = this.pauseAll.bind(this)\n this.resumeAll = this.resumeAll.bind(this)\n this.render = this.render.bind(this)\n this.install = this.install.bind(this)\n }\n\n addTarget (plugin) {\n const callerPluginId = plugin.constructor.name\n const callerPluginName = plugin.title || callerPluginId\n const callerPluginIcon = plugin.icon || this.opts.defaultTabIcon\n const callerPluginType = plugin.type\n\n if (callerPluginType !== 'acquirer' &&\n callerPluginType !== 'progressindicator' &&\n callerPluginType !== 'presenter') {\n let msg = 'Error: Modal can only be used by plugins of types: acquirer, progressindicator, presenter'\n this.core.log(msg)\n return\n }\n\n const target = {\n id: callerPluginId,\n name: callerPluginName,\n icon: callerPluginIcon,\n type: callerPluginType,\n focus: plugin.focus,\n render: plugin.render,\n isHidden: true\n }\n\n const modal = this.core.getState().modal\n const newTargets = modal.targets.slice()\n newTargets.push(target)\n\n this.core.setState({\n modal: Object.assign({}, modal, {\n targets: newTargets\n })\n })\n\n return this.opts.target\n }\n\n hideAllPanels () {\n const modal = this.core.getState().modal\n\n const newTargets = modal.targets.map((target) => {\n return Object.assign({}, target, {\n isHidden: true\n })\n })\n\n this.core.setState({modal: Object.assign({}, modal, {\n targets: newTargets\n })})\n }\n\n showPanel (id) {\n const modal = this.core.getState().modal\n\n // hide all panels, except the one that matches current id\n const newTargets = modal.targets.map((target) => {\n if (target.type === 'acquirer') {\n if (target.id === id) {\n // target.focus()\n return Object.assign({}, target, {\n isHidden: false\n })\n }\n return Object.assign({}, target, {\n isHidden: true\n })\n }\n return target\n })\n\n this.core.setState({modal: Object.assign({}, modal, {\n targets: newTargets\n })})\n }\n\n hideModal () {\n const modal = this.core.getState().modal\n\n this.core.setState({\n modal: Object.assign({}, modal, {\n isHidden: true\n })\n })\n\n document.body.classList.remove('is-UppyDashboard-open')\n }\n\n showModal () {\n const modal = this.core.getState().modal\n\n this.core.setState({\n modal: Object.assign({}, modal, {\n isHidden: false\n })\n })\n\n // add class to body that sets position fixed\n document.body.classList.add('is-UppyDashboard-open')\n // focus on modal inner block\n document.querySelector('.UppyDashboard-inner').focus()\n }\n\n initEvents () {\n // const dashboardEl = document.querySelector(`${this.opts.target} .UppyDashboard`)\n\n // Modal open button\n const showModalTrigger = document.querySelector(this.opts.trigger)\n if (!this.opts.inline && showModalTrigger) {\n showModalTrigger.addEventListener('click', this.showModal)\n } else {\n this.core.log('Modal trigger wasn’t found')\n }\n\n // Close the Modal on esc key press\n document.body.addEventListener('keyup', (event) => {\n if (event.keyCode === 27) {\n this.hideModal()\n }\n })\n\n // Drag Drop\n dragDrop(this.el, (files) => {\n this.handleDrop(files)\n })\n }\n\n actions () {\n const bus = this.core.bus\n\n bus.on('core:file-add', () => {\n this.hideAllPanels()\n })\n\n bus.on('dashboard:file-card', (fileId) => {\n const modal = this.core.getState().modal\n\n this.core.setState({\n modal: Object.assign({}, modal, {\n fileCardFor: fileId || false\n })\n })\n })\n\n bus.on('core:success', (uploadedCount) => {\n bus.emit(\n 'informer',\n `${this.core.i18n('files', {'smart_count': uploadedCount})} successfully uploaded, Sir!`,\n 'info',\n 6000\n )\n })\n }\n\n handleDrop (files) {\n this.core.log('All right, someone dropped something...')\n\n files.forEach((file) => {\n this.core.bus.emit('core:file-add', {\n source: this.id,\n name: file.name,\n type: file.type,\n data: file\n })\n })\n }\n\n pauseAll () {\n this.core.bus.emit('core:pause-all')\n }\n\n resumeAll () {\n this.core.bus.emit('core:resume-all')\n }\n\n getTotalSpeed (files) {\n let totalSpeed = 0\n files.forEach((file) => {\n totalSpeed = totalSpeed + getSpeed(file.progress)\n })\n return totalSpeed\n }\n\n getTotalETA (files) {\n let totalSeconds = 0\n\n files.forEach((file) => {\n totalSeconds = totalSeconds + getETA(file.progress)\n })\n\n return totalSeconds\n }\n\n render (state) {\n const files = state.files\n\n const newFiles = Object.keys(files).filter((file) => {\n return !files[file].progress.uploadStarted\n })\n const uploadStartedFiles = Object.keys(files).filter((file) => {\n return files[file].progress.uploadStarted\n })\n const completeFiles = Object.keys(files).filter((file) => {\n return files[file].progress.uploadComplete\n })\n const inProgressFiles = Object.keys(files).filter((file) => {\n return !files[file].progress.uploadComplete &&\n files[file].progress.uploadStarted &&\n !files[file].isPaused\n })\n\n let inProgressFilesArray = []\n inProgressFiles.forEach((file) => {\n inProgressFilesArray.push(files[file])\n })\n\n const totalSpeed = prettyBytes(this.getTotalSpeed(inProgressFilesArray))\n const totalETA = prettyETA(this.getTotalETA(inProgressFilesArray))\n\n const isAllComplete = state.totalProgress === 100\n const isAllPaused = inProgressFiles.length === 0 && !isAllComplete\n\n const acquirers = state.modal.targets.filter((target) => {\n return target.type === 'acquirer'\n })\n\n let activeAcquirer = acquirers.filter((acquirer) => {\n return !acquirer.isHidden\n })[0]\n\n if (typeof activeAcquirer === 'undefined') {\n activeAcquirer = false\n }\n\n const progressindicators = state.modal.targets.filter((target) => {\n return target.type === 'progressindicator'\n })\n\n const addFile = (file) => {\n this.core.emitter.emit('core:file-add', file)\n }\n\n const removeFile = (fileID) => {\n this.core.emitter.emit('core:file-remove', fileID)\n }\n\n const startUpload = (ev) => {\n this.core.emitter.emit('core:upload')\n }\n\n const pauseUpload = (fileID) => {\n this.core.emitter.emit('core:upload-pause', fileID)\n }\n\n const showFileCard = (fileID) => {\n this.core.emitter.emit('dashboard:file-card', fileID)\n }\n\n const fileCardDone = (meta, fileID) => {\n this.core.emitter.emit('core:update-meta', meta, fileID)\n this.core.emitter.emit('dashboard:file-card')\n }\n\n const info = (text, type, duration) => {\n this.core.emitter.emit('informer', text, type, duration)\n }\n\n return Dashboard({\n state: state,\n modal: state.modal,\n newFiles: newFiles,\n files: files,\n totalFileCount: Object.keys(files).length,\n uploadStartedFiles: uploadStartedFiles,\n completeFiles: completeFiles,\n inProgressFiles: inProgressFiles,\n totalSpeed: totalSpeed,\n totalETA: totalETA,\n totalProgress: state.totalProgress,\n isAllComplete: isAllComplete,\n isAllPaused: isAllPaused,\n acquirers: acquirers,\n activeAcquirer: activeAcquirer,\n progressindicators: progressindicators,\n autoProceed: this.core.opts.autoProceed,\n id: this.id,\n container: this.opts.target,\n hideModal: this.hideModal,\n panelSelectorPrefix: this.opts.panelSelectorPrefix,\n showProgressDetails: this.opts.showProgressDetails,\n inline: this.opts.inline,\n semiTransparent: this.opts.semiTransparent,\n onPaste: this.handlePaste,\n showPanel: this.showPanel,\n hideAllPanels: this.hideAllPanels,\n log: this.core.log,\n bus: this.core.emitter,\n i18n: this.core.i18n,\n pauseAll: this.pauseAll,\n resumeAll: this.resumeAll,\n addFile: addFile,\n removeFile: removeFile,\n info: info,\n metaFields: state.metaFields,\n startUpload: startUpload,\n pauseUpload: pauseUpload,\n fileCardFor: state.modal.fileCardFor,\n showFileCard: showFileCard,\n fileCardDone: fileCardDone\n })\n }\n\n install () {\n // Set default state for Modal\n this.core.setState({modal: {\n isHidden: true,\n showFileCard: false,\n targets: []\n }})\n\n const target = this.opts.target\n const plugin = this\n this.target = this.mount(target, plugin)\n\n this.initEvents()\n this.actions()\n }\n}\n","import yo from 'yo-yo'\n\n/**\n * Boilerplate that all Plugins share - and should not be used\n * directly. It also shows which methods final plugins should implement/override,\n * this deciding on structure.\n *\n * @param {object} main Uppy core object\n * @param {object} object with plugin options\n * @return {array | string} files or success/fail message\n */\nexport default class Plugin {\n\n constructor (core, opts) {\n this.core = core\n this.opts = opts || {}\n this.type = 'none'\n\n // clear everything inside the target selector\n this.opts.replaceTargetContent === this.opts.replaceTargetContent || true\n\n this.update = this.update.bind(this)\n this.mount = this.mount.bind(this)\n this.focus = this.focus.bind(this)\n this.install = this.install.bind(this)\n }\n\n update (state) {\n if (typeof this.el === 'undefined') {\n return\n }\n\n const newEl = this.render(state)\n yo.update(this.el, newEl)\n\n // optimizes performance?\n // requestAnimationFrame(() => {\n // const newEl = this.render(state)\n // yo.update(this.el, newEl)\n // })\n }\n\n /**\n * Check if supplied `target` is a `string` or an `object`.\n * If it’s an object — target is a plugin, and we search `plugins`\n * for a plugin with same name and return its target.\n *\n * @param {String|Object} target\n *\n */\n mount (target, plugin) {\n const callerPluginName = plugin.id\n\n if (typeof target === 'string') {\n this.core.log(`Installing ${callerPluginName} to ${target}`)\n\n // clear everything inside the target container\n if (this.opts.replaceTargetContent) {\n document.querySelector(target).innerHTML = ''\n }\n\n this.el = plugin.render(this.core.state)\n document.querySelector(target).appendChild(this.el)\n\n return target\n } else {\n // TODO: is instantiating the plugin really the way to roll\n // just to get the plugin name?\n const Target = target\n const targetPluginName = new Target().id\n\n this.core.log(`Installing ${callerPluginName} to ${targetPluginName}`)\n\n const targetPlugin = this.core.getPlugin(targetPluginName)\n const selectorTarget = targetPlugin.addTarget(plugin)\n\n return selectorTarget\n }\n }\n\n focus () {\n return\n }\n\n install () {\n return\n }\n}\n","import Plugin from './../Plugin'\nimport { toArray } from '../../core/Utils'\nimport dragDrop from 'drag-drop'\nimport html from '../../core/html'\n\n/**\n * Drag & Drop plugin\n *\n */\nexport default class DragDrop extends Plugin {\n constructor (core, opts, props) {\n super(core, opts)\n this.type = 'acquirer'\n this.id = 'DragDrop'\n this.title = 'Drag & Drop'\n this.props = props\n this.icon = html`\n <svg class=\"UppyIcon\" width=\"28\" height=\"28\" viewBox=\"0 0 16 16\">\n <path d=\"M15.982 2.97c0-.02 0-.02-.018-.037 0-.017-.017-.035-.035-.053 0 0 0-.018-.02-.018-.017-.018-.034-.053-.052-.07L13.19.123c-.017-.017-.034-.035-.07-.053h-.018c-.018-.017-.035-.017-.053-.034h-.02c-.017 0-.034-.018-.052-.018h-6.31a.415.415 0 0 0-.446.426V11.11c0 .25.196.446.445.446h8.89A.44.44 0 0 0 16 11.11V3.023c-.018-.018-.018-.035-.018-.053zm-2.65-1.46l1.157 1.157h-1.157V1.51zm1.78 9.157h-8V.89h5.332v2.22c0 .25.196.446.445.446h2.22v7.11z\"/>\n <path d=\"M9.778 12.89H4V2.666a.44.44 0 0 0-.444-.445.44.44 0 0 0-.445.445v10.666c0 .25.197.445.446.445h6.222a.44.44 0 0 0 .444-.445.44.44 0 0 0-.444-.444z\"/>\n <path d=\"M.444 16h6.223a.44.44 0 0 0 .444-.444.44.44 0 0 0-.443-.445H.89V4.89a.44.44 0 0 0-.446-.446A.44.44 0 0 0 0 4.89v10.666c0 .248.196.444.444.444z\"/>\n </svg>\n `\n\n // Default options\n const defaultOpts = {\n target: '.UppyDragDrop'\n }\n\n // Merge default options with the ones set by user\n this.opts = Object.assign({}, defaultOpts, opts)\n\n // Check for browser dragDrop support\n this.isDragDropSupported = this.checkDragDropSupport()\n\n // Bind `this` to class methods\n this.handleDrop = this.handleDrop.bind(this)\n this.checkDragDropSupport = this.checkDragDropSupport.bind(this)\n this.handleInputChange = this.handleInputChange.bind(this)\n this.render = this.render.bind(this)\n }\n\n/**\n * Checks if the browser supports Drag & Drop (not supported on mobile devices, for example).\n * @return {Boolean} true if supported, false otherwise\n */\n checkDragDropSupport () {\n const div = document.createElement('div')\n\n if (!('draggable' in div) || !('ondragstart' in div && 'ondrop' in div)) {\n return false\n }\n\n if (!('FormData' in window)) {\n return false\n }\n\n if (!('FileReader' in window)) {\n return false\n }\n\n return true\n }\n\n handleDrop (files) {\n this.core.log('All right, someone dropped something...')\n\n files.forEach((file) => {\n this.props.addFile({\n source: this.id,\n name: file.name,\n type: file.type,\n data: file\n })\n // this.core.emitter.emit('file-add', {\n // source: this.id,\n // name: file.name,\n // type: file.type,\n // data: file\n // })\n })\n }\n\n handleInputChange (ev) {\n this.core.log('All right, something selected through input...')\n\n const files = toArray(ev.target.files)\n\n files.forEach((file) => {\n this.core.emitter.emit('core:file-add', {\n source: this.id,\n name: file.name,\n type: file.type,\n data: file\n })\n })\n }\n\n focus () {\n const firstInput = document.querySelector(`${this.target} .UppyDragDrop-focus`)\n\n // only works for the first time if wrapped in setTimeout for some reason\n setTimeout(function () {\n firstInput.focus()\n }, 10)\n }\n\n render (state) {\n // Another way not to render next/upload button — if Modal is used as a target\n const target = this.opts.target.name\n\n const onSelect = (ev) => {\n const input = document.querySelector(`${this.target} .UppyDragDrop-input`)\n input.click()\n }\n\n const next = (ev) => {\n ev.preventDefault()\n ev.stopPropagation()\n this.core.emitter.emit('core:upload')\n }\n\n const onSubmit = (ev) => {\n ev.preventDefault()\n }\n\n return html`\n <div class=\"UppyDragDrop-container ${this.isDragDropSupported ? 'is-dragdrop-supported' : ''}\">\n <form class=\"UppyDragDrop-inner\"\n onsubmit=${onSubmit}>\n <input class=\"UppyDragDrop-input UppyDragDrop-focus\"\n type=\"file\"\n name=\"files[]\"\n multiple=\"true\"\n value=\"\"\n onchange=${this.handleInputChange.bind(this)} />\n <label class=\"UppyDragDrop-label\" onclick=${onSelect}>\n <strong>${this.core.i18n('chooseFile')}</strong>\n <span class=\"UppyDragDrop-dragText\">${this.core.i18n('orDragDrop')}</span>\n </label>\n ${!this.core.opts.autoProceed && target !== 'Dashboard'\n ? html`<button class=\"UppyDragDrop-uploadBtn UppyNextBtn\"\n type=\"submit\"\n onclick=${next}>\n ${this.core.i18n('upload')}\n </button>`\n : ''}\n </form>\n </div>\n `\n }\n\n install () {\n const target = this.opts.target\n const plugin = this\n this.target = this.mount(target, plugin)\n\n dragDrop(`${this.target} .UppyDragDrop-container`, (files) => {\n this.handleDrop(files)\n this.core.log(files)\n })\n }\n}\n","import Plugin from './Plugin'\nimport html from '../core/html'\n// import { createInlineWorker } from '../core/Utils'\n\n/**\n * Dummy\n *\n */\nexport default class Dummy extends Plugin {\n constructor (core, opts, props) {\n super(core, opts)\n this.type = 'acquirer'\n this.id = 'Dummy'\n this.title = 'Mr. Plugin'\n this.props = props\n\n // set default options\n const defaultOptions = {}\n\n // merge default options with the ones set by user\n this.opts = Object.assign({}, defaultOptions, opts)\n\n this.strange = html`<h1>this is strange 1</h1>`\n this.render = this.render.bind(this)\n this.install = this.install.bind(this)\n }\n\n addFakeFileJustToTest () {\n const blob = new Blob(\n ['data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTIwIDEyMCI+CiAgPGNpcmNsZSBjeD0iNjAiIGN5PSI2MCIgcj0iNTAiLz4KPC9zdmc+Cg=='],\n {type: 'image/svg+xml'}\n )\n const file = {\n source: 'acceptance-test',\n name: 'test-file',\n type: 'image/svg+xml',\n data: blob\n }\n this.props.log('Adding fake file blob')\n this.props.addFile(file)\n }\n\n render () {\n const bla = html`<h2>this is strange 2</h2>`\n return html`\n <div class=\"wow-this-works\">\n <input class=\"UppyDummy-firstInput\" type=\"text\" value=\"hello\" onload=${(el) => {\n el.focus()\n }} />\n ${this.strange}\n ${bla}\n </div>\n `\n }\n\n // focus () {\n // return\n // console.log(`${this.target} .UppyDummy-firstInput`)\n //\n // const firstInput = document.querySelector(`${this.target} .UppyDummy-firstInput`)\n //\n // // only works for the first time if wrapped in setTimeout for some reason\n // // firstInput.focus()\n // setTimeout(function () {\n // firstInput.focus()\n // }, 10)\n //\n // setTimeout(() => {\n // this.core.emit('informer', 'Hello! I’m a test Informer message', 'info', 4500)\n // this.addFakeFileJustToTest()\n // }, 1000)\n // }\n\n install () {\n const target = this.opts.target\n const plugin = this\n this.target = this.mount(target, plugin)\n\n // function workerFunc () {\n // self.addEventListener('message', (e) => {\n // const file = e.data.file\n // const reader = new FileReaderSync()\n // const dataURL = reader.readAsDataURL(file)\n // postMessage({file: dataURL})\n // })\n // }\n //\n // const worker = createInlineWorker(workerFunc)\n // const testFileBlob = new Blob(\n // ['data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTIwIDEyMCI+CiAgPGNpcmNsZSBjeD0iNjAiIGN5PSI2MCIgcj0iNTAiLz4KPC9zdmc+Cg=='],\n // {type: 'image/svg+xml'}\n // )\n // worker.postMessage({file: testFileBlob})\n // worker.addEventListener('message', (e) => {\n // console.log(e)\n // })\n }\n}\n","import Utils from '../../core/Utils'\nimport Plugin from '../Plugin'\nimport 'whatwg-fetch'\nimport html from '../../core/html'\n\nimport Provider from '../../uppy-base/src/plugins/Provider'\n\nimport AuthView from './AuthView'\nimport Browser from './new/Browser'\nimport ErrorView from './Error'\n\nexport default class Google extends Plugin {\n constructor (core, opts) {\n super(core, opts)\n this.type = 'acquirer'\n this.id = 'GoogleDrive'\n this.title = 'Google Drive'\n this.icon = html`\n <svg class=\"UppyIcon UppyModalTab-icon\" width=\"28\" height=\"28\" viewBox=\"0 0 16 16\">\n <path d=\"M2.955 14.93l2.667-4.62H16l-2.667 4.62H2.955zm2.378-4.62l-2.666 4.62L0 10.31l5.19-8.99 2.666 4.62-2.523 4.37zm10.523-.25h-5.333l-5.19-8.99h5.334l5.19 8.99z\"/>\n </svg>\n `\n\n this.GoogleDrive = new Provider({\n host: this.opts.host,\n provider: 'drive'\n })\n\n this.files = []\n\n // this.core.socket.on('')\n // Logic\n this.addFile = this.addFile.bind(this)\n this.filterItems = this.filterItems.bind(this)\n this.filterQuery = this.filterQuery.bind(this)\n this.getFolder = this.getFolder.bind(this)\n this.getNextFolder = this.getNextFolder.bind(this)\n this.handleRowClick = this.handleRowClick.bind(this)\n this.logout = this.logout.bind(this)\n this.handleDemoAuth = this.handleDemoAuth.bind(this)\n this.sortByTitle = this.sortByTitle.bind(this)\n this.sortByDate = this.sortByDate.bind(this)\n\n // Visual\n this.render = this.render.bind(this)\n\n // set default options\n const defaultOptions = {}\n\n // merge default options with the ones set by user\n this.opts = Object.assign({}, defaultOptions, opts)\n }\n\n install () {\n // Set default state for Google Drive\n this.core.setState({\n googleDrive: {\n authenticated: false,\n files: [],\n folders: [],\n directories: [{\n title: 'My Drive',\n id: 'root'\n }],\n activeRow: -1,\n filterInput: ''\n }\n })\n\n const target = this.opts.target\n const plugin = this\n this.target = this.mount(target, plugin)\n\n this.checkAuthentication()\n .then((authenticated) => {\n this.updateState({authenticated})\n\n console.log('are we authenticated?')\n console.log(authenticated)\n\n if (authenticated) {\n return this.getFolder('root')\n }\n\n return authenticated\n })\n .then((newState) => {\n this.updateState(newState)\n })\n\n return\n }\n\n focus () {\n }\n\n /**\n * Little shorthand to update the state with my new state\n */\n updateState (newState) {\n const {state} = this.core\n const googleDrive = Object.assign({}, state.googleDrive, newState)\n\n this.core.setState({googleDrive})\n }\n\n /**\n * Check to see if the user is authenticated.\n * @return {Promise} authentication status\n */\n checkAuthentication () {\n return fetch(`${this.opts.host}/drive/auth`, {\n method: 'get',\n credentials: 'include',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n }\n })\n .then((res) => {\n console.log(res.status)\n if (res.status < 200 || res.status > 300) {\n this.updateState({\n authenticated: false,\n error: true\n })\n let error = new Error(res.statusText)\n error.response = res\n throw error\n }\n\n return res.json()\n })\n .then((data) => data.authenticated)\n .catch((err) => err)\n }\n\n /**\n * Based on folder ID, fetch a new folder\n * @param {String} id Folder id\n * @return {Promise} Folders/files in folder\n */\n getFolder (id = 'root') {\n return this.GoogleDrive.list(id)\n .then((res) => {\n // let result = Utils.groupBy(data.items, (item) => item.mimeType)\n let folders = []\n let files = []\n res.items.forEach((item) => {\n if (item.mimeType === 'application/vnd.google-apps.folder') {\n folders.push(item)\n } else {\n files.push(item)\n }\n })\n return {\n folders,\n files\n }\n })\n .catch((err) => {\n return err\n })\n }\n\n /**\n * Fetches new folder and adds to breadcrumb nav\n * @param {String} id Folder id\n * @param {String} title Folder title\n */\n getNextFolder (id, title) {\n this.getFolder(id)\n .then((data) => {\n const state = this.core.getState().googleDrive\n\n const index = state.directories.findIndex((dir) => id === dir.id)\n let updatedDirectories\n\n if (index !== -1) {\n updatedDirectories = state.directories.slice(0, index + 1)\n } else {\n updatedDirectories = state.directories.concat([{\n id,\n title\n }])\n }\n\n this.updateState(Utils.extend(data, {\n directories: updatedDirectories\n }))\n })\n }\n\n addFile (file) {\n const tagFile = {\n source: this.id,\n data: file,\n name: file.title,\n type: file.mimeType,\n isRemote: true,\n body: {\n fileId: file.id\n },\n remote: {\n host: this.opts.host,\n url: `${this.opts.host}/drive/get/${file.id}`,\n body: {\n fileId: file.id\n }\n }\n }\n console.log('adding file')\n this.core.emitter.emit('core:file-add', tagFile)\n }\n\n handleError (response) {\n this.checkAuthentication()\n .then((authenticated) => {\n this.updateState({authenticated})\n })\n }\n\n /**\n * Removes session token on client side.\n */\n logout () {\n this.GoogleDrive.logout(location.href)\n .then((res) => res.json())\n .then((res) => {\n if (res.ok) {\n console.log('ok')\n const newState = {\n authenticated: false,\n files: [],\n folders: [],\n directories: [{\n title: 'My Drive',\n id: 'root'\n }]\n }\n\n this.updateState(newState)\n }\n })\n }\n\n getFileType (file) {\n const fileTypes = {\n 'application/vnd.google-apps.folder': 'Folder',\n 'application/vnd.google-apps.document': 'Google Docs',\n 'application/vnd.google-apps.spreadsheet': 'Google Sheets',\n 'application/vnd.google-apps.presentation': 'Google Slides',\n 'image/jpeg': 'JPEG Image',\n 'image/png': 'PNG Image'\n }\n\n return fileTypes[file.mimeType] ? fileTypes[file.mimeType] : file.fileExtension.toUpperCase()\n }\n\n /**\n * Used to set active file/folder.\n * @param {Object} file Active file/folder\n */\n handleRowClick (fileId) {\n const state = this.core.getState().googleDrive\n const newState = Object.assign({}, state, {\n activeRow: fileId\n })\n\n this.updateState(newState)\n }\n\n filterQuery (e) {\n const state = this.core.getState().googleDrive\n this.updateState(Object.assign({}, state, {\n filterInput: e.target.value\n }))\n }\n\n filterItems (items) {\n const state = this.core.getState().googleDrive\n return items.filter((folder) => {\n return folder.title.toLowerCase().indexOf(state.filterInput.toLowerCase()) !== -1\n })\n }\n\n sortByTitle () {\n const state = Object.assign({}, this.core.getState().googleDrive)\n const {files, folders, sorting} = state\n\n let sortedFiles = files.sort((fileA, fileB) => {\n if (sorting === 'titleDescending') {\n return fileB.title.localeCompare(fileA.title)\n }\n return fileA.title.localeCompare(fileB.title)\n })\n\n let sortedFolders = folders.sort((folderA, folderB) => {\n if (sorting === 'titleDescending') {\n return folderB.title.localeCompare(folderA.title)\n }\n return folderA.title.localeCompare(folderB.title)\n })\n\n this.updateState(Object.assign({}, state, {\n files: sortedFiles,\n folders: sortedFolders,\n sorting: (sorting === 'titleDescending') ? 'titleAscending' : 'titleDescending'\n }))\n }\n\n sortByDate () {\n const state = Object.assign({}, this.core.getState().googleDrive)\n const {files, folders, sorting} = state\n\n let sortedFiles = files.sort((fileA, fileB) => {\n let a = new Date(fileA.modifiedByMeDate)\n let b = new Date(fileB.modifiedByMeDate)\n\n if (sorting === 'dateDescending') {\n return a > b ? -1 : a < b ? 1 : 0\n }\n return a > b ? 1 : a < b ? -1 : 0\n })\n\n let sortedFolders = folders.sort((folderA, folderB) => {\n let a = new Date(folderA.modifiedByMeDate)\n let b = new Date(folderB.modifiedByMeDate)\n\n if (sorting === 'dateDescending') {\n return a > b ? -1 : a < b ? 1 : 0\n }\n\n return a > b ? 1 : a < b ? -1 : 0\n })\n\n this.updateState(Object.assign({}, state, {\n files: sortedFiles,\n folders: sortedFolders,\n sorting: (sorting === 'dateDescending') ? 'dateAscending' : 'dateDescending'\n }))\n }\n\n handleDemoAuth () {\n const state = this.core.getState().googleDrive\n this.updateState({}, state, {\n authenticated: true\n })\n }\n\n render (state) {\n const { authenticated, error } = state.googleDrive\n\n if (error) {\n return ErrorView({ error: error })\n }\n\n if (!authenticated) {\n const authState = btoa(JSON.stringify({\n redirect: location.href.split('#')[0]\n }))\n\n const link = `${this.opts.host}/connect/google?state=${authState}`\n\n return AuthView({\n link: link,\n demo: this.opts.demo,\n handleDemoAuth: this.handleDemoAuth\n })\n }\n\n const browserProps = Object.assign({}, state.googleDrive, {\n getNextFolder: this.getNextFolder,\n getFolder: this.getFolder,\n addFile: this.addFile,\n filterItems: this.filterItems,\n filterQuery: this.filterQuery,\n handleRowClick: this.handleRowClick,\n sortByTitle: this.sortByTitle,\n sortByDate: this.sortByDate,\n logout: this.logout,\n demo: this.opts.demo\n })\n\n return Browser(browserProps)\n }\n}\n","import Plugin from '../Plugin'\nimport WebcamProvider from '../../uppy-base/src/plugins/Webcam'\nimport { extend } from '../../core/Utils'\nimport WebcamIcon from './WebcamIcon'\nimport CameraScreen from './CameraScreen'\nimport PermissionsScreen from './PermissionsScreen'\n\n/**\n * Webcam\n */\nexport default class Webcam extends Plugin {\n constructor (core, opts) {\n super(core, opts)\n this.userMedia = true\n this.protocol = location.protocol.match(/https/i) ? 'https' : 'http'\n this.type = 'acquirer'\n this.id = 'Webcam'\n this.title = 'Webcam'\n this.icon = WebcamIcon()\n\n // set default options\n const defaultOptions = {\n enableFlash: true\n }\n\n this.params = {\n swfURL: 'webcam.swf',\n width: 400,\n height: 300,\n dest_width: 800, // size of captured image\n dest_height: 600, // these default to width/height\n image_format: 'jpeg', // image format (may be jpeg or png)\n jpeg_quality: 90, // jpeg image quality from 0 (worst) to 100 (best)\n enable_flash: true, // enable flash fallback,\n force_flash: false, // force flash mode,\n flip_horiz: false, // flip image horiz (mirror mode)\n fps: 30, // camera frames per second\n upload_name: 'webcam', // name of file in upload post data\n constraints: null, // custom user media constraints,\n flashNotDetectedText: 'ERROR: No Adobe Flash Player detected. Webcam.js relies on Flash for browsers that do not support getUserMedia (like yours).',\n noInterfaceFoundText: 'No supported webcam interface found.',\n unfreeze_snap: true // Whether to unfreeze the camera after snap (defaults to true)\n }\n\n // merge default options with the ones set by user\n this.opts = Object.assign({}, defaultOptions, opts)\n\n this.install = this.install.bind(this)\n this.updateState = this.updateState.bind(this)\n\n this.render = this.render.bind(this)\n\n // Camera controls\n this.start = this.start.bind(this)\n this.takeSnapshot = this.takeSnapshot.bind(this)\n\n this.webcam = new WebcamProvider(this.opts, this.params)\n }\n\n start () {\n this.webcam.start()\n .then((stream) => {\n this.updateState({\n videoStream: stream,\n cameraReady: true\n })\n })\n .catch((err) => {\n this.updateState({\n cameraError: err\n })\n })\n }\n\n takeSnapshot () {\n const opts = {\n name: `webcam-${Date.now()}.jpg`,\n mimeType: 'image/jpeg'\n }\n\n const video = document.querySelector('.UppyWebcam-video')\n\n const image = this.webcam.getImage(video, opts)\n\n const tagFile = {\n source: this.id,\n name: opts.name,\n data: image.data,\n type: opts.mimeType\n }\n\n this.core.emitter.emit('core:file-add', tagFile)\n }\n\n render (state) {\n this.start()\n\n if (!state.webcam.cameraReady && !state.webcam.useTheFlash) {\n return PermissionsScreen(state.webcam)\n }\n\n if (!this.stream) {\n this.stream = state.webcam.videoStream ? URL.createObjectURL(state.webcam.videoStream) : null\n }\n\n // const stream = state.webcam.videoStream ? URL.createObjectURL(state.webcam.videoStream) : null\n\n return CameraScreen(extend(state.webcam, {\n onSnapshot: this.takeSnapshot,\n focus: this.focus,\n getSWFHTML: this.webcam.getSWFHTML,\n src: this.stream\n }))\n }\n\n focus () {\n setTimeout(() => {\n this.core.emitter.emit('informer', 'Smile!', 'info', 3500)\n }, 1000)\n }\n\n install () {\n this.webcam.init()\n this.core.setState({\n webcam: {\n cameraReady: false\n }\n })\n\n const target = this.opts.target\n const plugin = this\n this.target = this.mount(target, plugin)\n }\n\n /**\n * Little shorthand to update the state with my new state\n */\n updateState (newState) {\n const {state} = this.core\n const webcam = Object.assign({}, state.webcam, newState)\n\n this.core.setState({webcam})\n }\n}\n","import Plugin from './Plugin'\nimport tus from 'tus-js-client'\nimport UppySocket from '../core/UppySocket'\n\n/**\n * Tus resumable file uploader\n *\n */\nexport default class Tus10 extends Plugin {\n constructor (core, opts) {\n super(core, opts)\n this.type = 'uploader'\n this.id = 'Tus'\n this.title = 'Tus'\n\n // set default options\n const defaultOptions = {\n resume: true,\n allowPause: true\n }\n\n // merge default options with the ones set by user\n this.opts = Object.assign({}, defaultOptions, opts)\n }\n\n pauseResume (action, fileID) {\n const updatedFiles = Object.assign({}, this.core.getState().files)\n const inProgressUpdatedFiles = Object.keys(updatedFiles).filter((file) => {\n return !updatedFiles[file].progress.uploadComplete &&\n updatedFiles[file].progress.uploadStarted\n })\n\n switch (action) {\n case 'toggle':\n if (updatedFiles[fileID].uploadComplete) return\n\n const wasPaused = updatedFiles[fileID].isPaused || false\n const isPaused = !wasPaused\n let updatedFile\n if (wasPaused) {\n updatedFile = Object.assign({}, updatedFiles[fileID], {\n isPaused: false\n })\n } else {\n updatedFile = Object.assign({}, updatedFiles[fileID], {\n isPaused: true\n })\n }\n updatedFiles[fileID] = updatedFile\n this.core.setState({files: updatedFiles})\n return isPaused\n case 'pauseAll':\n inProgressUpdatedFiles.forEach((file) => {\n const updatedFile = Object.assign({}, updatedFiles[file], {\n isPaused: true\n })\n updatedFiles[file] = updatedFile\n })\n this.core.setState({files: updatedFiles})\n return\n case 'resumeAll':\n inProgressUpdatedFiles.forEach((file) => {\n const updatedFile = Object.assign({}, updatedFiles[file], {\n isPaused: false\n })\n updatedFiles[file] = updatedFile\n })\n this.core.setState({files: updatedFiles})\n return\n }\n }\n\n/**\n * Create a new Tus upload\n *\n * @param {object} file for use with upload\n * @param {integer} current file in a queue\n * @param {integer} total number of files in a queue\n * @returns {Promise}\n */\n upload (file, current, total) {\n this.core.log(`uploading ${current} of ${total}`)\n\n // Create a new tus upload\n return new Promise((resolve, reject) => {\n const upload = new tus.Upload(file.data, {\n\n // TODO merge this.opts or this.opts.tus here\n metadata: file.meta,\n resume: this.opts.resume,\n endpoint: this.opts.endpoint,\n\n onError: (err) => {\n this.core.log(err)\n this.core.emitter.emit('core:upload-error', file.id)\n reject('Failed because: ' + err)\n },\n onProgress: (bytesUploaded, bytesTotal) => {\n // Dispatch progress event\n console.log(bytesUploaded, bytesTotal)\n this.core.emitter.emit('core:upload-progress', {\n uploader: this,\n id: file.id,\n bytesUploaded: bytesUploaded,\n bytesTotal: bytesTotal\n })\n },\n onSuccess: () => {\n this.core.emitter.emit('core:upload-success', file.id, upload.url)\n\n this.core.log(`Download ${upload.file.name} from ${upload.url}`)\n resolve(upload)\n }\n })\n\n this.core.emitter.on('core:file-remove', (fileID) => {\n if (fileID === file.id) {\n console.log('removing file: ', fileID)\n upload.abort()\n resolve(`upload ${fileID} was removed`)\n }\n })\n\n this.core.emitter.on('core:upload-pause', (fileID) => {\n if (fileID === file.id) {\n const isPaused = this.pauseResume('toggle', fileID)\n isPaused ? upload.abort() : upload.start()\n }\n })\n\n this.core.emitter.on('core:pause-all', () => {\n const files = this.core.getState().files\n if (!files[file.id]) return\n upload.abort()\n })\n\n this.core.emitter.on('core:resume-all', () => {\n const files = this.core.getState().files\n if (!files[file.id]) return\n upload.start()\n })\n\n upload.start()\n this.core.emitter.emit('core:upload-started', file.id, upload)\n })\n }\n\n uploadRemote (file, current, total) {\n return new Promise((resolve, reject) => {\n this.core.log(file.remote.url)\n fetch(file.remote.url, {\n method: 'post',\n credentials: 'include',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(Object.assign({}, file.remote.body, {\n endpoint: this.opts.endpoint,\n protocol: 'tus'\n }))\n })\n .then((res) => {\n if (res.status < 200 && res.status > 300) {\n return reject(res.statusText)\n }\n\n res.json()\n .then((data) => {\n // get the host domain\n var regex = /^(?:https?:\\/\\/)?(?:[^@\\/\\n]+@)?(?:www\\.)?([^:\\/\\n]+)/\n var host = regex.exec(file.remote.host)[1]\n\n var token = data.token\n var socket = new UppySocket({\n target: `ws://${host}:3020/api/${token}`\n })\n\n socket.on('progress', (progressData) => {\n const {progress, bytesUploaded, bytesTotal} = progressData\n\n if (progress) {\n this.core.log(`Upload progress: ${progress}`)\n\n // Dispatch progress event\n this.core.emitter.emit('core:upload-progress', {\n uploader: this,\n id: file.id,\n bytesUploaded: bytesUploaded,\n bytesTotal: bytesTotal\n })\n\n if (progress === '100.00') {\n this.core.emitter.emit('core:upload-success', file.id)\n socket.close()\n return resolve()\n }\n }\n })\n })\n })\n })\n }\n\n uploadFiles (files) {\n if (Object.keys(files).length === 0) {\n this.core.log('no files to upload!')\n return\n }\n\n const uploaders = []\n files.forEach((file, index) => {\n const current = parseInt(index, 10) + 1\n const total = files.length\n\n if (!file.isRemote) {\n uploaders.push(this.upload(file, current, total))\n } else {\n uploaders.push(this.uploadRemote(file, current, total))\n }\n })\n\n return Promise.all(uploaders)\n .then(() => {\n this.core.log('All files uploaded')\n return { uploadedCount: files.length }\n })\n .catch((err) => {\n this.core.log('Upload error: ' + err)\n })\n }\n\n selectForUpload (files) {\n // TODO: replace files[file].isRemote with some logic\n //\n // filter files that are now yet being uploaded / haven’t been uploaded\n // and remote too\n const filesForUpload = Object.keys(files).filter((file) => {\n if (!files[file].progress.uploadStarted || files[file].isRemote) {\n return true\n }\n return false\n }).map((file) => {\n return files[file]\n })\n\n this.uploadFiles(filesForUpload)\n }\n\n actions () {\n this.core.emitter.on('core:pause-all', () => {\n this.pauseResume('pauseAll')\n })\n\n this.core.emitter.on('core:resume-all', () => {\n this.pauseResume('resumeAll')\n })\n\n this.core.emitter.on('core:upload', () => {\n this.core.log('Tus is uploading...')\n const files = this.core.getState().files\n this.selectForUpload(files)\n })\n }\n\n addResumableUploadsCapabilityFlag () {\n const newCapabilities = Object.assign({}, this.core.getState().capabilities)\n newCapabilities.resumableUploads = true\n this.core.setState({\n capabilities: newCapabilities\n })\n }\n\n install () {\n this.addResumableUploadsCapabilityFlag()\n this.actions()\n }\n}\n","import Plugin from './Plugin'\n\nexport default class Multipart extends Plugin {\n constructor (core, opts) {\n super(core, opts)\n this.type = 'uploader'\n this.id = 'Multipart'\n this.title = 'Multipart'\n\n // Default options\n const defaultOptions = {\n fieldName: 'files[]',\n responseUrlFieldName: 'url',\n bundle: true\n }\n\n // Merge default options with the ones set by user\n this.opts = Object.assign({}, defaultOptions, opts)\n }\n\n upload (file, current, total) {\n this.core.log(`uploading ${current} of ${total}`)\n return new Promise((resolve, reject) => {\n // turn file into an array so we can use bundle\n // if (!this.opts.bundle) {\n // files = [files[current]]\n // }\n\n // for (let i in files) {\n // formPost.append(this.opts.fieldName, files[i])\n // }\n\n const formPost = new FormData()\n formPost.append(this.opts.fieldName, file.data)\n\n Object.keys(file.meta).forEach((item) => {\n console.log(file.meta, file.meta[item])\n formPost.append(item, file.meta[item])\n })\n\n const xhr = new XMLHttpRequest()\n\n xhr.upload.addEventListener('progress', (ev) => {\n if (ev.lengthComputable) {\n // Dispatch progress event\n this.core.emitter.emit('core:upload-progress', {\n uploader: this,\n id: file.id,\n bytesUploaded: ev.loaded,\n bytesTotal: ev.total\n })\n }\n })\n\n xhr.addEventListener('load', (ev) => {\n if (ev.target.status === 200) {\n const resp = JSON.parse(xhr.response)\n const uploadURL = resp[this.opts.responseUrlFieldName]\n\n this.core.emitter.emit('core:upload-success', file.id, uploadURL)\n\n this.core.log(`Download ${file.name} from ${file.uploadURL}`)\n return resolve(file)\n } else {\n this.core.emitter.emit('core:upload-error', file.id, xhr)\n return reject('Upload error')\n }\n\n // var upload = {}\n //\n // if (this.opts.bundle) {\n // upload = {files: files}\n // } else {\n // upload = {file: files[current]}\n // }\n })\n\n xhr.addEventListener('error', (ev) => {\n this.core.emitter.emit('core:upload-error', file.id)\n return reject('Upload error')\n })\n\n xhr.open('POST', this.opts.endpoint, true)\n xhr.send(formPost)\n this.core.emitter.emit('core:upload-started', file.id)\n })\n }\n\n selectForUpload (files) {\n if (Object.keys(files).length === 0) {\n this.core.log('no files to upload!')\n return\n }\n\n const filesForUpload = []\n Object.keys(files).forEach((file) => {\n if (!files[file].progress.uploadStarted || files[file].isRemote) {\n filesForUpload.push(files[file])\n }\n })\n\n const uploaders = []\n filesForUpload.forEach((file, i) => {\n const current = parseInt(i, 10) + 1\n const total = filesForUpload.length\n uploaders.push(this.upload(file, current, total))\n })\n\n return Promise.all(uploaders).then((result) => {\n this.core.log('Multipart has finished uploading!')\n })\n\n // if (this.opts.bundle) {\n // uploaders.push(this.upload(files, 0, files.length))\n // } else {\n // for (let i in files) {\n // uploaders.push(this.upload(files, i, files.length))\n // }\n // }\n }\n\n install () {\n const bus = this.core.emitter\n bus.on('core:upload', () => {\n this.core.log('Multipart is uploading...')\n const files = this.core.getState().files\n this.selectForUpload(files)\n })\n }\n}\n","import Utils from '../core/Utils'\nimport Translator from '../core/Translator'\nimport ee from 'namespace-emitter'\n// import deepFreeze from 'deep-freeze-strict'\nimport UppySocket from './UppySocket'\nimport en_US from '../locales/en_US'\n// import throttle from 'throttle-debounce/throttle'\n\n/**\n * Main Uppy core\n *\n * @param {object} opts general options, like locales, to show modal or not to show\n */\nexport default class Core {\n constructor (opts) {\n // set default options\n const defaultOptions = {\n // load English as the default locales\n locales: en_US,\n autoProceed: true,\n debug: false\n }\n\n // Merge default options with the ones set by user\n this.opts = Object.assign({}, defaultOptions, opts)\n\n // Dictates in what order different plugin types are ran:\n this.types = [ 'presetter', 'orchestrator', 'progressindicator',\n 'acquirer', 'modifier', 'uploader', 'presenter', 'debugger']\n\n this.type = 'core'\n\n // Container for different types of plugins\n this.plugins = {}\n\n this.translator = new Translator({locales: this.opts.locales})\n this.i18n = this.translator.translate.bind(this.translator)\n this.getState = this.getState.bind(this)\n this.updateMeta = this.updateMeta.bind(this)\n this.initSocket = this.initSocket.bind(this)\n this.log = this.log.bind(this)\n this.addFile = this.addFile.bind(this)\n\n this.bus = this.emitter = ee()\n this.on = this.bus.on.bind(this.bus)\n this.emit = this.bus.emit.bind(this.bus)\n\n this.state = {\n files: {},\n capabilities: {},\n totalProgress: 0\n }\n\n if (this.opts.debug) {\n // for debugging and testing\n global.UppyState = this.state\n global.uppyLog = ''\n global.UppyAddFile = this.addFile.bind(this)\n global._Uppy = this\n }\n }\n\n /**\n * Iterate on all plugins and run `update` on them. Called each time when state changes\n *\n */\n updateAll (state) {\n Object.keys(this.plugins).forEach((pluginType) => {\n this.plugins[pluginType].forEach((plugin) => {\n plugin.update(state)\n })\n })\n }\n\n /**\n * Updates state\n *\n * @param {newState} object\n */\n setState (stateUpdate) {\n const newState = Object.assign({}, this.state, stateUpdate)\n this.emit('core:state-update', this.state, newState, stateUpdate)\n\n this.state = newState\n this.updateAll(this.state)\n\n // this.log('Updating state with: ')\n // this.log(newState)\n }\n\n /**\n * Returns current state\n *\n */\n getState () {\n // return deepFreeze(this.state)\n return this.state\n }\n\n updateMeta (data, fileID) {\n const updatedFiles = Object.assign({}, this.getState().files)\n const newMeta = Object.assign({}, updatedFiles[fileID].meta, data)\n updatedFiles[fileID] = Object.assign({}, updatedFiles[fileID], {\n meta: newMeta\n })\n this.setState({files: updatedFiles})\n }\n\n addFile (file) {\n const updatedFiles = Object.assign({}, this.state.files)\n\n const fileName = file.name || 'noname'\n const fileType = Utils.getFileType(file) ? Utils.getFileType(file).split('/') : ['', '']\n const fileTypeGeneral = fileType[0]\n const fileTypeSpecific = fileType[1]\n const fileExtension = Utils.getFileNameAndExtension(fileName)[1]\n const isRemote = file.isRemote || false\n\n const fileID = Utils.generateFileID(fileName)\n\n const newFile = {\n source: file.source || '',\n id: fileID,\n name: fileName,\n extension: fileExtension || '',\n meta: {\n name: fileName\n },\n type: {\n general: fileTypeGeneral,\n specific: fileTypeSpecific\n },\n data: file.data,\n progress: {\n percentage: 0,\n uploadComplete: false,\n uploadStarted: false\n },\n size: file.data.size || 0,\n isRemote: isRemote,\n remote: file.remote || ''\n }\n\n updatedFiles[fileID] = newFile\n this.setState({files: updatedFiles})\n\n this.bus.emit('file-added', fileID)\n this.log(`Added file: ${fileName}, ${fileID}`)\n\n if (fileTypeGeneral === 'image' && !isRemote) {\n this.addThumbnail(newFile.id)\n }\n\n if (this.opts.autoProceed) {\n this.bus.emit('core:upload')\n }\n }\n\n removeFile (fileID) {\n const updatedFiles = Object.assign({}, this.getState().files)\n delete updatedFiles[fileID]\n this.setState({files: updatedFiles})\n }\n\n addThumbnail (fileID) {\n const file = this.getState().files[fileID]\n\n Utils.readFile(file.data)\n .then((imgDataURI) => Utils.createImageThumbnail(imgDataURI, 200))\n .then((thumbnail) => {\n const updatedFiles = Object.assign({}, this.getState().files)\n const updatedFile = Object.assign({}, updatedFiles[fileID], {\n preview: thumbnail\n })\n updatedFiles[fileID] = updatedFile\n this.setState({files: updatedFiles})\n })\n }\n\n startUpload () {\n this.emit('core:upload')\n }\n\n calculateProgress (data) {\n const fileID = data.id\n const updatedFiles = Object.assign({}, this.getState().files)\n if (!updatedFiles[fileID]) {\n console.error('Trying to set progress for a file that’s not with us anymore: ', fileID)\n return\n }\n\n const updatedFile = Object.assign({}, updatedFiles[fileID],\n Object.assign({}, {\n progress: Object.assign({}, updatedFiles[fileID].progress, {\n bytesUploaded: data.bytesUploaded,\n bytesTotal: data.bytesTotal,\n percentage: Math.round((data.bytesUploaded / data.bytesTotal * 100).toFixed(2))\n })\n }\n ))\n updatedFiles[data.id] = updatedFile\n\n // calculate total progress, using the number of files currently uploading,\n // multiplied by 100 and the summ of individual progress of each file\n const inProgress = Object.keys(updatedFiles).filter((file) => {\n return updatedFiles[file].progress.uploadStarted\n })\n const progressMax = inProgress.length * 100\n let progressAll = 0\n inProgress.forEach((file) => {\n progressAll = progressAll + updatedFiles[file].progress.percentage\n })\n\n const totalProgress = Math.round((progressAll * 100 / progressMax).toFixed(2))\n\n // if (totalProgress === 100) {\n // const completeFiles = Object.keys(updatedFiles).filter((file) => {\n // // this should be `uploadComplete`\n // return updatedFiles[file].progress.percentage === 100\n // })\n // this.emit('core:success', completeFiles.length)\n // }\n\n this.setState({\n totalProgress: totalProgress,\n files: updatedFiles\n })\n }\n\n /**\n * Registers listeners for all global actions, like:\n * `file-add`, `file-remove`, `upload-progress`, `reset`\n *\n */\n actions () {\n // this.bus.on('*', (payload) => {\n // console.log('emitted: ', this.event)\n // console.log('with payload: ', payload)\n // })\n\n // const bus = this.bus\n\n this.on('core:file-add', (data) => {\n this.addFile(data)\n })\n\n // `remove-file` removes a file from `state.files`, for example when\n // a user decides not to upload particular file and clicks a button to remove it\n this.on('core:file-remove', (fileID) => {\n this.removeFile(fileID)\n })\n\n this.on('core:upload-started', (fileID, upload) => {\n const updatedFiles = Object.assign({}, this.getState().files)\n const updatedFile = Object.assign({}, updatedFiles[fileID],\n Object.assign({}, {\n progress: Object.assign({}, updatedFiles[fileID].progress, {\n uploadStarted: Date.now()\n })\n }\n ))\n updatedFiles[fileID] = updatedFile\n\n this.setState({files: updatedFiles})\n })\n\n // const throttledCalculateProgress = throttle(1000, (data) => this.calculateProgress(data))\n\n this.on('core:upload-progress', (data) => {\n this.calculateProgress(data)\n // throttledCalculateProgress(data)\n })\n\n this.on('core:upload-success', (fileID, uploadURL) => {\n const updatedFiles = Object.assign({}, this.getState().files)\n const updatedFile = Object.assign({}, updatedFiles[fileID], {\n progress: Object.assign({}, updatedFiles[fileID].progress, {\n uploadComplete: true\n }),\n uploadURL: uploadURL\n })\n updatedFiles[fileID] = updatedFile\n\n // console.log(this.getState().totalProgress)\n\n if (this.getState().totalProgress === 100) {\n const completeFiles = Object.keys(updatedFiles).filter((file) => {\n // this should be `uploadComplete`\n return updatedFiles[file].progress.uploadComplete\n })\n this.emit('core:success', completeFiles.length)\n }\n\n this.setState({\n files: updatedFiles\n })\n })\n\n this.on('core:update-meta', (data, fileID) => {\n this.updateMeta(data, fileID)\n })\n\n // show informer if offline\n if (typeof window !== 'undefined') {\n window.addEventListener('online', () => this.isOnline(true))\n window.addEventListener('offline', () => this.isOnline(false))\n setTimeout(() => this.isOnline(), 3000)\n }\n }\n\n isOnline (status) {\n const online = status || window.navigator.onLine\n if (!online) {\n this.emit('is-offline')\n this.emit('informer', 'No internet connection', 'error', 0)\n this.wasOffline = true\n } else {\n this.emit('is-online')\n if (this.wasOffline) {\n this.emit('informer', 'Connected!', 'success', 3000)\n this.wasOffline = false\n }\n }\n }\n\n/**\n * Registers a plugin with Core\n *\n * @param {Class} Plugin object\n * @param {Object} options object that will be passed to Plugin later\n * @return {Object} self for chaining\n */\n use (Plugin, opts) {\n // Prepare props to pass to plugins\n const props = {\n getState: this.getState.bind(this),\n setState: this.setState.bind(this),\n updateMeta: this.updateMeta.bind(this),\n addFile: this.addFile.bind(this),\n i18n: this.i18n.bind(this),\n bus: this.ee,\n log: this.log.bind(this)\n }\n // Instantiate\n const plugin = new Plugin(this, opts, props)\n const pluginName = plugin.id\n this.plugins[plugin.type] = this.plugins[plugin.type] || []\n\n if (!pluginName) {\n throw new Error('Your plugin must have a name')\n }\n\n if (!plugin.type) {\n throw new Error('Your plugin must have a type')\n }\n\n let existsPluginAlready = this.getPlugin(pluginName)\n if (existsPluginAlready) {\n let msg = `Already found a plugin named '${existsPluginAlready.name}'.\n Tried to use: '${pluginName}'.\n Uppy is currently limited to running one of every plugin.\n Share your use case with us over at\n https://github.com/transloadit/uppy/issues/\n if you want us to reconsider.`\n throw new Error(msg)\n }\n\n this.plugins[plugin.type].push(plugin)\n\n return this\n }\n\n/**\n * Find one Plugin by name\n *\n * @param string name description\n */\n getPlugin (name) {\n let foundPlugin = false\n this.iteratePlugins((plugin) => {\n const pluginName = plugin.id\n if (pluginName === name) {\n foundPlugin = plugin\n return false\n }\n })\n return foundPlugin\n }\n\n/**\n * Iterate through all `use`d plugins\n *\n * @param function method description\n */\n iteratePlugins (method) {\n Object.keys(this.plugins).forEach((pluginType) => {\n this.plugins[pluginType].forEach(method)\n })\n }\n\n/**\n * Logs stuff to console, only if `debug` is set to true. Silent in production.\n *\n * @return {String|Object} to log\n */\n log (msg, type) {\n if (!this.opts.debug) {\n return\n }\n if (msg === `${msg}`) {\n console.log(`LOG: ${msg}`)\n } else {\n console.dir(msg)\n }\n\n if (type === 'error') {\n console.error(`LOG: ${msg}`)\n }\n\n global.uppyLog = global.uppyLog + '\\n' + 'DEBUG LOG: ' + msg\n }\n\n initSocket (opts) {\n if (!this.socket) {\n this.socket = new UppySocket(opts)\n }\n\n return this.socket\n }\n\n installAll () {\n Object.keys(this.plugins).forEach((pluginType) => {\n this.plugins[pluginType].forEach((plugin) => {\n plugin.install()\n })\n })\n }\n\n/**\n * Initializes actions, installs all plugins (by iterating on them and calling `install`), sets options\n *\n * (In the past was used to run a waterfall of runType plugin packs, like so:\n * All preseters(data) --> All acquirers(data) --> All uploaders(data) --> done)\n */\n run () {\n this.log('Core is run, initializing actions, installing plugins...')\n\n // setInterval(() => {\n // this.updateAll(this.state)\n // }, 1000)\n\n this.actions()\n\n // Forse set `autoProceed` option to false if there are multiple selector Plugins active\n // if (this.plugins.acquirer && this.plugins.acquirer.length > 1) {\n // this.opts.autoProceed = false\n // }\n\n // Install all plugins\n this.installAll()\n\n return\n }\n}\n","import mime from 'mime-types'\n// import pica from 'pica'\n\n/**\n * A collection of small utility functions that help with dom manipulation, adding listeners,\n * promises and other good things.\n *\n * @module Utils\n */\n\n/**\n * Shallow flatten nested arrays.\n */\nexport function flatten (arr) {\n return [].concat.apply([], arr)\n}\n\nexport function isTouchDevice () {\n return 'ontouchstart' in window || // works on most browsers\n navigator.maxTouchPoints // works on IE10/11 and Surface\n}\n\n/**\n * Shorter and fast way to select a single node in the DOM\n * @param { String } selector - unique dom selector\n * @param { Object } ctx - DOM node where the target of our search will is located\n * @returns { Object } dom node found\n */\nexport function $ (selector, ctx) {\n return (ctx || document).querySelector(selector)\n}\n\n/**\n * Shorter and fast way to select multiple nodes in the DOM\n * @param { String|Array } selector - DOM selector or nodes list\n * @param { Object } ctx - DOM node where the targets of our search will is located\n * @returns { Object } dom nodes found\n */\nexport function $$ (selector, ctx) {\n var els\n if (typeof selector === 'string') {\n els = (ctx || document).querySelectorAll(selector)\n } else {\n els = selector\n return Array.prototype.slice.call(els)\n }\n}\n\nexport function truncateString (str, length) {\n if (str.length > length) {\n return str.substr(0, length / 2) + '...' + str.substr(str.length - length / 4, str.length)\n }\n return str\n\n // more precise version if needed\n // http://stackoverflow.com/a/831583\n}\n\nexport function secondsToTime (rawSeconds) {\n const hours = Math.floor(rawSeconds / 3600) % 24\n const minutes = Math.floor(rawSeconds / 60) % 60\n const seconds = Math.floor(rawSeconds % 60)\n\n return { hours, minutes, seconds }\n}\n\n/**\n * Partition array by a grouping function.\n * @param {[type]} array Input array\n * @param {[type]} groupingFn Grouping function\n * @return {[type]} Array of arrays\n */\nexport function groupBy (array, groupingFn) {\n return array.reduce((result, item) => {\n let key = groupingFn(item)\n let xs = result.get(key) || []\n xs.push(item)\n result.set(key, xs)\n return result\n }, new Map())\n}\n\n/**\n * Tests if every array element passes predicate\n * @param {Array} array Input array\n * @param {Object} predicateFn Predicate\n * @return {bool} Every element pass\n */\nexport function every (array, predicateFn) {\n return array.reduce((result, item) => {\n if (!result) {\n return false\n }\n\n return predicateFn(item)\n }, true)\n}\n\n/**\n * Converts list into array\n*/\nexport function toArray (list) {\n return Array.prototype.slice.call(list || [], 0)\n}\n\n/**\n * Takes a fileName and turns it into fileID, by converting to lowercase,\n * removing extra characters and adding unix timestamp\n *\n * @param {String} fileName\n *\n */\nexport function generateFileID (fileName) {\n let fileID = fileName.toLowerCase()\n fileID = fileID.replace(/[^A-Z0-9]/ig, '')\n fileID = fileID + Date.now()\n return fileID\n}\n\nexport function extend (...objs) {\n return Object.assign.apply(this, [{}].concat(objs))\n}\n\n/**\n * Takes function or class, returns its name.\n * Because IE doesn’t support `constructor.name`.\n * https://gist.github.com/dfkaye/6384439, http://stackoverflow.com/a/15714445\n *\n * @param {Object} fn — function\n *\n */\n// function getFnName (fn) {\n// var f = typeof fn === 'function'\n// var s = f && ((fn.name && ['', fn.name]) || fn.toString().match(/function ([^\\(]+)/))\n// return (!f && 'not a function') || (s && s[1] || 'anonymous')\n// }\n\nexport function getProportionalImageHeight (img, newWidth) {\n var aspect = img.width / img.height\n var newHeight = Math.round(newWidth / aspect)\n return newHeight\n}\n\nexport function getFileType (file) {\n if (file.type) {\n return file.type\n }\n return mime.lookup(file.name)\n}\n\n// returns [fileName, fileExt]\nexport function getFileNameAndExtension (fullFileName) {\n var re = /(?:\\.([^.]+))?$/\n var fileExt = re.exec(fullFileName)[1]\n var fileName = fullFileName.replace('.' + fileExt, '')\n return [fileName, fileExt]\n}\n\n/**\n * Reads file as data URI from file object,\n * the one you get from input[type=file] or drag & drop.\n *\n * @param {Object} file object\n * @return {Promise} dataURL of the file\n *\n */\nexport function readFile (fileObj) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader()\n reader.addEventListener('load', function (ev) {\n return resolve(ev.target.result)\n })\n reader.readAsDataURL(fileObj)\n\n // function workerScript () {\n // self.addEventListener('message', (e) => {\n // const file = e.data.file\n // try {\n // const reader = new FileReaderSync()\n // postMessage({\n // file: reader.readAsDataURL(file)\n // })\n // } catch (err) {\n // console.log(err)\n // }\n // })\n // }\n //\n // const worker = makeWorker(workerScript)\n // worker.postMessage({file: fileObj})\n // worker.addEventListener('message', (e) => {\n // const fileDataURL = e.data.file\n // console.log('FILE _ DATA _ URL')\n // return resolve(fileDataURL)\n // })\n })\n}\n\n/**\n * Resizes an image to specified width and proportional height, using canvas\n * See https://davidwalsh.name/resize-image-canvas,\n * http://babalan.com/resizing-images-with-javascript/\n * @TODO see if we need https://github.com/stomita/ios-imagefile-megapixel for iOS\n *\n * @param {String} Data URI of the original image\n * @param {String} width of the resulting image\n * @return {String} Data URI of the resized image\n */\nexport function createImageThumbnail (imgDataURI, newWidth) {\n return new Promise((resolve, reject) => {\n const img = new Image()\n img.addEventListener('load', () => {\n const newImageWidth = newWidth\n const newImageHeight = getProportionalImageHeight(img, newImageWidth)\n\n // create an off-screen canvas\n const canvas = document.createElement('canvas')\n const ctx = canvas.getContext('2d')\n\n // set its dimension to target size\n canvas.width = newImageWidth\n canvas.height = newImageHeight\n\n // draw source image into the off-screen canvas:\n // ctx.clearRect(0, 0, width, height)\n ctx.drawImage(img, 0, 0, newImageWidth, newImageHeight)\n\n // pica.resizeCanvas(img, canvas, (err) => {\n // if (err) console.log(err)\n // const thumbnail = canvas.toDataURL('image/png')\n // return resolve(thumbnail)\n // })\n\n // encode image to data-uri with base64 version of compressed image\n // canvas.toDataURL('image/jpeg', quality); // quality = [0.0, 1.0]\n const thumbnail = canvas.toDataURL('image/png')\n return resolve(thumbnail)\n })\n img.src = imgDataURI\n })\n}\n\nexport function dataURItoBlob (dataURI, opts, toFile) {\n // get the base64 data\n var data = dataURI.split(',')[1]\n\n // user may provide mime type, if not get it from data URI\n var mimeType = opts.mimeType || dataURI.split(',')[0].split(':')[1].split(';')[0]\n\n // default to plain/text if data URI has no mimeType\n if (mimeType == null) {\n mimeType = 'plain/text'\n }\n\n var binary = atob(data)\n var array = []\n for (var i = 0; i < binary.length; i++) {\n array.push(binary.charCodeAt(i))\n }\n\n // Convert to a File?\n if (toFile) {\n return new File([new Uint8Array(array)], opts.name || '', {type: mimeType})\n }\n\n return new Blob([new Uint8Array(array)], {type: mimeType})\n}\n\nexport function dataURItoFile (dataURI, opts) {\n return dataURItoBlob(dataURI, opts, true)\n}\n\n/**\n * Copies text to clipboard by creating an almost invisible textarea,\n * adding text there, then running execCommand('copy').\n * Falls back to prompt() when the easy way fails (hello, Safari!)\n * From http://stackoverflow.com/a/30810322\n *\n * @param {String} textToCopy\n * @param {String} fallbackString\n * @return {Promise}\n */\nexport function copyToClipboard (textToCopy, fallbackString) {\n fallbackString = fallbackString || 'Copy the URL below'\n\n return new Promise((resolve, reject) => {\n const textArea = document.createElement('textarea')\n textArea.setAttribute('style', {\n position: 'fixed',\n top: 0,\n left: 0,\n width: '2em',\n height: '2em',\n padding: 0,\n border: 'none',\n outline: 'none',\n boxShadow: 'none',\n background: 'transparent'\n })\n\n textArea.value = textToCopy\n document.body.appendChild(textArea)\n textArea.select()\n\n const magicCopyFailed = (err) => {\n document.body.removeChild(textArea)\n window.prompt(fallbackString, textToCopy)\n return reject('Oops, unable to copy displayed fallback prompt: ' + err)\n }\n\n try {\n const successful = document.execCommand('copy')\n if (!successful) {\n return magicCopyFailed('copy command unavailable')\n }\n document.body.removeChild(textArea)\n return resolve()\n } catch (err) {\n document.body.removeChild(textArea)\n return magicCopyFailed(err)\n }\n })\n}\n\n// export function createInlineWorker (workerFunction) {\n// let code = workerFunction.toString()\n// code = code.substring(code.indexOf('{') + 1, code.lastIndexOf('}'))\n//\n// const blob = new Blob([code], {type: 'application/javascript'})\n// const worker = new Worker(URL.createObjectURL(blob))\n//\n// return worker\n// }\n\nexport function makeWorker (script) {\n var URL = window.URL || window.webkitURL\n var Blob = window.Blob\n var Worker = window.Worker\n\n if (!URL || !Blob || !Worker || !script) {\n return null\n }\n\n let code = script.toString()\n code = code.substring(code.indexOf('{') + 1, code.lastIndexOf('}'))\n\n var blob = new Blob([code])\n var worker = new Worker(URL.createObjectURL(blob))\n return worker\n}\n\nexport function getSpeed (fileProgress) {\n if (!fileProgress.bytesUploaded) return 0\n\n const timeElapsed = (new Date()) - fileProgress.uploadStarted\n const uploadSpeed = fileProgress.bytesUploaded / (timeElapsed / 1000)\n return uploadSpeed\n}\n\nexport function getETA (fileProgress) {\n if (!fileProgress.bytesUploaded) return 0\n\n const uploadSpeed = getSpeed(fileProgress)\n const bytesRemaining = fileProgress.bytesTotal - fileProgress.bytesUploaded\n const secondsRemaining = Math.round(bytesRemaining / uploadSpeed * 10) / 10\n\n return secondsRemaining\n}\n\nexport function prettyETA (seconds) {\n const time = secondsToTime(seconds)\n\n // Only display hours and minutes if they are greater than 0 but always\n // display minutes if hours is being displayed\n const hoursStr = time.hours ? time.hours + 'h' : ''\n const minutesStr = (time.hours || time.minutes) ? time.minutes + 'm' : ''\n const secondsStr = time.seconds + 's'\n\n return `${hoursStr} ${minutesStr} ${secondsStr}`\n}\n\nexport function makeCachingFunction () {\n let cachedEl = null\n let lastUpdate = Date.now()\n\n return function cacheElement (el, time) {\n if (Date.now() - lastUpdate < time) {\n return cachedEl\n }\n\n cachedEl = el\n lastUpdate = Date.now()\n\n return el\n }\n}\n\nexport default {\n generateFileID,\n toArray,\n every,\n flatten,\n groupBy,\n $,\n $$,\n extend,\n readFile,\n createImageThumbnail,\n getProportionalImageHeight,\n isTouchDevice,\n getFileNameAndExtension,\n truncateString,\n getFileType,\n secondsToTime,\n dataURItoBlob,\n dataURItoFile,\n getSpeed,\n getETA,\n makeWorker,\n makeCachingFunction\n}\n","import yo from 'yo-yo'\nexport default yo\n","import ee from 'namespace-emitter'\n\nexport default class UppySocket {\n constructor (opts) {\n this.queued = []\n this.isOpen = false\n this.socket = new WebSocket(opts.target)\n this.emitter = ee()\n\n this.socket.onopen = (e) => {\n this.isOpen = true\n\n while (this.queued.length > 0 && this.isOpen) {\n const first = this.queued[0]\n this.send(first.action, first.payload)\n this.queued = this.queued.slice(1)\n }\n }\n\n this.socket.onclose = (e) => {\n this.isOpen = false\n }\n\n this._handleMessage = this._handleMessage.bind(this)\n\n this.socket.onmessage = this._handleMessage\n\n this.close = this.close.bind(this)\n this.emit = this.emit.bind(this)\n this.on = this.on.bind(this)\n this.once = this.once.bind(this)\n this.send = this.send.bind(this)\n }\n\n close () {\n return this.socket.close()\n }\n\n send (action, payload) {\n // attach uuid\n\n if (!this.isOpen) {\n this.queued.push({action, payload})\n return\n }\n\n this.socket.send(JSON.stringify({\n action,\n payload\n }))\n }\n\n on (action, handler) {\n this.emitter.on(action, handler)\n }\n\n emit (action, payload) {\n this.emitter.emit(action, payload)\n }\n\n once (action, handler) {\n this.emitter.once(action, handler)\n }\n\n _handleMessage (e) {\n try {\n const message = JSON.parse(e.data)\n this.emit(message.action, message.payload)\n } catch (err) {\n console.log(err)\n }\n }\n}\n","import html from '../../core/html'\nimport FileList from './FileList'\nimport Tabs from './Tabs'\nimport FileCard from './FileCard'\nimport UploadBtn from './UploadBtn'\nimport ProgressCircle from './ProgressCircle'\nimport StatusBar from './StatusBar'\nimport { isTouchDevice, toArray } from '../../core/Utils'\nimport { closeIcon } from './icons'\n\nexport default function Dashboard (props) {\n // http://dev.edenspiekermann.com/2016/02/11/introducing-accessible-modal-dialog\n\n // const uploadStartedFilesCount = uploadStartedFiles.length\n // const completeFilesCount = completeFiles.length\n // const inProgressFilesCount = inProgressFiles.length\n // const totalFileCount = Object.keys(files).length\n // const newFileCount = newFiles.length\n\n const handleInputChange = (ev) => {\n ev.preventDefault()\n const files = toArray(ev.target.files)\n\n files.forEach((file) => {\n props.addFile({\n source: props.id,\n name: file.name,\n type: file.type,\n data: file\n })\n })\n }\n\n // @TODO Exprimental, work in progress\n // no names, weird API, Chrome-only http://stackoverflow.com/a/22940020\n const handlePaste = (ev) => {\n ev.preventDefault()\n\n const files = toArray(ev.clipboardData.items)\n files.forEach((file) => {\n if (file.kind !== 'file') return\n\n const blob = file.getAsFile()\n // console.log(blob)\n // console.log(blob.size)\n props.log('File pasted')\n props.addFile({\n source: props.id,\n name: file.name,\n type: file.type,\n data: blob\n })\n })\n }\n\n return html`<div class=\"Uppy UppyTheme--default UppyDashboard\n ${isTouchDevice() ? 'Uppy--isTouchDevice' : ''}\n ${props.semiTransparent ? 'UppyDashboard--semiTransparent' : ''}\n ${!props.inline ? 'UppyDashboard--modal' : ''}\"\n aria-hidden=\"${props.inline ? 'false' : props.modal.isHidden}\"\n aria-label=\"${!props.inline\n ? props.i18n('dashboardWindowTitle')\n : props.i18n('dashboardTitle')}\"\n role=\"dialog\"\n onpaste=${handlePaste}>\n\n <div class=\"UppyDashboard-overlay\"\n onclick=${props.hideModal}>\n <button class=\"UppyDashboard-close\"\n aria-label=\"${props.i18n('closeModal')}\"\n title=\"${props.i18n('closeModal')}\"\n onclick=${props.hideModal}>${closeIcon()}</button>\n </div>\n\n <div class=\"UppyDashboard-inner\" tabindex=\"0\">\n <div class=\"UppyDashboard-innerWrap\">\n\n ${Tabs({\n handleInputChange: handleInputChange,\n acquirers: props.acquirers,\n container: props.container,\n panelSelectorPrefix: props.panelSelectorPrefix,\n showPanel: props.showPanel,\n i18n: props.i18n\n })}\n\n ${FileCard({\n files: props.files,\n fileCardFor: props.fileCardFor,\n done: props.fileCardDone,\n metaFields: props.metaFields,\n log: props.log,\n i18n: props.i18n\n })}\n\n ${FileList({\n files: props.files,\n showFileCard: props.showFileCard,\n showProgressDetails: props.showProgressDetails,\n totalProgress: props.totalProgress,\n totalFileCount: props.totalFileCount,\n info: props.info,\n i18n: props.i18n,\n log: props.log,\n removeFile: props.removeFile,\n pauseAll: props.pauseAll,\n resumeAll: props.resumeAll,\n pauseUpload: props.pauseUpload,\n startUpload: props.startUpload\n })}\n\n <div class=\"UppyDashboard-actions\">\n ${!props.autoProceed && props.newFiles.length > 0\n ? UploadBtn({\n i18n: props.i18n,\n startUpload: props.startUpload,\n newFileCount: props.newFiles.length\n })\n : null\n }\n\n ${false && props.uploadStartedFiles.length > 0\n ? ProgressCircle({\n totalProgress: props.totalProgress,\n isAllPaused: props.isAllPaused,\n isAllComplete: props.isAllComplete,\n pauseAll: props.pauseAll,\n resumeAll: props.resumeAll\n })\n : null\n }\n </div>\n\n ${props.uploadStartedFiles.length > 0 && !props.isAllComplete\n ? StatusBar({\n totalProgress: props.totalProgress,\n isAllComplete: props.isAllComplete,\n isAllPaused: props.isAllPaused,\n pauseAll: props.pauseAll,\n resumeAll: props.resumeAll,\n complete: props.completeFiles.length,\n inProgress: props.uploadStartedFiles.length,\n totalSpeed: props.totalSpeed,\n totalETA: props.totalETA\n })\n : null\n }\n\n <div class=\"UppyDashboardContent-panel\"\n role=\"tabpanel\"\n aria-hidden=\"${props.activeAcquirer ? props.activeAcquirer.isHidden : 'true'}\">\n <div class=\"UppyDashboardContent-bar\">\n <h2 class=\"UppyDashboardContent-title\">\n ${props.i18n('importFrom')} ${props.activeAcquirer ? props.activeAcquirer.name : null}\n </h2>\n <button class=\"UppyDashboardContent-back\"\n onclick=${props.hideAllPanels}>${props.i18n('done')}</button>\n </div>\n ${props.activeAcquirer ? props.activeAcquirer.render(props.state) : null}\n </div>\n </div>\n\n <div class=\"UppyDashboard-progressindicators\">\n ${props.progressindicators.map((target) => {\n return target.render(props.state)\n })}\n </div>\n\n </div>\n </div>\n </div>`\n}\n","import html from '../../core/html'\n\n// https://css-tricks.com/creating-svg-icon-system-react/\n\nexport function defaultTabIcon () {\n return html`<svg class=\"UppyIcon\" width=\"30\" height=\"30\" viewBox=\"0 0 30 30\">\n <path d=\"M15 30c8.284 0 15-6.716 15-15 0-8.284-6.716-15-15-15C6.716 0 0 6.716 0 15c0 8.284 6.716 15 15 15zm4.258-12.676v6.846h-8.426v-6.846H5.204l9.82-12.364 9.82 12.364H19.26z\" />\n </svg>`\n}\n\nexport function iconCopy () {\n return html`<svg class=\"UppyIcon\" width=\"51\" height=\"51\" viewBox=\"0 0 51 51\">\n <path d=\"M17.21 45.765a5.394 5.394 0 0 1-7.62 0l-4.12-4.122a5.393 5.393 0 0 1 0-7.618l6.774-6.775-2.404-2.404-6.775 6.776c-3.424 3.427-3.424 9 0 12.426l4.12 4.123a8.766 8.766 0 0 0 6.216 2.57c2.25 0 4.5-.858 6.214-2.57l13.55-13.552a8.72 8.72 0 0 0 2.575-6.213 8.73 8.73 0 0 0-2.575-6.213l-4.123-4.12-2.404 2.404 4.123 4.12a5.352 5.352 0 0 1 1.58 3.81c0 1.438-.562 2.79-1.58 3.808l-13.55 13.55z\"/>\n <path d=\"M44.256 2.858A8.728 8.728 0 0 0 38.043.283h-.002a8.73 8.73 0 0 0-6.212 2.574l-13.55 13.55a8.725 8.725 0 0 0-2.575 6.214 8.73 8.73 0 0 0 2.574 6.216l4.12 4.12 2.405-2.403-4.12-4.12a5.357 5.357 0 0 1-1.58-3.812c0-1.437.562-2.79 1.58-3.808l13.55-13.55a5.348 5.348 0 0 1 3.81-1.58c1.44 0 2.792.562 3.81 1.58l4.12 4.12c2.1 2.1 2.1 5.518 0 7.617L39.2 23.775l2.404 2.404 6.775-6.777c3.426-3.427 3.426-9 0-12.426l-4.12-4.12z\"/>\n </svg>`\n}\n\nexport function iconResume () {\n return html`<svg class=\"UppyIcon\" width=\"25\" height=\"25\" viewBox=\"0 0 44 44\">\n <polygon class=\"play\" transform=\"translate(6, 5.5)\" points=\"13 21.6666667 13 11 21 16.3333333\" />\n </svg>`\n}\n\nexport function iconPause () {\n return html`<svg class=\"UppyIcon\" width=\"25px\" height=\"25px\" viewBox=\"0 0 44 44\">\n <g transform=\"translate(18, 17)\" class=\"pause\">\n <rect x=\"0\" y=\"0\" width=\"2\" height=\"10\" rx=\"0\" />\n <rect x=\"6\" y=\"0\" width=\"2\" height=\"10\" rx=\"0\" />\n </g>\n </svg>`\n}\n\nexport function iconEdit () {\n return html`<svg class=\"UppyIcon\" width=\"28\" height=\"28\" viewBox=\"0 0 28 28\">\n <path d=\"M25.436 2.566a7.98 7.98 0 0 0-2.078-1.51C22.638.703 21.906.5 21.198.5a3 3 0 0 0-1.023.17 2.436 2.436 0 0 0-.893.562L2.292 18.217.5 27.5l9.28-1.796 16.99-16.99c.255-.254.444-.56.562-.888a3 3 0 0 0 .17-1.023c0-.708-.205-1.44-.555-2.16a8 8 0 0 0-1.51-2.077zM9.01 24.252l-4.313.834c0-.03.008-.06.012-.09.007-.944-.74-1.715-1.67-1.723-.04 0-.078.007-.118.01l.83-4.29L17.72 5.024l5.264 5.264L9.01 24.252zm16.84-16.96a.818.818 0 0 1-.194.31l-1.57 1.57-5.26-5.26 1.57-1.57a.82.82 0 0 1 .31-.194 1.45 1.45 0 0 1 .492-.074c.397 0 .917.126 1.468.397.55.27 1.13.678 1.656 1.21.53.53.94 1.11 1.208 1.655.272.55.397 1.07.393 1.468.004.193-.027.358-.074.488z\" />\n </svg>`\n}\n\nexport function localIcon () {\n return html`<svg class=\"UppyIcon\" width=\"27\" height=\"25\" viewBox=\"0 0 27 25\">\n <path d=\"M5.586 9.288a.313.313 0 0 0 .282.176h4.84v3.922c0 1.514 1.25 2.24 2.792 2.24 1.54 0 2.79-.726 2.79-2.24V9.464h4.84c.122 0 .23-.068.284-.176a.304.304 0 0 0-.046-.324L13.735.106a.316.316 0 0 0-.472 0l-7.63 8.857a.302.302 0 0 0-.047.325z\"/>\n <path d=\"M24.3 5.093c-.218-.76-.54-1.187-1.208-1.187h-4.856l1.018 1.18h3.948l2.043 11.038h-7.193v2.728H9.114v-2.725h-7.36l2.66-11.04h3.33l1.018-1.18H3.907c-.668 0-1.06.46-1.21 1.186L0 16.456v7.062C0 24.338.676 25 1.51 25h23.98c.833 0 1.51-.663 1.51-1.482v-7.062L24.3 5.093z\"/>\n </svg>`\n}\n\nexport function closeIcon () {\n return html`<svg class=\"UppyIcon\" width=\"14px\" height=\"14px\" viewBox=\"0 0 19 19\">\n <polygon points=\"17.3182539 17.2324466 9.93955339 9.85374611 9.586 9.50019272 9.23244661 9.85374611 1.85374611 17.2324466 2.56085289 17.2324466 1.93955339 16.6111471 1.93955865 17.3182486 9.31803946 9.93954813 9.67158232 9.58599474 9.31803419 9.23244661 1.93955339 1.85396581 1.93961588 2.56101008 2.56091538 1.93949089 1.85375137 1.93955865 9.23245187 9.31803946 9.586 9.67157706 9.93954813 9.31803946 17.3182486 1.93955865 16.6111471 1.93955339 17.2324466 2.56085289 17.2324466 1.85374611 9.85374611 9.23244661 9.50019272 9.586 9.85374611 9.93955339 17.2324466 17.3182539 17.9395534 16.6111471 10.5608529 9.23244661 10.5608529 9.93955339 17.9395534 2.56085289 18.2931068 2.2072995 17.9395534 1.85374611 17.3182539 1.23244661 16.9647058 0.878898482 16.6111524 1.23244135 9.23245187 8.61092215 9.93954813 8.61092215 2.56084763 1.23244135 2.20723173 0.87883598 1.85368362 1.23250911 1.23238412 1.85402831 0.878955712 2.20758169 1.23244661 2.56107259 8.61092741 9.93955339 8.61092215 9.23245187 1.23244135 16.6111524 0.878898482 16.9647058 1.23244661 17.3182539 1.85374611 17.9395534 2.2072995 18.2931068 2.56085289 17.9395534 9.93955339 10.5608529 9.23244661 10.5608529 16.6111471 17.9395534\"></polygon>\n </svg>`\n}\n\nexport function pluginIcon () {\n return html`<svg class=\"UppyIcon\" width=\"16px\" height=\"16px\" viewBox=\"0 0 32 30\">\n <path d=\"M6.6209894,11.1451162 C6.6823051,11.2751669 6.81374248,11.3572188 6.95463813,11.3572188 L12.6925482,11.3572188 L12.6925482,16.0630427 C12.6925482,17.880509 14.1726048,18.75 16.0000083,18.75 C17.8261072,18.75 19.3074684,17.8801847 19.3074684,16.0630427 L19.3074684,11.3572188 L25.0437478,11.3572188 C25.1875787,11.3572188 25.3164069,11.2751669 25.3790272,11.1451162 C25.4370814,11.0173358 25.4171865,10.8642587 25.3252129,10.7562615 L16.278212,0.127131837 C16.2093949,0.0463771751 16.1069846,0 15.9996822,0 C15.8910751,0 15.7886648,0.0463771751 15.718217,0.127131837 L6.6761083,10.7559371 C6.58250402,10.8642587 6.56293518,11.0173358 6.6209894,11.1451162 L6.6209894,11.1451162 Z\"/>\n <path d=\"M28.8008722,6.11142645 C28.5417891,5.19831555 28.1583331,4.6875 27.3684848,4.6875 L21.6124454,4.6875 L22.8190234,6.10307874 L27.4986725,6.10307874 L29.9195817,19.3486449 L21.3943891,19.3502502 L21.3943891,22.622552 L10.8023461,22.622552 L10.8023461,19.3524977 L2.07815702,19.3534609 L5.22979699,6.10307874 L9.17871529,6.10307874 L10.3840011,4.6875 L4.6308691,4.6875 C3.83940559,4.6875 3.37421888,5.2390909 3.19815864,6.11142645 L0,19.7470874 L0,28.2212959 C0,29.2043992 0.801477937,30 1.78870751,30 L30.2096773,30 C31.198199,30 32,29.2043992 32,28.2212959 L32,19.7470874 L28.8008722,6.11142645 L28.8008722,6.11142645 Z\"/>\n </svg>`\n}\n\nexport function checkIcon () {\n return html`<svg class=\"UppyIcon UppyIcon-check\" width=\"13px\" height=\"9px\" viewBox=\"0 0 13 9\">\n <polygon points=\"5 7.293 1.354 3.647 0.646 4.354 5 8.707 12.354 1.354 11.646 0.647\"></polygon>\n </svg>`\n}\n\nexport function iconAudio () {\n return html`<svg class=\"UppyIcon\" width=\"34\" height=\"91\" viewBox=\"0 0 34 91\">\n <path d=\"M22.366 43.134V29.33c5.892-6.588 10.986-14.507 10.986-22.183 0-4.114-2.986-7.1-7.1-7.1-3.914 0-7.1 3.186-7.1 7.1v20.936a92.562 92.562 0 0 1-5.728 5.677l-.384.348C4.643 41.762.428 45.604.428 54.802c0 8.866 7.214 16.08 16.08 16.08.902 0 1.784-.074 2.644-.216v11.26c0 2.702-2.198 4.9-4.9 4.9a4.855 4.855 0 0 1-2.95-1.015c2.364-.24 4.222-2.218 4.222-4.643a4.698 4.698 0 0 0-4.692-4.692 4.738 4.738 0 0 0-4.213 2.628c-.923 1.874-.56 4.386.277 6.228a7.82 7.82 0 0 0 .9 1.502 8.178 8.178 0 0 0 4.23 2.896c.723.207 1.474.31 2.226.31 4.474 0 8.113-3.64 8.113-8.113V69.78c5.98-2.345 10.225-8.176 10.225-14.977 0-5.975-4.464-10.876-10.224-11.67zm0-35.987a3.89 3.89 0 0 1 3.887-3.885c1.933 0 3.885 1.202 3.885 3.885 0 4.95-2.702 10.862-7.772 17.204V7.148zM16.51 67.67c-7.096 0-12.867-5.77-12.867-12.867 0-7.78 3.385-10.865 11.563-18.32l.384-.35c1.166-1.064 2.365-2.2 3.562-3.402v10.404c-5.758.793-10.223 5.695-10.223 11.67 0 3.935 1.948 7.603 5.212 9.81a1.605 1.605 0 1 0 1.8-2.66 8.622 8.622 0 0 1-3.8-7.15c0-4.2 3.025-7.7 7.01-8.456v21.05c-.853.178-1.736.272-2.642.272zm5.856-1.412v-19.91c3.985.756 7.01 4.253 7.01 8.455 0 4.987-2.85 9.32-7.01 11.455z\" />\n </svg>`\n}\n\nexport function iconFile () {\n return html`<svg class=\"UppyIcon\" width=\"44\" height=\"58\" viewBox=\"0 0 44 58\">\n <path d=\"M27.437.517a1 1 0 0 0-.094.03H4.25C2.037.548.217 2.368.217 4.58v48.405c0 2.212 1.82 4.03 4.03 4.03H39.03c2.21 0 4.03-1.818 4.03-4.03V15.61a1 1 0 0 0-.03-.28 1 1 0 0 0 0-.093 1 1 0 0 0-.03-.032 1 1 0 0 0 0-.03 1 1 0 0 0-.032-.063 1 1 0 0 0-.03-.063 1 1 0 0 0-.032 0 1 1 0 0 0-.03-.063 1 1 0 0 0-.032-.03 1 1 0 0 0-.03-.063 1 1 0 0 0-.063-.062l-14.593-14a1 1 0 0 0-.062-.062A1 1 0 0 0 28 .708a1 1 0 0 0-.374-.157 1 1 0 0 0-.156 0 1 1 0 0 0-.03-.03l-.003-.003zM4.25 2.547h22.218v9.97c0 2.21 1.82 4.03 4.03 4.03h10.564v36.438a2.02 2.02 0 0 1-2.032 2.032H4.25c-1.13 0-2.032-.9-2.032-2.032V4.58c0-1.13.902-2.032 2.03-2.032zm24.218 1.345l10.375 9.937.75.718H30.5c-1.13 0-2.032-.9-2.032-2.03V3.89z\" />\n </svg>`\n}\n\nexport function iconText () {\n return html`<svg class=\"UppyIcon\" width=\"50\" height=\"63\" viewBox=\"0 0 50 63\">\n <path d=\"M0 .5v15.617h6.25l1.7-5.1a6.242 6.242 0 0 1 5.933-4.267h8V50.5c0 3.45-2.8 6.25-6.25 6.25H12.5V63h25v-6.25h-3.133c-3.45 0-6.25-2.8-6.25-6.25V6.75h8a6.257 6.257 0 0 1 5.933 4.267l1.7 5.1H50V.5H0z\" />\n </svg>`\n}\n\n// export function removeIcon () {\n// return html `<svg class=\"UppyIcon\" width=\"22\" height=\"21\" viewBox=\"0 0 18 17\">\n// <ellipse cx=\"8.62\" cy=\"8.383\" rx=\"8.62\" ry=\"8.383\"/>\n// <path stroke=\"#FFF\" fill=\"#FFF\" d=\"M11 6.147L10.85 6 8.5 8.284 6.15 6 6 6.147 8.35 8.43 6 10.717l.15.146L8.5 8.578l2.35 2.284.15-.146L8.65 8.43z\"/>\n// </svg>`\n// }\n\nexport function uploadIcon () {\n return html`<svg class=\"UppyIcon\" width=\"37\" height=\"33\" viewBox=\"0 0 37 33\">\n <path d=\"M29.107 24.5c4.07 0 7.393-3.355 7.393-7.442 0-3.994-3.105-7.307-7.012-7.502l.468.415C29.02 4.52 24.34.5 18.886.5c-4.348 0-8.27 2.522-10.138 6.506l.446-.288C4.394 6.782.5 10.758.5 15.608c0 4.924 3.906 8.892 8.76 8.892h4.872c.635 0 1.095-.467 1.095-1.104 0-.636-.46-1.103-1.095-1.103H9.26c-3.644 0-6.63-3.035-6.63-6.744 0-3.71 2.926-6.685 6.57-6.685h.964l.14-.28.177-.362c1.477-3.4 4.744-5.576 8.347-5.576 4.58 0 8.45 3.452 9.01 8.072l.06.536.05.446h1.101c2.87 0 5.204 2.37 5.204 5.295s-2.333 5.296-5.204 5.296h-6.062c-.634 0-1.094.467-1.094 1.103 0 .637.46 1.104 1.094 1.104h6.12z\"/>\n <path d=\"M23.196 18.92l-4.828-5.258-.366-.4-.368.398-4.828 5.196a1.13 1.13 0 0 0 0 1.546c.428.46 1.11.46 1.537 0l3.45-3.71-.868-.34v15.03c0 .64.445 1.118 1.075 1.118.63 0 1.075-.48 1.075-1.12V16.35l-.867.34 3.45 3.712a1 1 0 0 0 .767.345 1 1 0 0 0 .77-.345c.416-.33.416-1.036 0-1.485v.003z\"/>\n </svg>`\n}\n\nexport function dashboardBgIcon () {\n return html`<svg class=\"UppyIcon\" width=\"48\" height=\"69\" viewBox=\"0 0 48 69\">\n <path d=\"M.5 1.5h5zM10.5 1.5h5zM20.5 1.5h5zM30.504 1.5h5zM45.5 11.5v5zM45.5 21.5v5zM45.5 31.5v5zM45.5 41.502v5zM45.5 51.502v5zM45.5 61.5v5zM45.5 66.502h-4.998zM35.503 66.502h-5zM25.5 66.502h-5zM15.5 66.502h-5zM5.5 66.502h-5zM.5 66.502v-5zM.5 56.502v-5zM.5 46.503V41.5zM.5 36.5v-5zM.5 26.5v-5zM.5 16.5v-5zM.5 6.5V1.498zM44.807 11H36V2.195z\"/>\n </svg>`\n}\n","import html from '../../core/html'\n\nexport default (props) => {\n const demoLink = props.demo ? html`<a onclick=${props.handleDemoAuth}>Proceed with Demo Account</a>` : null\n return html`\n <div class=\"UppyGoogleDrive-authenticate\">\n <h1>You need to authenticate with Google before selecting files.</h1>\n <a href=${props.link}>Authenticate</a>\n ${demoLink}\n </div>\n `\n}\n","import html from '../../core/html'\n\nexport default (props) => {\n return html`\n <div>\n <span>\n Something went wrong. Probably our fault. ${props.error}\n </span>\n </div>\n `\n}\n","import html from '../../core/html'\n\nexport default (props) => {\n return html`\n <svg class=\"UppyIcon UppyModalTab-icon\" width=\"18\" height=\"21\" viewBox=\"0 0 18 21\">\n <g>\n <path d=\"M14.8 16.9c1.9-1.7 3.2-4.1 3.2-6.9 0-5-4-9-9-9s-9 4-9 9c0 2.8 1.2 5.2 3.2 6.9C1.9 17.9.5 19.4 0 21h3c1-1.9 11-1.9 12 0h3c-.5-1.6-1.9-3.1-3.2-4.1zM9 4c3.3 0 6 2.7 6 6s-2.7 6-6 6-6-2.7-6-6 2.7-6 6-6z\"/>\n <path d=\"M9 14c2.2 0 4-1.8 4-4s-1.8-4-4-4-4 1.8-4 4 1.8 4 4 4zM8 8c.6 0 1 .4 1 1s-.4 1-1 1-1-.4-1-1c0-.5.4-1 1-1z\"/>\n </g>\n </svg>\n `\n}\n","import html from '../../core/html'\nimport CameraIcon from './CameraIcon'\n\nexport default (props) => {\n let video\n\n if (props.useTheFlash) {\n video = props.getSWFHTML()\n } else {\n video = html`<video class=\"UppyWebcam-video\" autoplay src=\"${props.src}\"></video>`\n }\n\n return html`\n <div class=\"UppyWebcam-container\" onload=${(el) => {\n props.focus()\n document.querySelector('.UppyWebcam-stopRecordBtn').focus()\n }}>\n <div class='UppyWebcam-videoContainer'>\n ${video}\n </div>\n <div class='UppyWebcam-buttonContainer'>\n <button class=\"UppyButton--circular UppyButton--red UppyButton--sizeM UppyWebcam-stopRecordBtn\"\n type=\"button\"\n title=\"Take a snapshot\"\n aria-label=\"Take a snapshot\"\n onclick=${props.onSnapshot}>\n ${CameraIcon()}\n </button>\n </div>\n <canvas class=\"UppyWebcam-canvas\" style=\"display: none;\"></canvas>\n </div>\n `\n}\n","import html from '../../core/html'\n\nexport default (props) => {\n return html`\n <div>\n <h1>Please allow access to your camera</h1>\n <span>You have been prompted to allow camera access from this site. In order to take pictures with your camera you must approve this request.</span>\n </div>\n `\n}\n","'use strict'\n\nconst _getName = (id) => {\n return id.split('-').map((s) => s.charAt(0).toUpperCase() + s.slice(1)).join(' ')\n}\n\nexport default class Provider {\n constructor (opts) {\n this.opts = opts\n this.provider = opts.provider\n this.id = this.provider\n this.name = this.opts.name || _getName(this.id)\n }\n\n auth () {\n return fetch(`${this.opts.host}/${this.provider}/authorize`, {\n method: 'get',\n credentials: 'include',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application.json'\n }\n })\n .then((res) => {\n return res.json()\n .then((payload) => {\n return payload.isAuthenticated\n })\n })\n }\n\n list (directory = 'root') {\n return fetch(`${this.opts.host}/${this.provider}/list/${directory}`, {\n method: 'get',\n credentials: 'include',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n }\n })\n .then((res) => res.json())\n }\n\n logout (redirect = location.href) {\n return fetch(`${this.opts.host}/${this.provider}/logout?redirect=${redirect}`, {\n method: 'get',\n credentials: 'include',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n }\n })\n }\n}\n","import html from '../../../core/html'\nimport Breadcrumbs from './Breadcrumbs'\nimport Table from './Table'\n\nexport default (props) => {\n let filteredFolders = props.folders\n let filteredFiles = props.files\n\n if (props.filterInput !== '') {\n filteredFolders = props.filterItems(props.folders)\n filteredFiles = props.filterItems(props.files)\n }\n\n return html`\n <div class=\"Browser\">\n <header>\n <input\n type=\"text\"\n class=\"Browser-search\"\n placeholder=\"Search Drive\"\n onkeyup=${props.filterQuery}\n value=${props.filterInput}/>\n </header>\n <div class=\"Browser-subHeader\">\n ${Breadcrumbs({\n getNextFolder: props.getNextFolder,\n directories: props.directories\n })}\n </div>\n <div class=\"Browser-body\">\n <main class=\"Browser-content\">\n ${Table({\n columns: [{\n name: 'Name',\n key: 'title'\n }],\n folders: filteredFolders,\n files: filteredFiles,\n activeRow: props.activeRow,\n sortByTitle: props.sortByTitle,\n sortByDate: props.sortByDate,\n handleRowClick: props.handleRowClick,\n handleFileDoubleClick: props.addFile,\n handleFolderDoubleClick: props.getNextFolder\n })}\n </main>\n </div>\n </div>\n `\n}\n","'use strict'\n\nimport dataURItoFile from '../utils/dataURItoFile'\n\n/**\n * Webcam Plugin\n */\nexport default class Webcam {\n constructor (opts = {}, params = {}) {\n this._userMedia\n this.userMedia = true\n this.protocol = location.protocol.match(/https/i) ? 'https' : 'http'\n\n // set default options\n const defaultOptions = {\n enableFlash: true\n }\n\n const defaultParams = {\n swfURL: 'webcam.swf',\n width: 400,\n height: 300,\n dest_width: 800, // size of captured image\n dest_height: 600, // these default to width/height\n image_format: 'jpeg', // image format (may be jpeg or png)\n jpeg_quality: 90, // jpeg image quality from 0 (worst) to 100 (best)\n enable_flash: true, // enable flash fallback,\n force_flash: false, // force flash mode,\n flip_horiz: false, // flip image horiz (mirror mode)\n fps: 30, // camera frames per second\n upload_name: 'webcam', // name of file in upload post data\n constraints: null, // custom user media constraints,\n flashNotDetectedText: 'ERROR: No Adobe Flash Player detected. Webcam.js relies on Flash for browsers that do not support getUserMedia (like yours).',\n noInterfaceFoundText: 'No supported webcam interface found.',\n unfreeze_snap: true // Whether to unfreeze the camera after snap (defaults to true)\n }\n\n this.params = Object.assign({}, defaultParams, params)\n\n // merge default options with the ones set by user\n this.opts = Object.assign({}, defaultOptions, opts)\n\n // Camera controls\n this.start = this.start.bind(this)\n this.init = this.init.bind(this)\n this.stop = this.stop.bind(this)\n // this.startRecording = this.startRecording.bind(this)\n // this.stopRecording = this.stopRecording.bind(this)\n this.takeSnapshot = this.takeSnapshot.bind(this)\n this.getImage = this.getImage.bind(this)\n this.getSWFHTML = this.getSWFHTML.bind(this)\n this.detectFlash = this.detectFlash.bind(this)\n this.getUserMedia = this.getUserMedia.bind(this)\n this.getMediaDevices = this.getMediaDevices.bind(this)\n }\n\n /**\n * Checks for getUserMedia support\n */\n init () {\n // initialize, check for getUserMedia support\n this.mediaDevices = this.getMediaDevices()\n\n this.userMedia = this.getUserMedia(this.mediaDevices)\n\n // Make sure media stream is closed when navigating away from page\n if (this.userMedia) {\n window.addEventListener('beforeunload', (event) => {\n this.reset()\n })\n }\n\n return {\n mediaDevices: this.mediaDevices,\n userMedia: this.userMedia\n }\n }\n\n // Setup getUserMedia, with polyfill for older browsers\n // Adapted from: https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia\n getMediaDevices () {\n return (navigator.mediaDevices && navigator.mediaDevices.getUserMedia)\n ? navigator.mediaDevices : ((navigator.mozGetUserMedia || navigator.webkitGetUserMedia) ? {\n getUserMedia: function (opts) {\n return new Promise(function (resolve, reject) {\n (navigator.mozGetUserMedia ||\n navigator.webkitGetUserMedia).call(navigator, opts, resolve, reject)\n })\n }\n } : null)\n }\n\n getUserMedia (mediaDevices) {\n const userMedia = true\n // Older versions of firefox (< 21) apparently claim support but user media does not actually work\n if (navigator.userAgent.match(/Firefox\\D+(\\d+)/)) {\n if (parseInt(RegExp.$1, 10) < 21) {\n return null\n }\n }\n\n window.URL = window.URL || window.webkitURL || window.mozURL || window.msURL\n return userMedia && !!mediaDevices && !!window.URL\n }\n\n start () {\n this.userMedia = this._userMedia === undefined ? this.userMedia : this._userMedia\n return new Promise((resolve, reject) => {\n if (this.userMedia) {\n // ask user for access to their camera\n this.mediaDevices.getUserMedia({\n audio: false,\n video: true\n })\n .then((stream) => {\n return resolve(stream)\n })\n .catch((err) => {\n return reject(err)\n })\n }\n })\n }\n\n /**\n * Detects if browser supports flash\n * Code snippet borrowed from: https://github.com/swfobject/swfobject\n *\n * @return {bool} flash supported\n */\n detectFlash () {\n const SHOCKWAVE_FLASH = 'Shockwave Flash'\n const SHOCKWAVE_FLASH_AX = 'ShockwaveFlash.ShockwaveFlash'\n const FLASH_MIME_TYPE = 'application/x-shockwave-flash'\n const win = window\n const nav = navigator\n let hasFlash = false\n\n if (typeof nav.plugins !== 'undefined' && typeof nav.plugins[SHOCKWAVE_FLASH] === 'object') {\n var desc = nav.plugins[SHOCKWAVE_FLASH].description\n if (desc && (typeof nav.mimeTypes !== 'undefined' && nav.mimeTypes[FLASH_MIME_TYPE] && nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) {\n hasFlash = true\n }\n } else if (typeof win.ActiveXObject !== 'undefined') {\n try {\n var ax = new win.ActiveXObject(SHOCKWAVE_FLASH_AX)\n if (ax) {\n var ver = ax.GetVariable('$version')\n if (ver) hasFlash = true\n }\n } catch (e) {}\n }\n\n return hasFlash\n }\n\n reset () {\n // shutdown camera, reset to potentially attach again\n if (this.preview_active) this.unfreeze()\n\n if (this.userMedia) {\n if (this.stream) {\n if (this.stream.getVideoTracks) {\n // get video track to call stop on it\n var tracks = this.stream.getVideoTracks()\n if (tracks && tracks[0] && tracks[0].stop) tracks[0].stop()\n } else if (this.stream.stop) {\n // deprecated, may be removed in future\n this.stream.stop()\n }\n }\n delete this.stream\n delete this.video\n }\n\n if (this.userMedia !== true) {\n // call for turn off camera in flash\n this.getMovie()._releaseCamera()\n }\n }\n\n getSWFHTML () {\n // Return HTML for embedding flash based webcam capture movie\n var swfURL = this.params.swfURL\n\n // make sure we aren't running locally (flash doesn't work)\n if (location.protocol.match(/file/)) {\n return '<h3 style=\"color:red\">ERROR: the Webcam.js Flash fallback does not work from local disk. Please run it from a web server.</h3>'\n }\n\n // make sure we have flash\n if (!this.detectFlash()) {\n return '<h3 style=\"color:red\">No flash</h3>'\n }\n\n // set default swfURL if not explicitly set\n if (!swfURL) {\n // find our script tag, and use that base URL\n var base_url = ''\n var scpts = document.getElementsByTagName('script')\n for (var idx = 0, len = scpts.length; idx < len; idx++) {\n var src = scpts[idx].getAttribute('src')\n if (src && src.match(/\\/webcam(\\.min)?\\.js/)) {\n base_url = src.replace(/\\/webcam(\\.min)?\\.js.*$/, '')\n idx = len\n }\n }\n if (base_url) swfURL = base_url + '/webcam.swf'\n else swfURL = 'webcam.swf'\n }\n\n // // if this is the user's first visit, set flashvar so flash privacy settings panel is shown first\n // if (window.localStorage && !localStorage.getItem('visited')) {\n // // this.params.new_user = 1\n // localStorage.setItem('visited', 1)\n // }\n // this.params.new_user = 1\n // construct flashvars string\n var flashvars = ''\n for (var key in this.params) {\n if (flashvars) flashvars += '&'\n flashvars += key + '=' + escape(this.params[key])\n }\n\n // construct object/embed tag\n\n return `<object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" type=\"application/x-shockwave-flash\" codebase=\"${this.protocol}://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0\" width=\"${this.params.width}\" height=\"${this.params.height}\" id=\"webcam_movie_obj\" align=\"middle\"><param name=\"wmode\" value=\"opaque\" /><param name=\"allowScriptAccess\" value=\"always\" /><param name=\"allowFullScreen\" value=\"false\" /><param name=\"movie\" value=\"${swfURL}\" /><param name=\"loop\" value=\"false\" /><param name=\"menu\" value=\"false\" /><param name=\"quality\" value=\"best\" /><param name=\"bgcolor\" value=\"#ffffff\" /><param name=\"flashvars\" value=\"${flashvars}\"/><embed id=\"webcam_movie_embed\" src=\"${swfURL}\" wmode=\"opaque\" loop=\"false\" menu=\"false\" quality=\"best\" bgcolor=\"#ffffff\" width=\"${this.params.width}\" height=\"${this.params.height}\" name=\"webcam_movie_embed\" align=\"middle\" allowScriptAccess=\"always\" allowFullScreen=\"false\" type=\"application/x-shockwave-flash\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" flashvars=\"${flashvars}\"></embed></object>`\n }\n\n getMovie () {\n // get reference to movie object/embed in DOM\n var movie = document.getElementById('webcam_movie_obj')\n if (!movie || !movie._snap) movie = document.getElementById('webcam_movie_embed')\n if (!movie) console.log('getMovie error')\n return movie\n }\n\n /**\n * Stops the webcam capture and video playback.\n */\n stop () {\n let { video, videoStream } = this\n\n this.updateState({\n cameraReady: false\n })\n\n if (videoStream) {\n if (videoStream.stop) {\n videoStream.stop()\n } else if (videoStream.msStop) {\n videoStream.msStop()\n }\n\n videoStream.onended = null\n videoStream = null\n }\n\n if (video) {\n video.onerror = null\n video.pause()\n\n if (video.mozSrcObject) {\n video.mozSrcObject = null\n }\n\n video.src = ''\n }\n\n this.video = document.querySelector('.UppyWebcam-video')\n this.canvas = document.querySelector('.UppyWebcam-canvas')\n }\n\n flashNotify (type, msg) {\n // receive notification from flash about event\n switch (type) {\n case 'flashLoadComplete':\n // movie loaded successfully\n break\n\n case 'cameraLive':\n // camera is live and ready to snap\n this.live = true\n break\n\n case 'error':\n // Flash error\n console.log('There was a flash error', msg)\n break\n\n default:\n // catch-all event, just in case\n console.log('webcam flash_notify: ' + type + ': ' + msg)\n break\n }\n }\n\n configure (panel) {\n // open flash configuration panel -- specify tab name:\n // 'camera', 'privacy', 'default', 'localStorage', 'microphone', 'settingsManager'\n if (!panel) panel = 'camera'\n this.getMovie()._configure(panel)\n }\n\n /**\n * Takes a snapshot and displays it in a canvas.\n */\n getImage (video, opts) {\n var canvas = document.createElement('canvas')\n canvas.width = video.videoWidth\n canvas.height = video.videoHeight\n canvas.getContext('2d').drawImage(video, 0, 0)\n\n var dataUrl = canvas.toDataURL(opts.mimeType)\n\n var file = dataURItoFile(dataUrl, {\n name: opts.name\n })\n\n return {\n dataUrl: dataUrl,\n data: file,\n type: opts.mimeType\n }\n }\n\n takeSnapshot (video, canvas) {\n const opts = {\n name: `webcam-${Date.now()}.jpg`,\n mimeType: 'image/jpeg'\n }\n\n const image = this.getImage(video, canvas, opts)\n\n const tagFile = {\n source: this.id,\n name: opts.name,\n data: image.data,\n type: opts.type\n }\n\n return tagFile\n }\n}\n","var bel = require('bel') // turns template tag into DOM elements\nvar morphdom = require('morphdom') // efficiently diffs + morphs two DOM elements\nvar defaultEvents = require('./update-events.js') // default events to be copied when dom elements update\n\nmodule.exports = bel\n\n// TODO move this + defaultEvents to a new module once we receive more feedback\nmodule.exports.update = function (fromNode, toNode, opts) {\n if (!opts) opts = {}\n if (opts.events !== false) {\n if (!opts.onBeforeElUpdated) opts.onBeforeElUpdated = copier\n }\n\n return morphdom(fromNode, toNode, opts)\n\n // morphdom only copies attributes. we decided we also wanted to copy events\n // that can be set via attributes\n function copier (f, t) {\n // copy events:\n var events = opts.events || defaultEvents\n for (var i = 0; i < events.length; i++) {\n var ev = events[i]\n if (t[ev]) { // if new element has a whitelisted attribute\n f[ev] = t[ev] // update existing element\n } else if (f[ev]) { // if existing element has it and new one doesnt\n f[ev] = undefined // remove it from existing element\n }\n }\n // copy values for form elements\n if ((f.nodeName === 'INPUT' && f.type !== 'file') || f.nodeName === 'TEXTAREA' || f.nodeName === 'SELECT') {\n if (t.getAttribute('value') === null) t.value = f.value\n }\n }\n}\n","import en_US from '../locales/en_US'\n\n/**\n * Translates strings with interpolation & pluralization support.Extensible with custom dictionaries\n * and pluralization functions.\n *\n * Borrows heavily from and inspired by Polyglot https://github.com/airbnb/polyglot.js,\n * basically a stripped-down version of it. Differences: pluralization functions are not hardcoded\n * and can be easily added among with dictionaries, nested objects are used for pluralization\n * as opposed to `||||` delimeter\n *\n * Usage example: `translator.translate('files_chosen', {smart_count: 3})`\n *\n * @param {object} opts\n */\nexport default class Translator {\n constructor (opts) {\n const defaultOptions = {\n locales: en_US\n }\n this.opts = Object.assign({}, defaultOptions, opts)\n this.locales = this.opts.locales\n this.locales.strings = Object.assign({}, en_US.strings, this.opts.locales.strings)\n }\n\n/**\n * Takes a string with placeholder variables like `%{smart_count} file selected`\n * and replaces it with values from options `{smart_count: 5}`\n *\n * @license https://github.com/airbnb/polyglot.js/blob/master/LICENSE\n * taken from https://github.com/airbnb/polyglot.js/blob/master/lib/polyglot.js#L299\n *\n * @param {string} phrase that needs interpolation, with placeholders\n * @param {object} options with values that will be used to replace placeholders\n * @return {string} interpolated\n */\n interpolate (phrase, options) {\n const replace = String.prototype.replace\n const dollarRegex = /\\$/g\n const dollarBillsYall = '$$$$'\n\n for (let arg in options) {\n if (arg !== '_' && options.hasOwnProperty(arg)) {\n // Ensure replacement value is escaped to prevent special $-prefixed\n // regex replace tokens. the \"$$$$\" is needed because each \"$\" needs to\n // be escaped with \"$\" itself, and we need two in the resulting output.\n var replacement = options[arg]\n if (typeof replacement === 'string') {\n replacement = replace.call(options[arg], dollarRegex, dollarBillsYall)\n }\n // We create a new `RegExp` each time instead of using a more-efficient\n // string replace so that the same argument can be replaced multiple times\n // in the same phrase.\n phrase = replace.call(phrase, new RegExp('%\\\\{' + arg + '\\\\}', 'g'), replacement)\n }\n }\n return phrase\n }\n\n/**\n * Public translate method\n *\n * @param {string} key\n * @param {object} options with values that will be used later to replace placeholders in string\n * @return {string} translated (and interpolated)\n */\n translate (key, options) {\n if (options && options.smart_count) {\n var plural = this.locales.pluralize(options.smart_count)\n return this.interpolate(this.opts.locales.strings[key][plural], options)\n }\n\n return this.interpolate(this.opts.locales.strings[key], options)\n }\n}\n","const en_US = {}\n\nen_US.strings = {\n chooseFile: 'Choose a file',\n youHaveChosen: 'You have chosen: %{fileName}',\n orDragDrop: 'or drag it here',\n filesChosen: {\n 0: '%{smart_count} file selected',\n 1: '%{smart_count} files selected'\n },\n filesUploaded: {\n 0: '%{smart_count} file uploaded',\n 1: '%{smart_count} files uploaded'\n },\n files: {\n 0: '%{smart_count} file',\n 1: '%{smart_count} files'\n },\n uploadFiles: {\n 0: 'Upload %{smart_count} file',\n 1: 'Upload %{smart_count} files'\n },\n selectToUpload: 'Select files to upload',\n closeModal: 'Close Modal',\n upload: 'Upload',\n importFrom: 'Import files from',\n dashboardWindowTitle: 'Uppy Dashboard Window (Press escape to close)',\n dashboardTitle: 'Uppy Dashboard',\n copyLinkToClipboardSuccess: 'Link copied to clipboard.',\n copyLinkToClipboardFallback: 'Copy the URL below',\n done: 'Done',\n localDisk: 'Local Disk',\n dropPasteImport: 'Drop files here, paste or import from one of the locations above',\n fileProgress: 'File progress: upload speed and ETA',\n numberOfSelectedFiles: 'Number of selected files',\n uploadAllNewFiles: 'Upload all new files'\n}\n\nen_US.pluralize = function (n) {\n if (n === 1) {\n return 0\n }\n return 1\n}\n\nif (typeof window !== 'undefined' && typeof window.Uppy !== 'undefined') {\n window.Uppy.locales.en_US = en_US\n}\n\nexport default en_US\n","// Generated by Babel\n\"use strict\";\n\nvar _upload = require(\"./upload\");\n\nvar _upload2 = _interopRequireDefault(_upload);\n\nvar _storage = require(\"./node/storage\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/* global window */\nvar defaultOptions = _upload2.default.defaultOptions;\n\n\nif (typeof window !== \"undefined\") {\n // Browser environment using XMLHttpRequest\n var _window = window;\n var XMLHttpRequest = _window.XMLHttpRequest;\n var Blob = _window.Blob;\n\n\n var isSupported = XMLHttpRequest && Blob && typeof Blob.prototype.slice === \"function\";\n} else {\n // Node.js environment using http module\n var isSupported = true;\n}\n\n// The usage of the commonjs exporting syntax instead of the new ECMAScript\n// one is actually inteded and prevents weird behaviour if we are trying to\n// import this module in another module using Babel.\nmodule.exports = {\n Upload: _upload2.default,\n isSupported: isSupported,\n canStoreURLs: _storage.canStoreURLs,\n defaultOptions: defaultOptions\n};","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.2.1\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n\n if (child[lib$es6$promise$$internal$$PROMISE_ID] === undefined) {\n lib$es6$promise$$internal$$makePromise(child);\n }\n\n var state = parent._state;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, parent._result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n var lib$es6$promise$$internal$$PROMISE_ID = Math.random().toString(36).substring(16);\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n var lib$es6$promise$$internal$$id = 0;\n function lib$es6$promise$$internal$$nextId() {\n return lib$es6$promise$$internal$$id++;\n }\n\n function lib$es6$promise$$internal$$makePromise(promise) {\n promise[lib$es6$promise$$internal$$PROMISE_ID] = lib$es6$promise$$internal$$id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n return new Constructor(function(resolve, reject) {\n reject(new TypeError('You must pass an array to race.'));\n });\n } else {\n return new Constructor(function(resolve, reject) {\n var length = entries.length;\n for (var i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this[lib$es6$promise$$internal$$PROMISE_ID] = lib$es6$promise$$internal$$nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!this.promise[lib$es6$promise$$internal$$PROMISE_ID]) {\n lib$es6$promise$$internal$$makePromise(this.promise);\n }\n\n if (lib$es6$promise$utils$$isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, lib$es6$promise$enumerator$$validationError());\n }\n }\n\n function lib$es6$promise$enumerator$$validationError() {\n return new Error('Array Methods must be provided an Array');\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","import html from '../../core/html'\nimport FileItem from './FileItem'\nimport { dashboardBgIcon } from './icons'\n\nexport default (props) => {\n return html`<ul class=\"UppyDashboard-files\n ${props.totalFileCount === 0 ? 'UppyDashboard-files--noFiles' : ''}\">\n ${props.totalFileCount === 0\n ? html`<div class=\"UppyDashboard-bgIcon\">\n ${dashboardBgIcon()}\n <h4 class=\"UppyDashboard-dropFilesTitle\">${props.i18n('dropPasteImport')}</h4>\n </div>`\n : null\n }\n ${Object.keys(props.files).map((fileID) => {\n return FileItem({\n file: props.files[fileID],\n showFileCard: props.showFileCard,\n showProgressDetails: props.showProgressDetails,\n info: props.info,\n log: props.log,\n i18n: props.i18n,\n removeFile: props.removeFile,\n pauseUpload: props.pauseUpload\n })\n })}\n </ul>`\n}\n","import html from '../../core/html'\nimport { localIcon } from './icons'\n\nexport default (props) => {\n return html`<div class=\"UppyDashboardTabs\">\n <nav>\n <ul class=\"UppyDashboardTabs-list\" role=\"tablist\">\n <li class=\"UppyDashboardTab\">\n <button class=\"UppyDashboardTab-btn UppyDashboard-focus\"\n role=\"tab\"\n tabindex=\"0\"\n onclick=${(ev) => {\n const input = document.querySelector(`${props.container} .UppyDashboard-input`)\n input.click()\n }}>\n ${localIcon()}\n <h5 class=\"UppyDashboardTab-name\">${props.i18n('localDisk')}</h5>\n </button>\n <input class=\"UppyDashboard-input\" type=\"file\" name=\"files[]\" multiple=\"true\"\n onchange=${props.handleInputChange} />\n </li>\n ${props.acquirers.map((target) => {\n return html`<li class=\"UppyDashboardTab\">\n <button class=\"UppyDashboardTab-btn\"\n role=\"tab\"\n tabindex=\"0\"\n aria-controls=\"${props.panelSelectorPrefix}--${target.id}\"\n aria-selected=\"${target.isHidden ? 'false' : 'true'}\"\n onclick=${() => props.showPanel(target.id)}>\n ${target.icon}\n <h5 class=\"UppyDashboardTab-name\">${target.name}</h5>\n </button>\n </li>`\n })}\n </ul>\n </nav>\n </div>`\n}\n","import html from '../../core/html'\nimport { iconText, iconFile, iconAudio, checkIcon } from './icons'\n\nfunction getIconByMime (fileTypeGeneral) {\n switch (fileTypeGeneral) {\n case 'text':\n return iconText()\n case 'audio':\n return iconAudio()\n default:\n return iconFile()\n }\n}\n\nexport default function fileCard (props) {\n const file = props.fileCardFor ? props.files[props.fileCardFor] : false\n const meta = {}\n\n function tempStoreMeta (ev) {\n const value = ev.target.value\n const name = ev.target.attributes.name.value\n meta[name] = value\n }\n\n function renderMetaFields (file) {\n const metaFields = props.metaFields || []\n return metaFields.map((field) => {\n return html`<fieldset class=\"UppyDashboardFileCard-fieldset\">\n <label class=\"UppyDashboardFileCard-label\">${field.name}</label>\n <input class=\"UppyDashboardFileCard-input\"\n name=\"${field.id}\"\n type=\"text\"\n value=\"${file.meta[field.id]}\"\n placeholder=\"${field.placeholder || ''}\"\n onkeyup=${tempStoreMeta} /></fieldset>`\n })\n }\n\n return html`<div class=\"UppyDashboardFileCard\" aria-hidden=\"${!props.fileCardFor}\">\n <div class=\"UppyDashboardContent-bar\">\n <h2 class=\"UppyDashboardContent-title\">Editing <span class=\"UppyDashboardContent-titleFile\">${file.meta ? file.meta.name : file.name}</span></h2>\n <button class=\"UppyDashboardContent-back\" title=\"Finish editing file\"\n onclick=${() => props.done(meta, file.id)}>Done</button>\n </div>\n ${props.fileCardFor\n ? html`<div class=\"UppyDashboardFileCard-inner\">\n <div class=\"UppyDashboardFileCard-preview\">\n ${file.preview\n ? html`<img alt=\"${file.name}\" src=\"${file.preview}\">`\n : html`<div class=\"UppyDashboardItem-previewIcon\">${getIconByMime(file.type.general)}</div>`\n }\n </div>\n <div class=\"UppyDashboardFileCard-info\">\n <fieldset class=\"UppyDashboardFileCard-fieldset\">\n <label class=\"UppyDashboardFileCard-label\">Name</label>\n <input class=\"UppyDashboardFileCard-input\" name=\"name\" type=\"text\" value=\"${file.meta.name}\"\n onkeyup=${tempStoreMeta} />\n </fieldset>\n ${renderMetaFields(file)}\n </div>\n </div>`\n : null\n }\n <button class=\"UppyButton--circular UppyButton--blue UppyButton--sizeM UppyDashboardFileCard-done\" type=\"button\"\n title=\"Finish editing file\" onclick=${() => props.done(meta, file.id)}>${checkIcon()}</button>\n </div>`\n}\n","import html from '../../core/html'\nimport { uploadIcon } from './icons'\n\nexport default (props) => {\n props = props || {}\n\n return html`<button class=\"UppyButton--circular\n UppyButton--blue\n UppyButton--sizeM\n UppyDashboard-upload\"\n type=\"button\"\n title=\"${props.i18n('uploadAllNewFiles')}\"\n aria-label=\"${props.i18n('uploadAllNewFiles')}\"\n onclick=${props.startUpload}>\n ${uploadIcon()}\n <sup class=\"UppyDashboard-uploadCount\"\n title=\"${props.i18n('numberOfSelectedFiles')}\"\n aria-label=\"${props.i18n('numberOfSelectedFiles')}\">\n ${props.newFileCount}</sup>\n </button>\n `\n}\n","import html from '../../core/html'\n\nexport default (props) => {\n props = props || {}\n\n const togglePauseResume = () => {\n if (props.isAllComplete) return\n\n if (props.isAllPaused) {\n return props.resumeAll()\n }\n\n return props.pauseAll()\n }\n\n return html`\n <div class=\"UppyDashboard-actionsItem\">\n <button class=\"UppyTotalProgress\n ${props.isAllPaused ? 'UppyTotalProgress--is-paused' : ''}\n ${props.isAllComplete ? 'UppyTotalProgress--is-complete' : ''}\"\n onclick=${togglePauseResume}>\n <svg width=\"70\" height=\"70\" viewBox=\"0 0 36 36\" class=\"UppyIcon\">\n <g class=\"progress-group\">\n <circle r=\"15\" cx=\"18\" cy=\"18\" stroke-width=\"2\" fill=\"none\" class=\"bg\"/>\n <circle r=\"15\" cx=\"18\" cy=\"18\" transform=\"rotate(-90, 18, 18)\" stroke-width=\"2\" fill=\"none\" stroke-dasharray=\"100\" stroke-dashoffset=\"${100 - props.totalProgress || 100}\" class=\"progress\"/>\n </g>\n <polygon transform=\"translate(3, 3)\" points=\"12 20 12 10 20 15\" class=\"play\"/>\n <g transform=\"translate(14.5, 13)\" class=\"pause\">\n <rect x=\"0\" y=\"0\" width=\"2\" height=\"10\" rx=\"0\" />\n <rect x=\"5\" y=\"0\" width=\"2\" height=\"10\" rx=\"0\" />\n </g>\n <polygon transform=\"translate(2, 3)\" points=\"14 22.5 7 15.2457065 8.99985857 13.1732815 14 18.3547104 22.9729883 9 25 11.1005634\" class=\"check\"/>\n </svg>\n </button>\n </div>`\n}\n","import html from '../../core/html'\n// import { makeCachingFunction } from '../../core/Utils'\n\n// let cachedElement = makeCachingFunction()\n\nconst togglePauseResume = (props) => {\n if (props.isAllComplete) return\n\n if (props.isAllPaused) {\n return props.resumeAll()\n }\n\n return props.pauseAll()\n}\n\nexport default (props) => {\n props = props || {}\n\n let statusBar = html`\n <div class=\"UppyDashboard-statusBar\" onclick=${() => togglePauseResume(props)}>\n ${props.isAllPaused\n ? html`<svg class=\"UppyIcon UppyDashboard-statusBarAction\" width=\"15\" height=\"17\" viewBox=\"0 0 11 13\">\n <path d=\"M1.26 12.534a.67.67 0 0 1-.674.012.67.67 0 0 1-.336-.583v-11C.25.724.38.5.586.382a.658.658 0 0 1 .673.012l9.165 5.5a.66.66 0 0 1 .325.57.66.66 0 0 1-.325.573l-9.166 5.5z\" />\n </svg>`\n : html`<svg class=\"UppyIcon UppyDashboard-statusBarAction\" width=\"16\" height=\"17\" viewBox=\"0 0 12 13\">\n <path d=\"M4.888.81v11.38c0 .446-.324.81-.722.81H2.722C2.324 13 2 12.636 2 12.19V.81c0-.446.324-.81.722-.81h1.444c.398 0 .722.364.722.81zM9.888.81v11.38c0 .446-.324.81-.722.81H7.722C7.324 13 7 12.636 7 12.19V.81c0-.446.324-.81.722-.81h1.444c.398 0 .722.364.722.81z\"/>\n </svg>`\n }\n <div class=\"UppyDashboard-statusBarProgress\" style=\"width: ${props.totalProgress}%\"></div>\n <div class=\"UppyDashboard-statusBarText\">\n ${!props.isAllComplete\n ? !props.isAllPaused\n ? `Uploading... ${props.complete} / ${props.inProgress}・${props.totalProgress || 0}%・${props.totalETA}・↑ ${props.totalSpeed}/s`\n : `Paused・${props.totalProgress}%`\n : null\n }\n </div>\n </div>\n `\n\n return statusBar\n\n // return cachedElement(statusBar, 1000)\n}\n","import html from '../../core/html'\n\nexport default (props) => {\n return html`<svg class=\"UppyIcon\" width=\"100\" height=\"77\" viewBox=\"0 0 100 77\">\n <g>\n <path d=\"M50 32c-7.168 0-13 5.832-13 13s5.832 13 13 13 13-5.832 13-13-5.832-13-13-13z\"/>\n <path d=\"M87 13H72c0-7.18-5.82-13-13-13H41c-7.18 0-13 5.82-13 13H13C5.82 13 0 18.82 0 26v38c0 7.18 5.82 13 13 13h74c7.18 0 13-5.82 13-13V26c0-7.18-5.82-13-13-13zM50 68c-12.683 0-23-10.318-23-23s10.317-23 23-23 23 10.318 23 23-10.317 23-23 23z\"/>\n <g>\n </svg>`\n}\n","function dataURItoBlob (dataURI, opts, toFile) {\n // get the base64 data\n var data = dataURI.split(',')[1]\n\n // user may provide mime type, if not get it from data URI\n var mimeType = opts.mimeType || dataURI.split(',')[0].split(':')[1].split(';')[0]\n\n // default to plain/text if data URI has no mimeType\n if (mimeType == null) {\n mimeType = 'plain/text'\n }\n\n var binary = atob(data)\n var array = []\n for (var i = 0; i < binary.length; i++) {\n array.push(binary.charCodeAt(i))\n }\n\n // Convert to a File?\n if (toFile) {\n return new File([new Uint8Array(array)], opts.name || '', {type: mimeType})\n }\n\n return new Blob([new Uint8Array(array)], {type: mimeType})\n}\n\nexport default function (dataURI, opts) {\n return dataURItoBlob(dataURI, opts, true)\n}\n","import html from '../../../core/html'\nimport Breadcrumb from './Breadcrumb'\n\nexport default (props) => {\n return html`\n <ul class=\"UppyGoogleDrive-breadcrumbs\">\n ${\n props.directories.map((directory) => {\n return Breadcrumb({\n getNextFolder: () => props.getNextFolder(directory.id, directory.title),\n title: directory.title\n })\n })\n }\n </ul>\n `\n}\n","import html from '../../../core/html'\nimport Row from './TableRow'\n\nexport default (props) => {\n const headers = props.columns.map((column) => {\n return html`\n <th class=\"BrowserTable-headerColumn BrowserTable-column\" onclick=${props.sortByTitle}>\n ${column.name}\n </th>\n `\n })\n\n return html`\n <table class=\"BrowserTable\">\n <thead class=\"BrowserTable-header\">\n <tr>\n ${headers}\n </tr>\n </thead>\n <tbody>\n ${props.folders.map((folder) => {\n return Row({\n title: folder.title,\n active: props.activeRow === folder.id,\n iconLink: folder.iconLink,\n modifiedByMeDate: folder.modifiedByMeDate,\n handleClick: () => props.handleRowClick(folder.id),\n handleDoubleClick: () => props.handleFolderDoubleClick(folder.id, folder.title),\n columns: props.columns\n })\n })}\n ${props.files.map((file) => {\n return Row({\n title: file.title,\n active: props.activeRow === file.id,\n iconLink: file.iconLink,\n modifiedByMeDate: file.modifiedByMeDate,\n handleClick: () => props.handleRowClick(file.id),\n handleDoubleClick: () => props.handleFileDoubleClick(file),\n columns: props.columns,\n owner: 'Joe Mama'\n })\n })}\n </tbody>\n </table>\n `\n}\n","module.exports = dragDrop\n\nvar flatten = require('flatten')\nvar parallel = require('run-parallel')\n\nfunction dragDrop (elem, listeners) {\n if (typeof elem === 'string') {\n elem = window.document.querySelector(elem)\n }\n\n if (typeof listeners === 'function') {\n listeners = { onDrop: listeners }\n }\n\n var timeout\n\n elem.addEventListener('dragenter', stopEvent, false)\n elem.addEventListener('dragover', onDragOver, false)\n elem.addEventListener('dragleave', onDragLeave, false)\n elem.addEventListener('drop', onDrop, false)\n\n // Function to remove drag-drop listeners\n return function remove () {\n removeDragClass()\n elem.removeEventListener('dragenter', stopEvent, false)\n elem.removeEventListener('dragover', onDragOver, false)\n elem.removeEventListener('dragleave', onDragLeave, false)\n elem.removeEventListener('drop', onDrop, false)\n }\n\n function onDragOver (e) {\n e.stopPropagation()\n e.preventDefault()\n if (e.dataTransfer.items) {\n // Only add \"drag\" class when `items` contains a file\n var items = toArray(e.dataTransfer.items).filter(function (item) {\n return item.kind === 'file'\n })\n if (items.length === 0) return\n }\n\n elem.classList.add('drag')\n clearTimeout(timeout)\n\n if (listeners.onDragOver) {\n listeners.onDragOver(e)\n }\n\n e.dataTransfer.dropEffect = 'copy'\n return false\n }\n\n function onDragLeave (e) {\n e.stopPropagation()\n e.preventDefault()\n\n if (listeners.onDragLeave) {\n listeners.onDragLeave(e)\n }\n\n clearTimeout(timeout)\n timeout = setTimeout(removeDragClass, 50)\n\n return false\n }\n\n function onDrop (e) {\n e.stopPropagation()\n e.preventDefault()\n\n if (listeners.onDragLeave) {\n listeners.onDragLeave(e)\n }\n\n clearTimeout(timeout)\n removeDragClass()\n\n var pos = {\n x: e.clientX,\n y: e.clientY\n }\n\n if (e.dataTransfer.items) {\n // Handle directories in Chrome using the proprietary FileSystem API\n var items = toArray(e.dataTransfer.items).filter(function (item) {\n return item.kind === 'file'\n })\n\n if (items.length === 0) return\n\n parallel(items.map(function (item) {\n return function (cb) {\n processEntry(item.webkitGetAsEntry(), cb)\n }\n }), function (err, results) {\n // This catches permission errors with file:// in Chrome. This should never\n // throw in production code, so the user does not need to use try-catch.\n if (err) throw err\n if (listeners.onDrop) {\n listeners.onDrop(flatten(results), pos)\n }\n })\n } else {\n var files = toArray(e.dataTransfer.files)\n\n if (files.length === 0) return\n\n files.forEach(function (file) {\n file.fullPath = '/' + file.name\n })\n\n if (listeners.onDrop) {\n listeners.onDrop(files, pos)\n }\n }\n\n return false\n }\n\n function removeDragClass () {\n elem.classList.remove('drag')\n }\n}\n\nfunction stopEvent (e) {\n e.stopPropagation()\n e.preventDefault()\n return false\n}\n\nfunction processEntry (entry, cb) {\n var entries = []\n\n if (entry.isFile) {\n entry.file(function (file) {\n file.fullPath = entry.fullPath // preserve pathing for consumer\n cb(null, file)\n }, function (err) {\n cb(err)\n })\n } else if (entry.isDirectory) {\n var reader = entry.createReader()\n readEntries()\n }\n\n function readEntries () {\n reader.readEntries(function (entries_) {\n if (entries_.length > 0) {\n entries = entries.concat(toArray(entries_))\n readEntries() // continue reading entries until `readEntries` returns no more\n } else {\n doneEntries()\n }\n })\n }\n\n function doneEntries () {\n parallel(entries.map(function (entry) {\n return function (cb) {\n processEntry(entry, cb)\n }\n }), cb)\n }\n}\n\nfunction toArray (list) {\n return Array.prototype.slice.call(list || [], 0)\n}\n","(function(self) {\n 'use strict';\n\n if (self.fetch) {\n return\n }\n\n var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob: 'FileReader' in self && 'Blob' in self && (function() {\n try {\n new Blob()\n return true\n } catch(e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift()\n return {done: value === undefined, value: value}\n }\n }\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n }\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var list = this.map[name]\n if (!list) {\n list = []\n this.map[name] = list\n }\n list.push(value)\n }\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n }\n\n Headers.prototype.get = function(name) {\n var values = this.map[normalizeName(name)]\n return values ? values[0] : null\n }\n\n Headers.prototype.getAll = function(name) {\n return this.map[normalizeName(name)] || []\n }\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n }\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = [normalizeValue(value)]\n }\n\n Headers.prototype.forEach = function(callback, thisArg) {\n Object.getOwnPropertyNames(this.map).forEach(function(name) {\n this.map[name].forEach(function(value) {\n callback.call(thisArg, value, name, this)\n }, this)\n }, this)\n }\n\n Headers.prototype.keys = function() {\n var items = []\n this.forEach(function(value, name) { items.push(name) })\n return iteratorFor(items)\n }\n\n Headers.prototype.values = function() {\n var items = []\n this.forEach(function(value) { items.push(value) })\n return iteratorFor(items)\n }\n\n Headers.prototype.entries = function() {\n var items = []\n this.forEach(function(value, name) { items.push([name, value]) })\n return iteratorFor(items)\n }\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n reader.readAsArrayBuffer(blob)\n return fileReaderReady(reader)\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader()\n reader.readAsText(blob)\n return fileReaderReady(reader)\n }\n\n function Body() {\n this.bodyUsed = false\n\n this._initBody = function(body) {\n this._bodyInit = body\n if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString()\n } else if (!body) {\n this._bodyText = ''\n } else if (support.arrayBuffer && ArrayBuffer.prototype.isPrototypeOf(body)) {\n // Only support ArrayBuffers for POST method.\n // Receiving ArrayBuffers happens via Blobs, instead.\n } else {\n throw new Error('unsupported BodyInit type')\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8')\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type)\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n }\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n } else {\n this.text = function() {\n var rejected = consumed(this)\n return rejected ? rejected : Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return (methods.indexOf(upcased) > -1) ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {}\n var body = options.body\n if (Request.prototype.isPrototypeOf(input)) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n if (!body) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = input\n }\n\n this.credentials = options.credentials || this.credentials || 'omit'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n }\n\n Request.prototype.clone = function() {\n return new Request(this)\n }\n\n function decode(body) {\n var form = new FormData()\n body.trim().split('&').forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n }\n\n function headers(xhr) {\n var head = new Headers()\n var pairs = (xhr.getAllResponseHeaders() || '').trim().split('\\n')\n pairs.forEach(function(header) {\n var split = header.trim().split(':')\n var key = split.shift().trim()\n var value = split.join(':').trim()\n head.append(key, value)\n })\n return head\n }\n\n Body.call(Request.prototype)\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {}\n }\n\n this.type = 'default'\n this.status = options.status\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = options.statusText\n this.headers = options.headers instanceof Headers ? options.headers : new Headers(options.headers)\n this.url = options.url || ''\n this._initBody(bodyInit)\n }\n\n Body.call(Response.prototype)\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n }\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''})\n response.type = 'error'\n return response\n }\n\n var redirectStatuses = [301, 302, 303, 307, 308]\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n }\n\n self.Headers = Headers\n self.Request = Request\n self.Response = Response\n\n self.fetch = function(input, init) {\n return new Promise(function(resolve, reject) {\n var request\n if (Request.prototype.isPrototypeOf(input) && !init) {\n request = input\n } else {\n request = new Request(input, init)\n }\n\n var xhr = new XMLHttpRequest()\n\n function responseURL() {\n if ('responseURL' in xhr) {\n return xhr.responseURL\n }\n\n // Avoid security warnings on getResponseHeader when not allowed by CORS\n if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {\n return xhr.getResponseHeader('X-Request-URL')\n }\n\n return\n }\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: headers(xhr),\n url: responseURL()\n }\n var body = 'response' in xhr ? xhr.response : xhr.responseText\n resolve(new Response(body, options))\n }\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.open(request.method, request.url, true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob'\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n }\n self.fetch.polyfill = true\n})(typeof self !== 'undefined' ? self : this);\n","'use strict';\nvar numberIsNan = require('number-is-nan');\n\nmodule.exports = function (num) {\n\tif (typeof num !== 'number' || numberIsNan(num)) {\n\t\tthrow new TypeError('Expected a number, got ' + typeof num);\n\t}\n\n\tvar exponent;\n\tvar unit;\n\tvar neg = num < 0;\n\tvar units = ['B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n\tif (neg) {\n\t\tnum = -num;\n\t}\n\n\tif (num < 1) {\n\t\treturn (neg ? '-' : '') + num + ' B';\n\t}\n\n\texponent = Math.min(Math.floor(Math.log(num) / Math.log(1000)), units.length - 1);\n\tnum = Number((num / Math.pow(1000, exponent)).toFixed(2));\n\tunit = units[exponent];\n\n\treturn (neg ? '-' : '') + num + ' ' + unit;\n};\n","module.exports = [\n // attribute events (can be set with attributes)\n 'onclick',\n 'ondblclick',\n 'onmousedown',\n 'onmouseup',\n 'onmouseover',\n 'onmousemove',\n 'onmouseout',\n 'ondragstart',\n 'ondrag',\n 'ondragenter',\n 'ondragleave',\n 'ondragover',\n 'ondrop',\n 'ondragend',\n 'onkeydown',\n 'onkeypress',\n 'onkeyup',\n 'onunload',\n 'onabort',\n 'onerror',\n 'onresize',\n 'onscroll',\n 'onselect',\n 'onchange',\n 'onsubmit',\n 'onreset',\n 'onfocus',\n 'onblur',\n 'oninput',\n // other common events\n 'oncontextmenu',\n 'onfocusin',\n 'onfocusout'\n]\n","// Generated by Babel\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /* global window */\n\n\n// We import the files used inside the Node environment which are rewritten\n// for browsers using the rules defined in the package.json\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _fingerprint = require(\"./fingerprint\");\n\nvar _fingerprint2 = _interopRequireDefault(_fingerprint);\n\nvar _error = require(\"./error\");\n\nvar _error2 = _interopRequireDefault(_error);\n\nvar _extend = require(\"extend\");\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _request = require(\"./node/request\");\n\nvar _source = require(\"./node/source\");\n\nvar _base = require(\"./node/base64\");\n\nvar Base64 = _interopRequireWildcard(_base);\n\nvar _storage = require(\"./node/storage\");\n\nvar Storage = _interopRequireWildcard(_storage);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar defaultOptions = {\n endpoint: \"\",\n fingerprint: _fingerprint2.default,\n resume: true,\n onProgress: null,\n onChunkComplete: null,\n onSuccess: null,\n onError: null,\n headers: {},\n chunkSize: Infinity,\n withCredentials: false,\n uploadUrl: null,\n uploadSize: null,\n overridePatchMethod: false,\n retryDelays: null\n};\n\nvar Upload = function () {\n function Upload(file, options) {\n _classCallCheck(this, Upload);\n\n this.options = (0, _extend2.default)(true, {}, defaultOptions, options);\n\n // The underlying File/Blob object\n this.file = file;\n\n // The URL against which the file will be uploaded\n this.url = null;\n\n // The underlying XHR object for the current PATCH request\n this._xhr = null;\n\n // The fingerpinrt for the current file (set after start())\n this._fingerprint = null;\n\n // The offset used in the current PATCH request\n this._offset = null;\n\n // True if the current PATCH request has been aborted\n this._aborted = false;\n\n // The file's size in bytes\n this._size = null;\n\n // The Source object which will wrap around the given file and provides us\n // with a unified interface for getting its size and slice chunks from its\n // content allowing us to easily handle Files, Blobs, Buffers and Streams.\n this._source = null;\n\n // The current count of attempts which have been made. Null indicates none.\n this._retryAttempt = 0;\n\n // The timeout's ID which is used to delay the next retry\n this._retryTimeout = null;\n\n // The offset of the remote upload before the latest attempt was started.\n this._offsetBeforeRetry = 0;\n }\n\n _createClass(Upload, [{\n key: \"start\",\n value: function start() {\n var _this = this;\n\n var file = this.file;\n\n if (!file) {\n this._emitError(new Error(\"tus: no file or stream to upload provided\"));\n return;\n }\n\n if (!this.options.endpoint) {\n this._emitError(new Error(\"tus: no endpoint provided\"));\n return;\n }\n\n var source = this._source = (0, _source.getSource)(file, this.options.chunkSize);\n\n // Firstly, check if the caller has supplied a manual upload size or else\n // we will use the calculated size by the source object.\n if (this.options.uploadSize != null) {\n var size = +this.options.uploadSize;\n if (isNaN(size)) {\n throw new Error(\"tus: cannot convert `uploadSize` option into a number\");\n }\n\n this._size = size;\n } else {\n var size = source.size;\n\n // The size property will be null if we cannot calculate the file's size,\n // for example if you handle a stream.\n if (size == null) {\n throw new Error(\"tus: cannot automatically derive upload's size from input and must be specified manually using the `uploadSize` option\");\n }\n\n this._size = size;\n }\n\n var retryDelays = this.options.retryDelays;\n if (retryDelays != null) {\n if (Object.prototype.toString.call(retryDelays) !== \"[object Array]\") {\n throw new Error(\"tus: the `retryDelays` option must either be an array or null\");\n } else {\n (function () {\n var errorCallback = _this.options.onError;\n _this.options.onError = function (err) {\n // Restore the original error callback which may have been set.\n _this.options.onError = errorCallback;\n\n // We will reset the attempt counter if\n // - we were already able to connect to the server (offset != null) and\n // - we were able to upload a small chunk of data to the server\n var shouldResetDelays = _this._offset != null && _this._offset > _this._offsetBeforeRetry;\n if (shouldResetDelays) {\n _this._retryAttempt = 0;\n }\n\n var isOnline = true;\n if (typeof window !== \"undefined\" && \"navigator\" in window && window.navigator.onLine === false) {\n isOnline = false;\n }\n\n // We only attempt a retry if\n // - we didn't exceed the maxium number of retries, yet, and\n // - this error was caused by a request or it's response and\n // - the browser does not indicate that we are offline\n var shouldRetry = _this._retryAttempt < retryDelays.length && err.originalRequest != null && isOnline;\n\n if (!shouldRetry) {\n _this._emitError(err);\n return;\n }\n\n var delay = retryDelays[_this._retryAttempt++];\n\n _this._offsetBeforeRetry = _this._offset;\n _this.options.uploadUrl = _this.url;\n\n _this._retryTimeout = setTimeout(function () {\n _this.start();\n }, delay);\n };\n })();\n }\n }\n\n // A URL has manually been specified, so we try to resume\n if (this.options.uploadUrl != null) {\n this.url = this.options.uploadUrl;\n this._resumeUpload();\n return;\n }\n\n // Try to find the endpoint for the file in the storage\n if (this.options.resume) {\n this._fingerprint = this.options.fingerprint(file);\n var resumedUrl = Storage.getItem(this._fingerprint);\n\n if (resumedUrl != null) {\n this.url = resumedUrl;\n this._resumeUpload();\n return;\n }\n }\n\n // An upload has not started for the file yet, so we start a new one\n this._createUpload();\n }\n }, {\n key: \"abort\",\n value: function abort() {\n if (this._xhr !== null) {\n this._xhr.abort();\n this._source.close();\n this._aborted = true;\n }\n\n if (this._retryTimeout != null) {\n clearTimeout(this._retryTimeout);\n this._retryTimeout = null;\n }\n }\n }, {\n key: \"_emitXhrError\",\n value: function _emitXhrError(xhr, err, causingErr) {\n this._emitError(new _error2.default(err, causingErr, xhr));\n }\n }, {\n key: \"_emitError\",\n value: function _emitError(err) {\n if (typeof this.options.onError === \"function\") {\n this.options.onError(err);\n } else {\n throw err;\n }\n }\n }, {\n key: \"_emitSuccess\",\n value: function _emitSuccess() {\n if (typeof this.options.onSuccess === \"function\") {\n this.options.onSuccess();\n }\n }\n\n /**\n * Publishes notification when data has been sent to the server. This\n * data may not have been accepted by the server yet.\n * @param {number} bytesSent Number of bytes sent to the server.\n * @param {number} bytesTotal Total number of bytes to be sent to the server.\n */\n\n }, {\n key: \"_emitProgress\",\n value: function _emitProgress(bytesSent, bytesTotal) {\n if (typeof this.options.onProgress === \"function\") {\n this.options.onProgress(bytesSent, bytesTotal);\n }\n }\n\n /**\n * Publishes notification when a chunk of data has been sent to the server\n * and accepted by the server.\n * @param {number} chunkSize Size of the chunk that was accepted by the\n * server.\n * @param {number} bytesAccepted Total number of bytes that have been\n * accepted by the server.\n * @param {number} bytesTotal Total number of bytes to be sent to the server.\n */\n\n }, {\n key: \"_emitChunkComplete\",\n value: function _emitChunkComplete(chunkSize, bytesAccepted, bytesTotal) {\n if (typeof this.options.onChunkComplete === \"function\") {\n this.options.onChunkComplete(chunkSize, bytesAccepted, bytesTotal);\n }\n }\n\n /**\n * Set the headers used in the request and the withCredentials property\n * as defined in the options\n *\n * @param {XMLHttpRequest} xhr\n */\n\n }, {\n key: \"_setupXHR\",\n value: function _setupXHR(xhr) {\n xhr.setRequestHeader(\"Tus-Resumable\", \"1.0.0\");\n var headers = this.options.headers;\n\n for (var name in headers) {\n xhr.setRequestHeader(name, headers[name]);\n }\n\n xhr.withCredentials = this.options.withCredentials;\n }\n\n /**\n * Create a new upload using the creation extension by sending a POST\n * request to the endpoint. After successful creation the file will be\n * uploaded\n *\n * @api private\n */\n\n }, {\n key: \"_createUpload\",\n value: function _createUpload() {\n var _this2 = this;\n\n var xhr = (0, _request.newRequest)();\n xhr.open(\"POST\", this.options.endpoint, true);\n\n xhr.onload = function () {\n if (!(xhr.status >= 200 && xhr.status < 300)) {\n _this2._emitXhrError(xhr, new Error(\"tus: unexpected response while creating upload\"));\n return;\n }\n\n _this2.url = (0, _request.resolveUrl)(_this2.options.endpoint, xhr.getResponseHeader(\"Location\"));\n\n if (_this2.options.resume) {\n Storage.setItem(_this2._fingerprint, _this2.url);\n }\n\n _this2._offset = 0;\n _this2._startUpload();\n };\n\n xhr.onerror = function (err) {\n _this2._emitXhrError(xhr, new Error(\"tus: failed to create upload\"), err);\n };\n\n this._setupXHR(xhr);\n xhr.setRequestHeader(\"Upload-Length\", this._size);\n\n // Add metadata if values have been added\n var metadata = encodeMetadata(this.options.metadata);\n if (metadata !== \"\") {\n xhr.setRequestHeader(\"Upload-Metadata\", metadata);\n }\n\n xhr.send(null);\n }\n\n /*\n * Try to resume an existing upload. First a HEAD request will be sent\n * to retrieve the offset. If the request fails a new upload will be\n * created. In the case of a successful response the file will be uploaded.\n *\n * @api private\n */\n\n }, {\n key: \"_resumeUpload\",\n value: function _resumeUpload() {\n var _this3 = this;\n\n var xhr = (0, _request.newRequest)();\n xhr.open(\"HEAD\", this.url, true);\n\n xhr.onload = function () {\n if (!(xhr.status >= 200 && xhr.status < 300)) {\n if (_this3.options.resume) {\n // Remove stored fingerprint and corresponding endpoint,\n // since the file can not be found\n Storage.removeItem(_this3._fingerprint);\n }\n\n // Try to create a new upload\n _this3.url = null;\n _this3._createUpload();\n return;\n }\n\n var offset = parseInt(xhr.getResponseHeader(\"Upload-Offset\"), 10);\n if (isNaN(offset)) {\n _this3._emitXhrError(xhr, new Error(\"tus: invalid or missing offset value\"));\n return;\n }\n\n var length = parseInt(xhr.getResponseHeader(\"Upload-Length\"), 10);\n if (isNaN(length)) {\n _this3._emitXhrError(xhr, new Error(\"tus: invalid or missing length value\"));\n return;\n }\n\n // Upload has already been completed and we do not need to send additional\n // data to the server\n if (offset === length) {\n _this3._emitProgress(length, length);\n _this3._emitSuccess();\n return;\n }\n\n _this3._offset = offset;\n _this3._startUpload();\n };\n\n xhr.onerror = function (err) {\n _this3._emitXhrError(xhr, new Error(\"tus: failed to resume upload\"), err);\n };\n\n this._setupXHR(xhr);\n xhr.send(null);\n }\n\n /**\n * Start uploading the file using PATCH requests. The file will be divided\n * into chunks as specified in the chunkSize option. During the upload\n * the onProgress event handler may be invoked multiple times.\n *\n * @api private\n */\n\n }, {\n key: \"_startUpload\",\n value: function _startUpload() {\n var _this4 = this;\n\n var xhr = this._xhr = (0, _request.newRequest)();\n\n // Some browser and servers may not support the PATCH method. For those\n // cases, you can tell tus-js-client to use a POST request with the\n // X-HTTP-Method-Override header for simulating a PATCH request.\n if (this.options.overridePatchMethod) {\n xhr.open(\"POST\", this.url, true);\n xhr.setRequestHeader(\"X-HTTP-Method-Override\", \"PATCH\");\n } else {\n xhr.open(\"PATCH\", this.url, true);\n }\n\n xhr.onload = function () {\n if (!(xhr.status >= 200 && xhr.status < 300)) {\n _this4._emitXhrError(xhr, new Error(\"tus: unexpected response while uploading chunk\"));\n return;\n }\n\n var offset = parseInt(xhr.getResponseHeader(\"Upload-Offset\"), 10);\n if (isNaN(offset)) {\n _this4._emitXhrError(xhr, new Error(\"tus: invalid or missing offset value\"));\n return;\n }\n\n _this4._emitProgress(offset, _this4._size);\n _this4._emitChunkComplete(offset - _this4._offset, offset, _this4._size);\n\n _this4._offset = offset;\n\n if (offset == _this4._size) {\n // Yay, finally done :)\n _this4._emitSuccess();\n _this4._source.close();\n return;\n }\n\n _this4._startUpload();\n };\n\n xhr.onerror = function (err) {\n // Don't emit an error if the upload was aborted manually\n if (_this4._aborted) {\n return;\n }\n\n _this4._emitXhrError(xhr, new Error(\"tus: failed to upload chunk at offset \" + _this4._offset), err);\n };\n\n // Test support for progress events before attaching an event listener\n if (\"upload\" in xhr) {\n xhr.upload.onprogress = function (e) {\n if (!e.lengthComputable) {\n return;\n }\n\n _this4._emitProgress(start + e.loaded, _this4._size);\n };\n }\n\n this._setupXHR(xhr);\n\n xhr.setRequestHeader(\"Upload-Offset\", this._offset);\n xhr.setRequestHeader(\"Content-Type\", \"application/offset+octet-stream\");\n\n var start = this._offset;\n var end = this._offset + this.options.chunkSize;\n\n // The specified chunkSize may be Infinity or the calcluated end position\n // may exceed the file's size. In both cases, we limit the end position to\n // the input's total size for simpler calculations and correctness.\n if (end === Infinity || end > this._size) {\n end = this._size;\n }\n\n xhr.send(this._source.slice(start, end));\n }\n }]);\n\n return Upload;\n}();\n\nfunction encodeMetadata(metadata) {\n if (!Base64.isSupported) {\n return \"\";\n }\n\n var encoded = [];\n\n for (var key in metadata) {\n encoded.push(key + \" \" + Base64.encode(metadata[key]));\n }\n\n return encoded.join(\",\");\n}\n\nUpload.defaultOptions = defaultOptions;\n\nexports.default = Upload;","// Generated by Babel\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.setItem = setItem;\nexports.getItem = getItem;\nexports.removeItem = removeItem;\n/* global window, localStorage */\n\nvar hasStorage = false;\ntry {\n hasStorage = \"localStorage\" in window;\n // Attempt to access localStorage\n localStorage.length;\n} catch (e) {\n // If we try to access localStorage inside a sandboxed iframe, a SecurityError\n // is thrown.\n if (e.code === e.SECURITY_ERR) {\n hasStorage = false;\n } else {\n throw e;\n }\n}\n\nvar canStoreURLs = exports.canStoreURLs = hasStorage;\n\nfunction setItem(key, value) {\n if (!hasStorage) return;\n return localStorage.setItem(key, value);\n}\n\nfunction getItem(key) {\n if (!hasStorage) return;\n return localStorage.getItem(key);\n}\n\nfunction removeItem(key) {\n if (!hasStorage) return;\n return localStorage.removeItem(key);\n}","/**\n* Create an event emitter with namespaces\n* @name createNamespaceEmitter\n* @example\n* var emitter = require('./index')()\n*\n* emitter.on('*', function () {\n* console.log('all events emitted', this.event)\n* })\n*\n* emitter.on('example', function () {\n* console.log('example event emitted')\n* })\n*/\nmodule.exports = function createNamespaceEmitter () {\n var emitter = { _fns: {} }\n\n /**\n * Emit an event. Optionally namespace the event. Separate the namespace and event with a `:`\n * @name emit\n * @param {String} event – the name of the event, with optional namespace\n * @param {...*} data – data variables that will be passed as arguments to the event listener\n * @example\n * emitter.emit('example')\n * emitter.emit('demo:test')\n * emitter.emit('data', { example: true}, 'a string', 1)\n */\n emitter.emit = function emit (event) {\n var args = [].slice.call(arguments, 1)\n var namespaced = namespaces(event)\n if (this._fns[event]) emitAll(event, this._fns[event], args)\n if (namespaced) emitAll(event, namespaced, args)\n }\n\n /**\n * Create en event listener.\n * @name on\n * @param {String} event\n * @param {Function} fn\n * @example\n * emitter.on('example', function () {})\n * emitter.on('demo', function () {})\n */\n emitter.on = function on (event, fn) {\n if (typeof fn !== 'function') { throw new Error('callback required') }\n (this._fns[event] = this._fns[event] || []).push(fn)\n }\n\n /**\n * Create en event listener that fires once.\n * @name once\n * @param {String} event\n * @param {Function} fn\n * @example\n * emitter.once('example', function () {})\n * emitter.once('demo', function () {})\n */\n emitter.once = function once (event, fn) {\n function one () {\n fn.apply(this, arguments)\n emitter.off(event, one)\n }\n this.on(event, one)\n }\n\n /**\n * Stop listening to an event. Stop all listeners on an event by only passing the event name. Stop a single listener by passing that event handler as a callback.\n * You must be explicit about what will be unsubscribed: `emitter.off('demo')` will unsubscribe an `emitter.on('demo')` listener, \n * `emitter.off('demo:example')` will unsubscribe an `emitter.on('demo:example')` listener\n * @name off\n * @param {String} event\n * @param {Function} [fn] – the specific handler\n * @example\n * emitter.off('example')\n * emitter.off('demo', function () {})\n */\n emitter.off = function off (event, fn) {\n var keep = []\n\n if (event && fn) {\n for (var i = 0; i < this._fns.length; i++) {\n if (this._fns[i] !== fn) {\n keep.push(this._fns[i])\n }\n }\n }\n\n keep.length ? this._fns[event] = keep : delete this._fns[event]\n }\n\n function namespaces (e) {\n var out = []\n var args = e.split(':')\n var fns = emitter._fns\n Object.keys(fns).forEach(function (key) {\n if (key === '*') out = out.concat(fns[key])\n if (args.length === 2 && args[0] === key) out = out.concat(fns[key])\n })\n return out\n }\n\n function emitAll (e, fns, args) {\n for (var i = 0; i < fns.length; i++) {\n if (!fns[i]) break\n fns[i].event = e\n fns[i].apply(fns[i], args)\n }\n }\n\n return emitter\n}\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\n(function () {\n try {\n cachedSetTimeout = setTimeout;\n } catch (e) {\n cachedSetTimeout = function () {\n throw new Error('setTimeout is not defined');\n }\n }\n try {\n cachedClearTimeout = clearTimeout;\n } catch (e) {\n cachedClearTimeout = function () {\n throw new Error('clearTimeout is not defined');\n }\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar extractTypeRegExp = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar textTypeRegExp = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset(type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = extractTypeRegExp.exec(type)\n var mime = match && db[match[1].toLowerCase()]\n\n if (mime && mime.charset) {\n return mime.charset\n }\n\n // default text/* to utf-8\n if (match && textTypeRegExp.test(match[1])) {\n return 'UTF-8'\n }\n\n return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType(str) {\n // TODO: should this even be in this module?\n if (!str || typeof str !== 'string') {\n return false\n }\n\n var mime = str.indexOf('/') === -1\n ? exports.lookup(str)\n : str\n\n if (!mime) {\n return false\n }\n\n // TODO: use content-type or other module\n if (mime.indexOf('charset') === -1) {\n var charset = exports.charset(mime)\n if (charset) mime += '; charset=' + charset.toLowerCase()\n }\n\n return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension(type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = extractTypeRegExp.exec(type)\n\n // get extensions\n var exts = match && exports.extensions[match[1].toLowerCase()]\n\n if (!exts || !exts.length) {\n return false\n }\n\n return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup(path) {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // get the extension (\"ext\" or \".ext\" or full path)\n var extension = extname('x.' + path)\n .toLowerCase()\n .substr(1)\n\n if (!extension) {\n return false\n }\n\n return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps(extensions, types) {\n // source preference (least -> most)\n var preference = ['nginx', 'apache', undefined, 'iana']\n\n Object.keys(db).forEach(function forEachMimeType(type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== 'application/octet-stream'\n && from > to || (from === to && types[extension].substr(0, 12) === 'application/')) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n","import html from '../../core/html'\nimport { getETA,\n getSpeed,\n prettyETA,\n getFileNameAndExtension,\n truncateString,\n copyToClipboard } from '../../core/Utils'\nimport prettyBytes from 'pretty-bytes'\nimport FileItemProgress from './FileItemProgress'\nimport { iconText, iconFile, iconAudio, iconEdit, iconCopy } from './icons'\n\nfunction getIconByMime (fileTypeGeneral) {\n switch (fileTypeGeneral) {\n case 'text':\n return iconText()\n case 'audio':\n return iconAudio()\n default:\n return iconFile()\n }\n}\n\nexport default function fileItem (props) {\n const file = props.file\n\n const isUploaded = file.progress.uploadComplete\n const uploadInProgressOrComplete = file.progress.uploadStarted\n const uploadInProgress = file.progress.uploadStarted && !file.progress.uploadComplete\n const isPaused = file.isPaused || false\n\n const fileName = getFileNameAndExtension(file.meta.name)[0]\n const truncatedFileName = truncateString(fileName, 15)\n\n return html`<li class=\"UppyDashboardItem\n ${uploadInProgress ? 'is-inprogress' : ''}\n ${isUploaded ? 'is-complete' : ''}\n ${isPaused ? 'is-paused' : ''}\"\n id=\"uppy_${file.id}\"\n title=\"${file.meta.name}\">\n <div class=\"UppyDashboardItem-preview\">\n ${file.preview\n ? html`<img alt=\"${file.name}\" src=\"${file.preview}\">`\n : getIconByMime(file.type.general)\n }\n <div class=\"UppyDashboardItem-progress\">\n <button class=\"UppyDashboardItem-progressBtn\"\n title=\"${isUploaded\n ? 'upload complete'\n : file.isPaused ? 'resume upload' : 'pause upload'}\"\n onclick=${(ev) => {\n if (isUploaded) return\n props.pauseUpload(file.id)\n }}>\n ${FileItemProgress({\n progress: file.progress.percentage,\n fileID: file.id\n })}\n </button>\n ${props.showProgressDetails\n ? html`<div class=\"UppyDashboardItem-progressInfo\"\n title=\"${props.i18n('localDisk')}\"\n aria-label=\"${props.i18n('localDisk')}\">\n ${!file.isPaused && !isUploaded\n ? html`<span>${prettyETA(getETA(file.progress))} ・ ↑ ${prettyBytes(getSpeed(file.progress))}/s</span>`\n : null\n }\n </div>`\n : null\n }\n </div>\n </div>\n <div class=\"UppyDashboardItem-info\">\n <h4 class=\"UppyDashboardItem-name\" title=\"${fileName}\">\n ${file.uploadURL\n ? html`<a href=\"${file.uploadURL}\" target=\"_blank\">\n ${file.extension ? truncatedFileName + '.' + file.extension : truncatedFileName}\n </a>`\n : file.extension ? truncatedFileName + '.' + file.extension : truncatedFileName\n }\n </h4>\n <div class=\"UppyDashboardItem-status\">\n <span class=\"UppyDashboardItem-statusSize\">${file.data.size ? prettyBytes(file.data.size) : '?'}</span>\n </div>\n ${!uploadInProgressOrComplete\n ? html`<button class=\"UppyDashboardItem-edit\"\n aria-label=\"Edit file\"\n title=\"Edit file\"\n onclick=${(e) => props.showFileCard(file.id)}>\n ${iconEdit()}</button>`\n : null\n }\n ${file.uploadURL\n ? html`<button class=\"UppyDashboardItem-copyLink\"\n aria-label=\"Copy link\"\n title=\"Copy link\"\n onclick=${() => {\n copyToClipboard(file.uploadURL, props.i18n('copyLinkToClipboardFallback'))\n .then(() => {\n props.log('Link copied to clipboard.')\n props.info(props.i18n('copyLinkToClipboardSuccess'), 'info', 3000)\n })\n .catch(props.log)\n }}>${iconCopy()}</button>`\n : null\n }\n </div>\n <div class=\"UppyDashboardItem-action\">\n ${!isUploaded\n ? html`<button class=\"UppyDashboardItem-remove\"\n aria-label=\"Remove file\"\n title=\"Remove file\"\n onclick=${() => props.removeFile(file.id)}>\n <svg class=\"UppyIcon\" width=\"22\" height=\"21\" viewBox=\"0 0 18 17\">\n <ellipse fill=\"#424242\" cx=\"8.62\" cy=\"8.383\" rx=\"8.62\" ry=\"8.383\"/>\n <path stroke=\"#FFF\" fill=\"#FFF\" d=\"M11 6.147L10.85 6 8.5 8.284 6.15 6 6 6.147 8.35 8.43 6 10.717l.15.146L8.5 8.578l2.35 2.284.15-.146L8.65 8.43z\"/>\n </svg>\n </button>`\n : null\n }\n </div>\n </li>`\n}\n","var document = require('global/document')\nvar hyperx = require('hyperx')\nvar onload = require('on-load')\n\nvar SVGNS = 'http://www.w3.org/2000/svg'\nvar BOOL_PROPS = {\n autofocus: 1,\n checked: 1,\n defaultchecked: 1,\n disabled: 1,\n formnovalidate: 1,\n indeterminate: 1,\n readonly: 1,\n required: 1,\n selected: 1,\n willvalidate: 1\n}\nvar SVG_TAGS = [\n 'svg',\n 'altGlyph', 'altGlyphDef', 'altGlyphItem', 'animate', 'animateColor',\n 'animateMotion', 'animateTransform', 'circle', 'clipPath', 'color-profile',\n 'cursor', 'defs', 'desc', 'ellipse', 'feBlend', 'feColorMatrix',\n 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting',\n 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB',\n 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode',\n 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting',\n 'feSpotLight', 'feTile', 'feTurbulence', 'filter', 'font', 'font-face',\n 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri',\n 'foreignObject', 'g', 'glyph', 'glyphRef', 'hkern', 'image', 'line',\n 'linearGradient', 'marker', 'mask', 'metadata', 'missing-glyph', 'mpath',\n 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect',\n 'set', 'stop', 'switch', 'symbol', 'text', 'textPath', 'title', 'tref',\n 'tspan', 'use', 'view', 'vkern'\n]\n\nfunction belCreateElement (tag, props, children) {\n var el\n\n // If an svg tag, it needs a namespace\n if (SVG_TAGS.indexOf(tag) !== -1) {\n props.namespace = SVGNS\n }\n\n // If we are using a namespace\n var ns = false\n if (props.namespace) {\n ns = props.namespace\n delete props.namespace\n }\n\n // Create the element\n if (ns) {\n el = document.createElementNS(ns, tag)\n } else {\n el = document.createElement(tag)\n }\n\n // If adding onload events\n if (props.onload || props.onunload) {\n var load = props.onload || function () {}\n var unload = props.onunload || function () {}\n onload(el, function bel_onload () {\n load(el)\n }, function bel_onunload () {\n unload(el)\n },\n // We have to use non-standard `caller` to find who invokes `belCreateElement`\n belCreateElement.caller.caller.caller)\n delete props.onload\n delete props.onunload\n }\n\n // Create the properties\n for (var p in props) {\n if (props.hasOwnProperty(p)) {\n var key = p.toLowerCase()\n var val = props[p]\n // Normalize className\n if (key === 'classname') {\n key = 'class'\n p = 'class'\n }\n // The for attribute gets transformed to htmlFor, but we just set as for\n if (p === 'htmlFor') {\n p = 'for'\n }\n // If a property is boolean, set itself to the key\n if (BOOL_PROPS[key]) {\n if (val === 'true') val = key\n else if (val === 'false') continue\n }\n // If a property prefers being set directly vs setAttribute\n if (key.slice(0, 2) === 'on') {\n el[p] = val\n } else {\n if (ns) {\n el.setAttributeNS(null, p, val)\n } else {\n el.setAttribute(p, val)\n }\n }\n }\n }\n\n function appendChild (childs) {\n if (!Array.isArray(childs)) return\n for (var i = 0; i < childs.length; i++) {\n var node = childs[i]\n if (Array.isArray(node)) {\n appendChild(node)\n continue\n }\n\n if (typeof node === 'number' ||\n typeof node === 'boolean' ||\n node instanceof Date ||\n node instanceof RegExp) {\n node = node.toString()\n }\n\n if (typeof node === 'string') {\n if (el.lastChild && el.lastChild.nodeName === '#text') {\n el.lastChild.nodeValue += node\n continue\n }\n node = document.createTextNode(node)\n }\n\n if (node && node.nodeType) {\n el.appendChild(node)\n }\n }\n }\n appendChild(children)\n\n return el\n}\n\nmodule.exports = hyperx(belCreateElement)\nmodule.exports.createElement = belCreateElement\n","'use strict';\n// Create a range object for efficently rendering strings to elements.\nvar range;\n\nvar doc = typeof document !== 'undefined' && document;\n\nvar testEl = doc ?\n doc.body || doc.createElement('div') :\n {};\n\nvar NS_XHTML = 'http://www.w3.org/1999/xhtml';\n\nvar ELEMENT_NODE = 1;\nvar TEXT_NODE = 3;\nvar COMMENT_NODE = 8;\n\n// Fixes <https://github.com/patrick-steele-idem/morphdom/issues/32>\n// (IE7+ support) <=IE7 does not support el.hasAttribute(name)\nvar hasAttributeNS;\n\nif (testEl.hasAttributeNS) {\n hasAttributeNS = function(el, namespaceURI, name) {\n return el.hasAttributeNS(namespaceURI, name);\n };\n} else if (testEl.hasAttribute) {\n hasAttributeNS = function(el, namespaceURI, name) {\n return el.hasAttribute(name);\n };\n} else {\n hasAttributeNS = function(el, namespaceURI, name) {\n return !!el.getAttributeNode(name);\n };\n}\n\nfunction toElement(str) {\n if (!range && doc.createRange) {\n range = doc.createRange();\n range.selectNode(doc.body);\n }\n\n var fragment;\n if (range && range.createContextualFragment) {\n fragment = range.createContextualFragment(str);\n } else {\n fragment = doc.createElement('body');\n fragment.innerHTML = str;\n }\n return fragment.childNodes[0];\n}\n\nvar specialElHandlers = {\n /**\n * Needed for IE. Apparently IE doesn't think that \"selected\" is an\n * attribute when reading over the attributes using selectEl.attributes\n */\n OPTION: function(fromEl, toEl) {\n fromEl.selected = toEl.selected;\n if (fromEl.selected) {\n fromEl.setAttribute('selected', '');\n } else {\n fromEl.removeAttribute('selected', '');\n }\n },\n /**\n * The \"value\" attribute is special for the <input> element since it sets\n * the initial value. Changing the \"value\" attribute without changing the\n * \"value\" property will have no effect since it is only used to the set the\n * initial value. Similar for the \"checked\" attribute, and \"disabled\".\n */\n INPUT: function(fromEl, toEl) {\n fromEl.checked = toEl.checked;\n if (fromEl.checked) {\n fromEl.setAttribute('checked', '');\n } else {\n fromEl.removeAttribute('checked');\n }\n\n if (fromEl.value !== toEl.value) {\n fromEl.value = toEl.value;\n }\n\n if (!hasAttributeNS(toEl, null, 'value')) {\n fromEl.removeAttribute('value');\n }\n\n fromEl.disabled = toEl.disabled;\n if (fromEl.disabled) {\n fromEl.setAttribute('disabled', '');\n } else {\n fromEl.removeAttribute('disabled');\n }\n },\n\n TEXTAREA: function(fromEl, toEl) {\n var newValue = toEl.value;\n if (fromEl.value !== newValue) {\n fromEl.value = newValue;\n }\n\n if (fromEl.firstChild) {\n fromEl.firstChild.nodeValue = newValue;\n }\n }\n};\n\nfunction noop() {}\n\n/**\n * Returns true if two node's names are the same.\n *\n * NOTE: We don't bother checking `namespaceURI` because you will never find two HTML elements with the same\n * nodeName and different namespace URIs.\n *\n * @param {Element} a\n * @param {Element} b The target element\n * @return {boolean}\n */\nfunction compareNodeNames(fromEl, toEl) {\n var fromNodeName = fromEl.nodeName;\n var toNodeName = toEl.nodeName;\n\n if (fromNodeName === toNodeName) {\n return true;\n }\n\n if (toEl.actualize &&\n fromNodeName.charCodeAt(0) < 91 && /* from tag name is upper case */\n toNodeName.charCodeAt(0) > 90 /* target tag name is lower case */) {\n // If the target element is a virtual DOM node then we may need to normalize the tag name\n // before comparing. Normal HTML elements that are in the \"http://www.w3.org/1999/xhtml\"\n // are converted to upper case\n return fromNodeName === toNodeName.toUpperCase();\n } else {\n return false;\n }\n}\n\n/**\n * Create an element, optionally with a known namespace URI.\n *\n * @param {string} name the element name, e.g. 'div' or 'svg'\n * @param {string} [namespaceURI] the element's namespace URI, i.e. the value of\n * its `xmlns` attribute or its inferred namespace.\n *\n * @return {Element}\n */\nfunction createElementNS(name, namespaceURI) {\n return !namespaceURI || namespaceURI === NS_XHTML ?\n doc.createElement(name) :\n doc.createElementNS(namespaceURI, name);\n}\n\n/**\n * Loop over all of the attributes on the target node and make sure the original\n * DOM node has the same attributes. If an attribute found on the original node\n * is not on the new node then remove it from the original node.\n *\n * @param {Element} fromNode\n * @param {Element} toNode\n */\nfunction morphAttrs(fromNode, toNode) {\n var attrs = toNode.attributes;\n var i;\n var attr;\n var attrName;\n var attrNamespaceURI;\n var attrValue;\n var fromValue;\n\n if (toNode.assignAttributes) {\n toNode.assignAttributes(fromNode);\n } else {\n for (i = attrs.length - 1; i >= 0; --i) {\n attr = attrs[i];\n attrName = attr.name;\n attrNamespaceURI = attr.namespaceURI;\n attrValue = attr.value;\n\n if (attrNamespaceURI) {\n attrName = attr.localName || attrName;\n fromValue = fromNode.getAttributeNS(attrNamespaceURI, attrName);\n\n if (fromValue !== attrValue) {\n fromNode.setAttributeNS(attrNamespaceURI, attrName, attrValue);\n }\n } else {\n fromValue = fromNode.getAttribute(attrName);\n\n if (fromValue !== attrValue) {\n fromNode.setAttribute(attrName, attrValue);\n }\n }\n }\n }\n\n // Remove any extra attributes found on the original DOM element that\n // weren't found on the target element.\n attrs = fromNode.attributes;\n\n for (i = attrs.length - 1; i >= 0; --i) {\n attr = attrs[i];\n if (attr.specified !== false) {\n attrName = attr.name;\n attrNamespaceURI = attr.namespaceURI;\n\n if (attrNamespaceURI) {\n attrName = attr.localName || attrName;\n\n if (!hasAttributeNS(toNode, attrNamespaceURI, attrName)) {\n fromNode.removeAttributeNS(attrNamespaceURI, attrName);\n }\n } else {\n if (!hasAttributeNS(toNode, null, attrName)) {\n fromNode.removeAttribute(attrName);\n }\n }\n }\n }\n}\n\n/**\n * Copies the children of one DOM element to another DOM element\n */\nfunction moveChildren(fromEl, toEl) {\n var curChild = fromEl.firstChild;\n while (curChild) {\n var nextChild = curChild.nextSibling;\n toEl.appendChild(curChild);\n curChild = nextChild;\n }\n return toEl;\n}\n\nfunction defaultGetNodeKey(node) {\n return node.id;\n}\n\nfunction morphdom(fromNode, toNode, options) {\n if (!options) {\n options = {};\n }\n\n if (typeof toNode === 'string') {\n if (fromNode.nodeName === '#document' || fromNode.nodeName === 'HTML') {\n var toNodeHtml = toNode;\n toNode = doc.createElement('html');\n toNode.innerHTML = toNodeHtml;\n } else {\n toNode = toElement(toNode);\n }\n }\n\n var getNodeKey = options.getNodeKey || defaultGetNodeKey;\n var onBeforeNodeAdded = options.onBeforeNodeAdded || noop;\n var onNodeAdded = options.onNodeAdded || noop;\n var onBeforeElUpdated = options.onBeforeElUpdated || noop;\n var onElUpdated = options.onElUpdated || noop;\n var onBeforeNodeDiscarded = options.onBeforeNodeDiscarded || noop;\n var onNodeDiscarded = options.onNodeDiscarded || noop;\n var onBeforeElChildrenUpdated = options.onBeforeElChildrenUpdated || noop;\n var childrenOnly = options.childrenOnly === true;\n\n // This object is used as a lookup to quickly find all keyed elements in the original DOM tree.\n var fromNodesLookup = {};\n var keyedRemovalList;\n\n function addKeyedRemoval(key) {\n if (keyedRemovalList) {\n keyedRemovalList.push(key);\n } else {\n keyedRemovalList = [key];\n }\n }\n\n function walkDiscardedChildNodes(node, skipKeyedNodes) {\n if (node.nodeType === ELEMENT_NODE) {\n var curChild = node.firstChild;\n while (curChild) {\n\n var key = undefined;\n\n if (skipKeyedNodes && (key = getNodeKey(curChild))) {\n // If we are skipping keyed nodes then we add the key\n // to a list so that it can be handled at the very end.\n addKeyedRemoval(key);\n } else {\n // Only report the node as discarded if it is not keyed. We do this because\n // at the end we loop through all keyed elements that were unmatched\n // and then discard them in one final pass.\n onNodeDiscarded(curChild);\n if (curChild.firstChild) {\n walkDiscardedChildNodes(curChild, skipKeyedNodes);\n }\n }\n\n curChild = curChild.nextSibling;\n }\n }\n }\n\n /**\n * Removes a DOM node out of the original DOM\n *\n * @param {Node} node The node to remove\n * @param {Node} parentNode The nodes parent\n * @param {Boolean} skipKeyedNodes If true then elements with keys will be skipped and not discarded.\n * @return {undefined}\n */\n function removeNode(node, parentNode, skipKeyedNodes) {\n if (onBeforeNodeDiscarded(node) === false) {\n return;\n }\n\n if (parentNode) {\n parentNode.removeChild(node);\n }\n\n onNodeDiscarded(node);\n walkDiscardedChildNodes(node, skipKeyedNodes);\n }\n\n // // TreeWalker implementation is no faster, but keeping this around in case this changes in the future\n // function indexTree(root) {\n // var treeWalker = document.createTreeWalker(\n // root,\n // NodeFilter.SHOW_ELEMENT);\n //\n // var el;\n // while((el = treeWalker.nextNode())) {\n // var key = getNodeKey(el);\n // if (key) {\n // fromNodesLookup[key] = el;\n // }\n // }\n // }\n\n // // NodeIterator implementation is no faster, but keeping this around in case this changes in the future\n //\n // function indexTree(node) {\n // var nodeIterator = document.createNodeIterator(node, NodeFilter.SHOW_ELEMENT);\n // var el;\n // while((el = nodeIterator.nextNode())) {\n // var key = getNodeKey(el);\n // if (key) {\n // fromNodesLookup[key] = el;\n // }\n // }\n // }\n\n function indexTree(node) {\n if (node.nodeType === ELEMENT_NODE) {\n var curChild = node.firstChild;\n while (curChild) {\n var key = getNodeKey(curChild);\n if (key) {\n fromNodesLookup[key] = curChild;\n }\n\n // Walk recursively\n indexTree(curChild);\n\n curChild = curChild.nextSibling;\n }\n }\n }\n\n indexTree(fromNode);\n\n function handleNodeAdded(el) {\n onNodeAdded(el);\n\n var curChild = el.firstChild;\n while (curChild) {\n var nextSibling = curChild.nextSibling;\n\n var key = getNodeKey(curChild);\n if (key) {\n var unmatchedFromEl = fromNodesLookup[key];\n if (unmatchedFromEl && compareNodeNames(curChild, unmatchedFromEl)) {\n curChild.parentNode.replaceChild(unmatchedFromEl, curChild);\n morphEl(unmatchedFromEl, curChild);\n }\n }\n\n handleNodeAdded(curChild);\n curChild = nextSibling;\n }\n }\n\n function morphEl(fromEl, toEl, childrenOnly) {\n var toElKey = getNodeKey(toEl);\n var curFromNodeKey;\n\n if (toElKey) {\n // If an element with an ID is being morphed then it is will be in the final\n // DOM so clear it out of the saved elements collection\n delete fromNodesLookup[toElKey];\n }\n\n if (toNode.isSameNode && toNode.isSameNode(fromNode)) {\n return;\n }\n\n if (!childrenOnly) {\n if (onBeforeElUpdated(fromEl, toEl) === false) {\n return;\n }\n\n morphAttrs(fromEl, toEl);\n onElUpdated(fromEl);\n\n if (onBeforeElChildrenUpdated(fromEl, toEl) === false) {\n return;\n }\n }\n\n if (fromEl.nodeName !== 'TEXTAREA') {\n var curToNodeChild = toEl.firstChild;\n var curFromNodeChild = fromEl.firstChild;\n var curToNodeKey;\n\n var fromNextSibling;\n var toNextSibling;\n var matchingFromEl;\n\n outer: while (curToNodeChild) {\n toNextSibling = curToNodeChild.nextSibling;\n curToNodeKey = getNodeKey(curToNodeChild);\n\n while (curFromNodeChild) {\n if (curToNodeChild.isSameNode && curToNodeChild.isSameNode(curFromNodeChild)) {\n return;\n }\n\n curFromNodeKey = getNodeKey(curFromNodeChild);\n fromNextSibling = curFromNodeChild.nextSibling;\n\n var curFromNodeType = curFromNodeChild.nodeType;\n\n var isCompatible = undefined;\n\n if (curFromNodeType === curToNodeChild.nodeType) {\n if (curFromNodeType === ELEMENT_NODE) {\n // Both nodes being compared are Element nodes\n\n if (curToNodeKey) {\n // The target node has a key so we want to match it up with the correct element\n // in the original DOM tree\n if (curToNodeKey !== curFromNodeKey) {\n // The current element in the original DOM tree does not have a matching key so\n // let's check our lookup to see if there is a matching element in the original\n // DOM tree\n if ((matchingFromEl = fromNodesLookup[curToNodeKey])) {\n if (curFromNodeChild.nextSibling === matchingFromEl) {\n // Special case for single element removals. To avoid removing the original\n // DOM node out of the tree (since that can break CSS transitions, etc.),\n // we will instead discard the current node and wait until the next\n // iteration to properly match up the keyed target element with its matching\n // element in the original tree\n isCompatible = false;\n } else {\n // We found a matching keyed element somewhere in the original DOM tree.\n // Let's moving the original DOM node into the current position and morph\n // it.\n\n // NOTE: We use insertBefore instead of replaceChild because we want to go through\n // the `removeNode()` function for the node that is being discarded so that\n // all lifecycle hooks are correctly invoked\n fromEl.insertBefore(matchingFromEl, curFromNodeChild);\n\n if (curFromNodeKey) {\n // Since the node is keyed it might be matched up later so we defer\n // the actual removal to later\n addKeyedRemoval(curFromNodeKey);\n } else {\n // NOTE: we skip nested keyed nodes from being removed since there is\n // still a chance they will be matched up later\n removeNode(curFromNodeChild, fromEl, true /* skip keyed nodes */);\n\n }\n fromNextSibling = curFromNodeChild.nextSibling;\n curFromNodeChild = matchingFromEl;\n }\n } else {\n // The nodes are not compatible since the \"to\" node has a key and there\n // is no matching keyed node in the source tree\n isCompatible = false;\n }\n }\n } else if (curFromNodeKey) {\n // The original has a key\n isCompatible = false;\n }\n\n isCompatible = isCompatible !== false && compareNodeNames(curFromNodeChild, curToNodeChild);\n if (isCompatible) {\n // We found compatible DOM elements so transform\n // the current \"from\" node to match the current\n // target DOM node.\n morphEl(curFromNodeChild, curToNodeChild);\n }\n\n } else if (curFromNodeType === TEXT_NODE || curFromNodeType == COMMENT_NODE) {\n // Both nodes being compared are Text or Comment nodes\n isCompatible = true;\n // Simply update nodeValue on the original node to\n // change the text value\n curFromNodeChild.nodeValue = curToNodeChild.nodeValue;\n }\n }\n\n if (isCompatible) {\n // Advance both the \"to\" child and the \"from\" child since we found a match\n curToNodeChild = toNextSibling;\n curFromNodeChild = fromNextSibling;\n continue outer;\n }\n\n // No compatible match so remove the old node from the DOM and continue trying to find a\n // match in the original DOM. However, we only do this if the from node is not keyed\n // since it is possible that a keyed node might match up with a node somewhere else in the\n // target tree and we don't want to discard it just yet since it still might find a\n // home in the final DOM tree. After everything is done we will remove any keyed nodes\n // that didn't find a home\n if (curFromNodeKey) {\n // Since the node is keyed it might be matched up later so we defer\n // the actual removal to later\n addKeyedRemoval(curFromNodeKey);\n } else {\n // NOTE: we skip nested keyed nodes from being removed since there is\n // still a chance they will be matched up later\n removeNode(curFromNodeChild, fromEl, true /* skip keyed nodes */);\n }\n\n curFromNodeChild = fromNextSibling;\n }\n\n // If we got this far then we did not find a candidate match for\n // our \"to node\" and we exhausted all of the children \"from\"\n // nodes. Therefore, we will just append the current \"to\" node\n // to the end\n if (curToNodeKey && (matchingFromEl = fromNodesLookup[curToNodeKey]) && compareNodeNames(matchingFromEl, curToNodeChild)) {\n fromEl.appendChild(matchingFromEl);\n morphEl(matchingFromEl, curToNodeChild);\n } else {\n var onBeforeNodeAddedResult = onBeforeNodeAdded(curToNodeChild);\n if (onBeforeNodeAddedResult !== false) {\n if (onBeforeNodeAddedResult) {\n curToNodeChild = onBeforeNodeAddedResult;\n }\n\n if (curToNodeChild.actualize) {\n curToNodeChild = curToNodeChild.actualize(fromEl.ownerDocument || doc);\n }\n fromEl.appendChild(curToNodeChild);\n handleNodeAdded(curToNodeChild);\n }\n }\n\n curToNodeChild = toNextSibling;\n curFromNodeChild = fromNextSibling;\n }\n\n // We have processed all of the \"to nodes\". If curFromNodeChild is\n // non-null then we still have some from nodes left over that need\n // to be removed\n while (curFromNodeChild) {\n fromNextSibling = curFromNodeChild.nextSibling;\n if ((curFromNodeKey = getNodeKey(curFromNodeChild))) {\n // Since the node is keyed it might be matched up later so we defer\n // the actual removal to later\n addKeyedRemoval(curFromNodeKey);\n } else {\n // NOTE: we skip nested keyed nodes from being removed since there is\n // still a chance they will be matched up later\n removeNode(curFromNodeChild, fromEl, true /* skip keyed nodes */);\n }\n curFromNodeChild = fromNextSibling;\n }\n }\n\n var specialElHandler = specialElHandlers[fromEl.nodeName];\n if (specialElHandler) {\n specialElHandler(fromEl, toEl);\n }\n } // END: morphEl(...)\n\n var morphedNode = fromNode;\n var morphedNodeType = morphedNode.nodeType;\n var toNodeType = toNode.nodeType;\n\n if (!childrenOnly) {\n // Handle the case where we are given two DOM nodes that are not\n // compatible (e.g. <div> --> <span> or <div> --> TEXT)\n if (morphedNodeType === ELEMENT_NODE) {\n if (toNodeType === ELEMENT_NODE) {\n if (!compareNodeNames(fromNode, toNode)) {\n onNodeDiscarded(fromNode);\n morphedNode = moveChildren(fromNode, createElementNS(toNode.nodeName, toNode.namespaceURI));\n }\n } else {\n // Going from an element node to a text node\n morphedNode = toNode;\n }\n } else if (morphedNodeType === TEXT_NODE || morphedNodeType === COMMENT_NODE) { // Text or comment node\n if (toNodeType === morphedNodeType) {\n morphedNode.nodeValue = toNode.nodeValue;\n return morphedNode;\n } else {\n // Text node to something else\n morphedNode = toNode;\n }\n }\n }\n\n if (morphedNode === toNode) {\n // The \"to node\" was not compatible with the \"from node\" so we had to\n // toss out the \"from node\" and use the \"to node\"\n onNodeDiscarded(fromNode);\n } else {\n morphEl(morphedNode, toNode, childrenOnly);\n\n // We now need to loop over any keyed nodes that might need to be\n // removed. We only do the removal if we know that the keyed node\n // never found a match. When a keyed node is matched up we remove\n // it out of fromNodesLookup and we use fromNodesLookup to determine\n // if a keyed node has been matched up or not\n if (keyedRemovalList) {\n for (var i=0, len=keyedRemovalList.length; i<len; i++) {\n var elToRemove = fromNodesLookup[keyedRemovalList[i]];\n if (elToRemove) {\n removeNode(elToRemove, elToRemove.parentNode, false);\n }\n }\n }\n }\n\n if (!childrenOnly && morphedNode !== fromNode && fromNode.parentNode) {\n if (morphedNode.actualize) {\n morphedNode = morphedNode.actualize(fromNode.ownerDocument || doc);\n }\n // If we had to swap out the from node with a new node because the old\n // node was not compatible with the target node then we need to\n // replace the old DOM node in the original DOM tree. This is only\n // possible if the original DOM node was part of a DOM tree which\n // we know is the case if it has a parent node.\n fromNode.parentNode.replaceChild(morphedNode, fromNode);\n }\n\n return morphedNode;\n}\n\nmodule.exports = morphdom;\n","import html from '../../../core/html'\n\nexport default (props) => {\n return html`\n <li>\n <button onclick=${props.getNextFolder}>${props.title}</button>\n </li>\n `\n}\n","import html from '../../../core/html'\nimport Column from './TableColumn'\n\nexport default (props) => {\n const classes = props.active ? 'BrowserTable-row is-active' : 'BrowserTable-row'\n return html`\n <tr onclick=${props.handleClick} ondblclick=${props.handleDoubleClick} class=${classes}>\n ${Column({\n iconLink: props.iconLink,\n value: props.title || ''\n })}\n </tr>\n `\n}\n","// Generated by Babel\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = fingerprint;\n/**\n * Generate a fingerprint for a file which will be used the store the endpoint\n *\n * @param {File} file\n * @return {String}\n */\nfunction fingerprint(file) {\n return [\"tus\", file.name, file.type, file.size, file.lastModified].join(\"-\");\n}","// Generated by Babel\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar DetailedError = function (_Error) {\n _inherits(DetailedError, _Error);\n\n function DetailedError(error) {\n var causingErr = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n var xhr = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2];\n\n _classCallCheck(this, DetailedError);\n\n var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(DetailedError).call(this, error.message));\n\n _this.originalRequest = xhr;\n _this.causingError = causingErr;\n\n var message = error.message;\n if (causingErr != null) {\n message += \", caused by \" + causingErr.toString();\n }\n if (xhr != null) {\n message += \", originated from request (response code: \" + xhr.status + \", response text: \" + xhr.responseText + \")\";\n }\n _this.message = message;\n return _this;\n }\n\n return DetailedError;\n}(Error);\n\nexports.default = DetailedError;","// Generated by Babel\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.newRequest = newRequest;\nexports.resolveUrl = resolveUrl;\n\nvar _resolveUrl = require(\"resolve-url\");\n\nvar _resolveUrl2 = _interopRequireDefault(_resolveUrl);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction newRequest() {\n return new window.XMLHttpRequest();\n} /* global window */\n\n\nfunction resolveUrl(origin, link) {\n return (0, _resolveUrl2.default)(origin, link);\n}","// Generated by Babel\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getSource = getSource;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar FileSource = function () {\n function FileSource(file) {\n _classCallCheck(this, FileSource);\n\n this._file = file;\n this.size = file.size;\n }\n\n _createClass(FileSource, [{\n key: \"slice\",\n value: function slice(start, end) {\n return this._file.slice(start, end);\n }\n }, {\n key: \"close\",\n value: function close() {}\n }]);\n\n return FileSource;\n}();\n\nfunction getSource(input) {\n // Since we emulate the Blob type in our tests (not all target browsers\n // support it), we cannot use `instanceof` for testing whether the input value\n // can be handled. Instead, we simply check is the slice() function and the\n // size property are available.\n if (typeof input.slice === \"function\" && typeof input.size !== \"undefined\") {\n return new FileSource(input);\n }\n\n throw new Error(\"source object may only be an instance of File or Blob in this environment\");\n}","// Generated by Babel\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.encode = encode;\n/* global: window */\n\nvar _window = window;\nvar btoa = _window.btoa;\nfunction encode(data) {\n return btoa(unescape(encodeURIComponent(data)));\n}\n\nvar isSupported = exports.isSupported = \"btoa\" in window;","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar splitPath = function(filename) {\n return splitPathRe.exec(filename).slice(1);\n};\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function(path) {\n var result = splitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n};\n\n\nexports.basename = function(path, ext) {\n var f = splitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nexports.extname = function(path) {\n return splitPath(path)[3];\n};\n\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n ? function (str, start, len) { return str.substr(start, len) }\n : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n","module.exports = function flatten(list, depth) {\n depth = (typeof depth == 'number') ? depth : Infinity;\n\n if (!depth) {\n if (Array.isArray(list)) {\n return list.map(function(i) { return i; });\n }\n return list;\n }\n\n return _flatten(list, 1);\n\n function _flatten(list, d) {\n return list.reduce(function (acc, item) {\n if (Array.isArray(item) && d < depth) {\n return acc.concat(_flatten(item, d + 1));\n }\n else {\n return acc.concat(item);\n }\n }, []);\n }\n};\n","module.exports = function (tasks, cb) {\n var results, pending, keys\n var isSync = true\n\n if (Array.isArray(tasks)) {\n results = []\n pending = tasks.length\n } else {\n keys = Object.keys(tasks)\n results = {}\n pending = keys.length\n }\n\n function done (err) {\n function end () {\n if (cb) cb(err, results)\n cb = null\n }\n if (isSync) process.nextTick(end)\n else end()\n }\n\n function each (i, err, result) {\n results[i] = result\n if (--pending === 0 || err) {\n done(err)\n }\n }\n\n if (!pending) {\n // empty\n done(null)\n } else if (keys) {\n // object\n keys.forEach(function (key) {\n tasks[key](function (err, result) { each(key, err, result) })\n })\n } else {\n // array\n tasks.forEach(function (task, i) {\n task(function (err, result) { each(i, err, result) })\n })\n }\n\n isSync = false\n}\n","'use strict';\nmodule.exports = Number.isNaN || function (x) {\n\treturn x !== x;\n};\n","import html from '../../core/html'\n\n// http://codepen.io/Harkko/pen/rVxvNM\n// https://gist.github.com/eswak/ad4ea57bcd5ff7aa5d42\n\nexport default function (props) {\n return html`\n <svg width=\"70\" height=\"70\" viewBox=\"0 0 36 36\" class=\"UppyIcon UppyIcon-progressCircle\">\n <g class=\"progress-group\">\n <circle r=\"15\" cx=\"18\" cy=\"18\" stroke-width=\"2\" fill=\"none\" class=\"bg\"/>\n <circle r=\"15\" cx=\"18\" cy=\"18\" transform=\"rotate(-90, 18, 18)\" stroke-width=\"2\" fill=\"none\" stroke-dasharray=\"100\" stroke-dashoffset=\"${100 - props.progress || 100}\" class=\"progress\"/>\n </g>\n <polygon transform=\"translate(3, 3)\" points=\"12 20 12 10 20 15\" class=\"play\"/>\n <g transform=\"translate(14.5, 13)\" class=\"pause\">\n <rect x=\"0\" y=\"0\" width=\"2\" height=\"10\" rx=\"0\" />\n <rect x=\"5\" y=\"0\" width=\"2\" height=\"10\" rx=\"0\" />\n </g>\n <polygon transform=\"translate(2, 3)\" points=\"14 22.5 7 15.2457065 8.99985857 13.1732815 14 18.3547104 22.9729883 9 25 11.1005634\" class=\"check\"/>\n </svg>`\n}\n","/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n","import html from '../../../core/html'\n\nexport default (props) => {\n return html`\n <td class=\"BrowserTable-rowColumn BrowserTable-column\">\n <img src=${props.iconLink}/> ${props.value}\n </td>\n `\n}\n","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0],\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = target[name];\n\t\t\t\tcopy = options[name];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n","var attrToProp = require('hyperscript-attribute-to-property')\n\nvar VAR = 0, TEXT = 1, OPEN = 2, CLOSE = 3, ATTR = 4\nvar ATTR_KEY = 5, ATTR_KEY_W = 6\nvar ATTR_VALUE_W = 7, ATTR_VALUE = 8\nvar ATTR_VALUE_SQ = 9, ATTR_VALUE_DQ = 10\nvar ATTR_EQ = 11, ATTR_BREAK = 12\n\nmodule.exports = function (h, opts) {\n h = attrToProp(h)\n if (!opts) opts = {}\n var concat = opts.concat || function (a, b) {\n return String(a) + String(b)\n }\n\n return function (strings) {\n var state = TEXT, reg = ''\n var arglen = arguments.length\n var parts = []\n\n for (var i = 0; i < strings.length; i++) {\n if (i < arglen - 1) {\n var arg = arguments[i+1]\n var p = parse(strings[i])\n var xstate = state\n if (xstate === ATTR_VALUE_DQ) xstate = ATTR_VALUE\n if (xstate === ATTR_VALUE_SQ) xstate = ATTR_VALUE\n if (xstate === ATTR_VALUE_W) xstate = ATTR_VALUE\n if (xstate === ATTR) xstate = ATTR_KEY\n p.push([ VAR, xstate, arg ])\n parts.push.apply(parts, p)\n } else parts.push.apply(parts, parse(strings[i]))\n }\n\n var tree = [null,{},[]]\n var stack = [[tree,-1]]\n for (var i = 0; i < parts.length; i++) {\n var cur = stack[stack.length-1][0]\n var p = parts[i], s = p[0]\n if (s === OPEN && /^\\//.test(p[1])) {\n var ix = stack[stack.length-1][1]\n if (stack.length > 1) {\n stack.pop()\n stack[stack.length-1][0][2][ix] = h(\n cur[0], cur[1], cur[2].length ? cur[2] : undefined\n )\n }\n } else if (s === OPEN) {\n var c = [p[1],{},[]]\n cur[2].push(c)\n stack.push([c,cur[2].length-1])\n } else if (s === ATTR_KEY || (s === VAR && p[1] === ATTR_KEY)) {\n var key = ''\n var copyKey\n for (; i < parts.length; i++) {\n if (parts[i][0] === ATTR_KEY) {\n key = concat(key, parts[i][1])\n } else if (parts[i][0] === VAR && parts[i][1] === ATTR_KEY) {\n if (typeof parts[i][2] === 'object' && !key) {\n for (copyKey in parts[i][2]) {\n if (parts[i][2].hasOwnProperty(copyKey) && !cur[1][copyKey]) {\n cur[1][copyKey] = parts[i][2][copyKey]\n }\n }\n } else {\n key = concat(key, parts[i][2])\n }\n } else break\n }\n if (parts[i][0] === ATTR_EQ) i++\n var j = i\n for (; i < parts.length; i++) {\n if (parts[i][0] === ATTR_VALUE || parts[i][0] === ATTR_KEY) {\n if (!cur[1][key]) cur[1][key] = strfn(parts[i][1])\n else cur[1][key] = concat(cur[1][key], parts[i][1])\n } else if (parts[i][0] === VAR\n && (parts[i][1] === ATTR_VALUE || parts[i][1] === ATTR_KEY)) {\n if (!cur[1][key]) cur[1][key] = strfn(parts[i][2])\n else cur[1][key] = concat(cur[1][key], parts[i][2])\n } else {\n if (key.length && !cur[1][key] && i === j\n && (parts[i][0] === CLOSE || parts[i][0] === ATTR_BREAK)) {\n // https://html.spec.whatwg.org/multipage/infrastructure.html#boolean-attributes\n // empty string is falsy, not well behaved value in browser\n cur[1][key] = key.toLowerCase()\n }\n break\n }\n }\n } else if (s === ATTR_KEY) {\n cur[1][p[1]] = true\n } else if (s === VAR && p[1] === ATTR_KEY) {\n cur[1][p[2]] = true\n } else if (s === CLOSE) {\n if (selfClosing(cur[0]) && stack.length) {\n var ix = stack[stack.length-1][1]\n stack.pop()\n stack[stack.length-1][0][2][ix] = h(\n cur[0], cur[1], cur[2].length ? cur[2] : undefined\n )\n }\n } else if (s === VAR && p[1] === TEXT) {\n if (p[2] === undefined || p[2] === null) p[2] = ''\n else if (!p[2]) p[2] = concat('', p[2])\n if (Array.isArray(p[2][0])) {\n cur[2].push.apply(cur[2], p[2])\n } else {\n cur[2].push(p[2])\n }\n } else if (s === TEXT) {\n cur[2].push(p[1])\n } else if (s === ATTR_EQ || s === ATTR_BREAK) {\n // no-op\n } else {\n throw new Error('unhandled: ' + s)\n }\n }\n\n if (tree[2].length > 1 && /^\\s*$/.test(tree[2][0])) {\n tree[2].shift()\n }\n\n if (tree[2].length > 2\n || (tree[2].length === 2 && /\\S/.test(tree[2][1]))) {\n throw new Error(\n 'multiple root elements must be wrapped in an enclosing tag'\n )\n }\n if (Array.isArray(tree[2][0]) && typeof tree[2][0][0] === 'string'\n && Array.isArray(tree[2][0][2])) {\n tree[2][0] = h(tree[2][0][0], tree[2][0][1], tree[2][0][2])\n }\n return tree[2][0]\n\n function parse (str) {\n var res = []\n if (state === ATTR_VALUE_W) state = ATTR\n for (var i = 0; i < str.length; i++) {\n var c = str.charAt(i)\n if (state === TEXT && c === '<') {\n if (reg.length) res.push([TEXT, reg])\n reg = ''\n state = OPEN\n } else if (c === '>' && !quot(state)) {\n if (state === OPEN) {\n res.push([OPEN,reg])\n } else if (state === ATTR_KEY) {\n res.push([ATTR_KEY,reg])\n } else if (state === ATTR_VALUE && reg.length) {\n res.push([ATTR_VALUE,reg])\n }\n res.push([CLOSE])\n reg = ''\n state = TEXT\n } else if (state === TEXT) {\n reg += c\n } else if (state === OPEN && /\\s/.test(c)) {\n res.push([OPEN, reg])\n reg = ''\n state = ATTR\n } else if (state === OPEN) {\n reg += c\n } else if (state === ATTR && /[\\w-]/.test(c)) {\n state = ATTR_KEY\n reg = c\n } else if (state === ATTR && /\\s/.test(c)) {\n if (reg.length) res.push([ATTR_KEY,reg])\n res.push([ATTR_BREAK])\n } else if (state === ATTR_KEY && /\\s/.test(c)) {\n res.push([ATTR_KEY,reg])\n reg = ''\n state = ATTR_KEY_W\n } else if (state === ATTR_KEY && c === '=') {\n res.push([ATTR_KEY,reg],[ATTR_EQ])\n reg = ''\n state = ATTR_VALUE_W\n } else if (state === ATTR_KEY) {\n reg += c\n } else if ((state === ATTR_KEY_W || state === ATTR) && c === '=') {\n res.push([ATTR_EQ])\n state = ATTR_VALUE_W\n } else if ((state === ATTR_KEY_W || state === ATTR) && !/\\s/.test(c)) {\n res.push([ATTR_BREAK])\n if (/[\\w-]/.test(c)) {\n reg += c\n state = ATTR_KEY\n } else state = ATTR\n } else if (state === ATTR_VALUE_W && c === '\"') {\n state = ATTR_VALUE_DQ\n } else if (state === ATTR_VALUE_W && c === \"'\") {\n state = ATTR_VALUE_SQ\n } else if (state === ATTR_VALUE_DQ && c === '\"') {\n res.push([ATTR_VALUE,reg],[ATTR_BREAK])\n reg = ''\n state = ATTR\n } else if (state === ATTR_VALUE_SQ && c === \"'\") {\n res.push([ATTR_VALUE,reg],[ATTR_BREAK])\n reg = ''\n state = ATTR\n } else if (state === ATTR_VALUE_W && !/\\s/.test(c)) {\n state = ATTR_VALUE\n i--\n } else if (state === ATTR_VALUE && /\\s/.test(c)) {\n res.push([ATTR_VALUE,reg],[ATTR_BREAK])\n reg = ''\n state = ATTR\n } else if (state === ATTR_VALUE || state === ATTR_VALUE_SQ\n || state === ATTR_VALUE_DQ) {\n reg += c\n }\n }\n if (state === TEXT && reg.length) {\n res.push([TEXT,reg])\n reg = ''\n } else if (state === ATTR_VALUE && reg.length) {\n res.push([ATTR_VALUE,reg])\n reg = ''\n } else if (state === ATTR_VALUE_DQ && reg.length) {\n res.push([ATTR_VALUE,reg])\n reg = ''\n } else if (state === ATTR_VALUE_SQ && reg.length) {\n res.push([ATTR_VALUE,reg])\n reg = ''\n } else if (state === ATTR_KEY) {\n res.push([ATTR_KEY,reg])\n reg = ''\n }\n return res\n }\n }\n\n function strfn (x) {\n if (typeof x === 'function') return x\n else if (typeof x === 'string') return x\n else if (x && typeof x === 'object') return x\n else return concat('', x)\n }\n}\n\nfunction quot (state) {\n return state === ATTR_VALUE_SQ || state === ATTR_VALUE_DQ\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty\nfunction has (obj, key) { return hasOwn.call(obj, key) }\n\nvar closeRE = RegExp('^(' + [\n 'area', 'base', 'basefont', 'bgsound', 'br', 'col', 'command', 'embed',\n 'frame', 'hr', 'img', 'input', 'isindex', 'keygen', 'link', 'meta', 'param',\n 'source', 'track', 'wbr',\n // SVG TAGS\n 'animate', 'animateTransform', 'circle', 'cursor', 'desc', 'ellipse',\n 'feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite',\n 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap',\n 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR',\n 'feGaussianBlur', 'feImage', 'feMergeNode', 'feMorphology',\n 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile',\n 'feTurbulence', 'font-face-format', 'font-face-name', 'font-face-uri',\n 'glyph', 'glyphRef', 'hkern', 'image', 'line', 'missing-glyph', 'mpath',\n 'path', 'polygon', 'polyline', 'rect', 'set', 'stop', 'tref', 'use', 'view',\n 'vkern'\n].join('|') + ')(?:[\\.#][a-zA-Z0-9\\u007F-\\uFFFF_:-]+)*$')\nfunction selfClosing (tag) { return closeRE.test(tag) }\n","/* global MutationObserver */\nvar document = require('global/document')\nvar window = require('global/window')\nvar watch = Object.create(null)\nvar KEY_ID = 'onloadid' + (new Date() % 9e6).toString(36)\nvar KEY_ATTR = 'data-' + KEY_ID\nvar INDEX = 0\n\nif (window && window.MutationObserver) {\n var observer = new MutationObserver(function (mutations) {\n if (Object.keys(watch).length < 1) return\n for (var i = 0; i < mutations.length; i++) {\n if (mutations[i].attributeName === KEY_ATTR) {\n eachAttr(mutations[i], turnon, turnoff)\n continue\n }\n eachMutation(mutations[i].removedNodes, turnoff)\n eachMutation(mutations[i].addedNodes, turnon)\n }\n })\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeOldValue: true,\n attributeFilter: [KEY_ATTR]\n })\n}\n\nmodule.exports = function onload (el, on, off, caller) {\n on = on || function () {}\n off = off || function () {}\n el.setAttribute(KEY_ATTR, 'o' + INDEX)\n watch['o' + INDEX] = [on, off, 0, caller || onload.caller]\n INDEX += 1\n return el\n}\n\nfunction turnon (index, el) {\n if (watch[index][0] && watch[index][2] === 0) {\n watch[index][0](el)\n watch[index][2] = 1\n }\n}\n\nfunction turnoff (index, el) {\n if (watch[index][1] && watch[index][2] === 1) {\n watch[index][1](el)\n watch[index][2] = 0\n }\n}\n\nfunction eachAttr (mutation, on, off) {\n var newValue = mutation.target.getAttribute(KEY_ATTR)\n if (sameOrigin(mutation.oldValue, newValue)) {\n watch[newValue] = watch[mutation.oldValue]\n return\n }\n if (watch[mutation.oldValue]) {\n off(mutation.oldValue, mutation.target)\n }\n if (watch[newValue]) {\n on(newValue, mutation.target)\n }\n}\n\nfunction sameOrigin (oldValue, newValue) {\n if (!oldValue || !newValue) return false\n return watch[oldValue][3] === watch[newValue][3]\n}\n\nfunction eachMutation (nodes, fn) {\n var keys = Object.keys(watch)\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i] && nodes[i].getAttribute && nodes[i].getAttribute(KEY_ATTR)) {\n var onloadid = nodes[i].getAttribute(KEY_ATTR)\n keys.forEach(function (k) {\n if (onloadid === k) {\n fn(k, nodes[i])\n }\n })\n }\n if (nodes[i].childNodes.length > 0) {\n eachMutation(nodes[i].childNodes, fn)\n }\n }\n}\n","var topLevel = typeof global !== 'undefined' ? global :\n typeof window !== 'undefined' ? window : {}\nvar minDoc = require('min-document');\n\nif (typeof document !== 'undefined') {\n module.exports = document;\n} else {\n var doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];\n\n if (!doccy) {\n doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;\n }\n\n module.exports = doccy;\n}\n","// Copyright 2014 Simon Lydell\r\n// X11 (“MIT”) Licensed. (See LICENSE.)\r\n\r\nvoid (function(root, factory) {\r\n if (typeof define === \"function\" && define.amd) {\r\n define(factory)\r\n } else if (typeof exports === \"object\") {\r\n module.exports = factory()\r\n } else {\r\n root.resolveUrl = factory()\r\n }\r\n}(this, function() {\r\n\r\n function resolveUrl(/* ...urls */) {\r\n var numUrls = arguments.length\r\n\r\n if (numUrls === 0) {\r\n throw new Error(\"resolveUrl requires at least one argument; got none.\")\r\n }\r\n\r\n var base = document.createElement(\"base\")\r\n base.href = arguments[0]\r\n\r\n if (numUrls === 1) {\r\n return base.href\r\n }\r\n\r\n var head = document.getElementsByTagName(\"head\")[0]\r\n head.insertBefore(base, head.firstChild)\r\n\r\n var a = document.createElement(\"a\")\r\n var resolved\r\n\r\n for (var index = 1; index < numUrls; index++) {\r\n a.href = arguments[index]\r\n resolved = a.href\r\n base.href = resolved\r\n }\r\n\r\n head.removeChild(base)\r\n\r\n return resolved\r\n }\r\n\r\n return resolveUrl\r\n\r\n}));\r\n","module.exports = attributeToProperty\n\nvar transform = {\n 'class': 'className',\n 'for': 'htmlFor',\n 'http-equiv': 'httpEquiv'\n}\n\nfunction attributeToProperty (h) {\n return function (tagName, attrs, children) {\n for (var attr in attrs) {\n if (attr in transform) {\n attrs[transform[attr]] = attrs[attr]\n delete attrs[attr]\n }\n }\n return h(tagName, attrs, children)\n }\n}\n","if (typeof window !== \"undefined\") {\n module.exports = window;\n} else if (typeof global !== \"undefined\") {\n module.exports = global;\n} else if (typeof self !== \"undefined\"){\n module.exports = self;\n} else {\n module.exports = {};\n}\n"]}
\No newline at end of file