imerss-bioinfo 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -54,5 +54,5 @@ function(factory){"use strict";"function"==typeof define&&define.amd?define(["jq
54
54
  * Released under the MIT license.
55
55
  * http://jquery.org/license
56
56
  */
57
- function(factory){"use strict";"function"==typeof define&&define.amd?define(["jquery","../keycode","../position","../unique-id","../version","../widget"],factory):factory(jQuery)}((function($){"use strict";return $.widget("ui.tooltip",{version:"1.13.1",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var title=$(this).attr("title");return $("<a>").text(title).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(elem,id){var describedby=(elem.attr("aria-describedby")||"").split(/\s+/);describedby.push(id),elem.data("ui-tooltip-id",id).attr("aria-describedby",String.prototype.trim.call(describedby.join(" ")))},_removeDescribedBy:function(elem){var id=elem.data("ui-tooltip-id"),describedby=(elem.attr("aria-describedby")||"").split(/\s+/),index=$.inArray(id,describedby);-1!==index&&describedby.splice(index,1),elem.removeData("ui-tooltip-id"),(describedby=String.prototype.trim.call(describedby.join(" ")))?elem.attr("aria-describedby",describedby):elem.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=$("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=$([])},_setOption:function(key,value){var that=this;this._super(key,value),"content"===key&&$.each(this.tooltips,(function(id,tooltipData){that._updateContent(tooltipData.element)}))},_setOptionDisabled:function(value){this[value?"_disable":"_enable"]()},_disable:function(){var that=this;$.each(this.tooltips,(function(id,tooltipData){var event=$.Event("blur");event.target=event.currentTarget=tooltipData.element[0],that.close(event,!0)})),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter((function(){var element=$(this);if(element.is("[title]"))return element.data("ui-tooltip-title",element.attr("title")).removeAttr("title")})))},_enable:function(){this.disabledTitles.each((function(){var element=$(this);element.data("ui-tooltip-title")&&element.attr("title",element.data("ui-tooltip-title"))})),this.disabledTitles=$([])},open:function(event){var that=this,target=$(event?event.target:this.element).closest(this.options.items);target.length&&!target.data("ui-tooltip-id")&&(target.attr("title")&&target.data("ui-tooltip-title",target.attr("title")),target.data("ui-tooltip-open",!0),event&&"mouseover"===event.type&&target.parents().each((function(){var blurEvent,parent=$(this);parent.data("ui-tooltip-open")&&((blurEvent=$.Event("blur")).target=blurEvent.currentTarget=this,that.close(blurEvent,!0)),parent.attr("title")&&(parent.uniqueId(),that.parents[this.id]={element:this,title:parent.attr("title")},parent.attr("title",""))})),this._registerCloseHandlers(event,target),this._updateContent(target,event))},_updateContent:function(target,event){var content,contentOption=this.options.content,that=this,eventType=event?event.type:null;if("string"==typeof contentOption||contentOption.nodeType||contentOption.jquery)return this._open(event,target,contentOption);(content=contentOption.call(target[0],(function(response){that._delay((function(){target.data("ui-tooltip-open")&&(event&&(event.type=eventType),this._open(event,target,response))}))})))&&this._open(event,target,content)},_open:function(event,target,content){var tooltipData,tooltip,delayedShow,a11yContent,positionOption=$.extend({},this.options.position);function position(event){positionOption.of=event,tooltip.is(":hidden")||tooltip.position(positionOption)}content&&((tooltipData=this._find(target))?tooltipData.tooltip.find(".ui-tooltip-content").html(content):(target.is("[title]")&&(event&&"mouseover"===event.type?target.attr("title",""):target.removeAttr("title")),tooltipData=this._tooltip(target),tooltip=tooltipData.tooltip,this._addDescribedBy(target,tooltip.attr("id")),tooltip.find(".ui-tooltip-content").html(content),this.liveRegion.children().hide(),(a11yContent=$("<div>").html(tooltip.find(".ui-tooltip-content").html())).removeAttr("name").find("[name]").removeAttr("name"),a11yContent.removeAttr("id").find("[id]").removeAttr("id"),a11yContent.appendTo(this.liveRegion),this.options.track&&event&&/^mouse/.test(event.type)?(this._on(this.document,{mousemove:position}),position(event)):tooltip.position($.extend({of:target},this.options.position)),tooltip.hide(),this._show(tooltip,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(delayedShow=this.delayedShow=setInterval((function(){tooltip.is(":visible")&&(position(positionOption.of),clearInterval(delayedShow))}),13)),this._trigger("open",event,{tooltip:tooltip})))},_registerCloseHandlers:function(event,target){var events={keyup:function(event){if(event.keyCode===$.ui.keyCode.ESCAPE){var fakeEvent=$.Event(event);fakeEvent.currentTarget=target[0],this.close(fakeEvent,!0)}}};target[0]!==this.element[0]&&(events.remove=function(){var targetElement=this._find(target);targetElement&&this._removeTooltip(targetElement.tooltip)}),event&&"mouseover"!==event.type||(events.mouseleave="close"),event&&"focusin"!==event.type||(events.focusout="close"),this._on(!0,target,events)},close:function(event){var tooltip,that=this,target=$(event?event.currentTarget:this.element),tooltipData=this._find(target);tooltipData?(tooltip=tooltipData.tooltip,tooltipData.closing||(clearInterval(this.delayedShow),target.data("ui-tooltip-title")&&!target.attr("title")&&target.attr("title",target.data("ui-tooltip-title")),this._removeDescribedBy(target),tooltipData.hiding=!0,tooltip.stop(!0),this._hide(tooltip,this.options.hide,(function(){that._removeTooltip($(this))})),target.removeData("ui-tooltip-open"),this._off(target,"mouseleave focusout keyup"),target[0]!==this.element[0]&&this._off(target,"remove"),this._off(this.document,"mousemove"),event&&"mouseleave"===event.type&&$.each(this.parents,(function(id,parent){$(parent.element).attr("title",parent.title),delete that.parents[id]})),tooltipData.closing=!0,this._trigger("close",event,{tooltip:tooltip}),tooltipData.hiding||(tooltipData.closing=!1))):target.removeData("ui-tooltip-open")},_tooltip:function(element){var tooltip=$("<div>").attr("role","tooltip"),content=$("<div>").appendTo(tooltip),id=tooltip.uniqueId().attr("id");return this._addClass(content,"ui-tooltip-content"),this._addClass(tooltip,"ui-tooltip","ui-widget ui-widget-content"),tooltip.appendTo(this._appendTo(element)),this.tooltips[id]={element:element,tooltip:tooltip}},_find:function(target){var id=target.data("ui-tooltip-id");return id?this.tooltips[id]:null},_removeTooltip:function(tooltip){clearInterval(this.delayedShow),tooltip.remove(),delete this.tooltips[tooltip.attr("id")]},_appendTo:function(target){var element=target.closest(".ui-front, dialog");return element.length||(element=this.document[0].body),element},_destroy:function(){var that=this;$.each(this.tooltips,(function(id,tooltipData){var event=$.Event("blur"),element=tooltipData.element;event.target=event.currentTarget=element[0],that.close(event,!0),$("#"+id).remove(),element.data("ui-tooltip-title")&&(element.attr("title")||element.attr("title",element.data("ui-tooltip-title")),element.removeData("ui-tooltip-title"))})),this.liveRegion.remove()}}),!1!==$.uiBackCompat&&$.widget("ui.tooltip",$.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var tooltipData=this._superApply(arguments);return this.options.tooltipClass&&tooltipData.tooltip.addClass(this.options.tooltipClass),tooltipData}}),$.ui.tooltip}));"use strict";var fluid=fluid||{};!function($){fluid.thatistBridge=function(name,peer){var togo=function(funcname){for(var segs=funcname.split("."),move=peer,i=0;i<segs.length;++i)move=move[segs[i]];var args=[this];2===arguments.length&&(args=args.concat($.makeArray(arguments[1])));var ret=move.apply(null,args);return this.that=function(){return ret},ret&&ret.constructor&&"fluid.componentConstructor"===ret.constructor.name?this:ret};return $.fn[name]=togo,togo},fluid.thatistBridge("fluid",fluid);var canHaveDefaultTabindex=function(elements){return!(elements.length<=0)&&$(elements[0]).is("a, input, button, select, area, textarea, object")};fluid.tabindex=function(target,toIndex){return target=$(target),null!=toIndex?function(elements,toIndex){return elements.each((function(i,item){$(item).attr("tabindex",toIndex)}))}(target,toIndex):function(elements){if(!(elements.length<=0)){if(!fluid.tabindex.hasAttr(elements))return canHaveDefaultTabindex(elements)?Number(0):void 0;var value=elements.attr("tabindex");return Number(value)}}(target)},fluid.tabindex.remove=function(target){return(target=$(target)).each((function(i,item){$(item).removeAttr("tabindex")}))},fluid.tabindex.hasAttr=function(target){if((target=$(target)).length<=0)return!1;var togo=target.map((function(){var attributeNode=this.getAttributeNode("tabindex");return!!attributeNode&&attributeNode.specified}));return 1===togo.length?togo[0]:togo},fluid.tabindex.has=function(target){return target=$(target),fluid.tabindex.hasAttr(target)||canHaveDefaultTabindex(target)},fluid.a11y=$.a11y||{},fluid.a11y.orientation={HORIZONTAL:0,VERTICAL:1,BOTH:2};var UP_DOWN_KEYMAP={next:$.ui.keyCode.DOWN,previous:$.ui.keyCode.UP},LEFT_RIGHT_KEYMAP={next:$.ui.keyCode.RIGHT,previous:$.ui.keyCode.LEFT};fluid.tabbable=function(target){target=$(target),target.each((function(idx,item){(!(item=$(item)).fluid("tabindex.has")||item.fluid("tabindex")<0)&&item.fluid("tabindex",0)}))};var CONTEXT_KEY="selectionContext",unselectElement=function(selectedElement,selectionContext){!function(selectedElement,handler){handler&&selectedElement&&handler(selectedElement)}(selectedElement,selectionContext.options.onUnselect)},selectElement=function(elementToSelect,selectionContext){var element;unselectElement(selectionContext.selectedElement(),selectionContext),elementToSelect=(element=elementToSelect).jquery?element[0]:element;var newIndex=selectionContext.selectables.index(elementToSelect);-1!==newIndex&&(selectionContext.activeItemIndex=newIndex,function(elementToSelect,handler){handler&&handler(elementToSelect)}(elementToSelect,selectionContext.options.onSelect))},reifyIndex=async function(sc_that){var elements=sc_that.selectables;if(sc_that.activeItemIndex>=elements.length&&(sc_that.activeItemIndex=sc_that.options.noWrap?elements.length-1:0),sc_that.activeItemIndex<0&&-32768!==sc_that.activeItemIndex&&(sc_that.activeItemIndex=sc_that.options.noWrap?0:elements.length-1),sc_that.activeItemIndex>=0)return fluid.focus(elements[sc_that.activeItemIndex])},prepareShift=async function(selectionContext){var selElm=selectionContext.selectedElement();selElm&&await fluid.blur(selElm),unselectElement(selectionContext.selectedElement(),selectionContext),-32768===selectionContext.activeItemIndex&&(selectionContext.activeItemIndex=-1)},focusNextElement=async function(selectionContext){return await prepareShift(selectionContext),++selectionContext.activeItemIndex,reifyIndex(selectionContext)},focusPreviousElement=async function(selectionContext){return await prepareShift(selectionContext),--selectionContext.activeItemIndex,reifyIndex(selectionContext)},arrowKeyHandler=function(selectionContext,keyMap){return async function(evt){evt.which===keyMap.next?(await focusNextElement(selectionContext),evt.preventDefault()):evt.which===keyMap.previous&&(await focusPreviousElement(selectionContext),evt.preventDefault())}},makeElementsSelectable=function(container,defaults,userOptions){var selectionContext,options=$.extend(!0,{},defaults,userOptions),keyMap=function(direction){var keyMap;return direction===fluid.a11y.orientation.HORIZONTAL?keyMap=LEFT_RIGHT_KEYMAP:direction===fluid.a11y.orientation.VERTICAL&&(keyMap=UP_DOWN_KEYMAP),keyMap}(options.direction),selectableElements=options.selectableElements?options.selectableElements:container.find(options.selectableSelector),that={container:container,activeItemIndex:-32768,selectables:selectableElements,focusIsLeavingContainer:!1,options:options};return that.selectablesUpdated=async function(focusedItem){var selectionContext;if("number"==typeof that.options.selectablesTabindex&&that.selectables.fluid("tabindex",that.options.selectablesTabindex),that.selectables.off("focus."+CONTEXT_KEY),that.selectables.off("blur."+CONTEXT_KEY),that.selectables.on("focus."+CONTEXT_KEY,(selectionContext=that,function(evt){return $(evt.target).fluid("tabindex",0),selectElement(evt.target,selectionContext),evt.stopPropagation()})),that.selectables.on("blur."+CONTEXT_KEY,function(selectionContext){return function(evt){return $(evt.target).fluid("tabindex",selectionContext.options.selectablesTabindex),unselectElement(evt.target,selectionContext),evt.stopPropagation()}}(that)),keyMap&&that.options.noBubbleListeners&&(that.selectables.off("keydown."+CONTEXT_KEY),that.selectables.on("keydown."+CONTEXT_KEY,arrowKeyHandler(that,keyMap))),!focusedItem)return reifyIndex(that);selectElement(focusedItem,that)},that.refresh=async function(){return that.options.selectableSelector||fluid.fail("Cannot refresh selectable context which was not initialised by a selector"),that.selectables=container.find(options.selectableSelector),that.selectablesUpdated()},that.selectedElement=function(){return that.activeItemIndex<0?null:that.selectables[that.activeItemIndex]},keyMap&&!that.options.noBubbleListeners&&container.on("keydown",arrowKeyHandler(that,keyMap)),container.on("keydown",(selectionContext=that,function(evt){evt.which===$.ui.keyCode.TAB&&(function(selectionContext){-32768!==selectionContext.activeItemIndex&&(selectionContext.options.onLeaveContainer?selectionContext.options.onLeaveContainer(selectionContext.selectables[selectionContext.activeItemIndex]):selectionContext.options.onUnselect&&selectionContext.options.onUnselect(selectionContext.selectables[selectionContext.activeItemIndex])),selectionContext.options.rememberSelectionState||(selectionContext.activeItemIndex=-32768)}(selectionContext),evt.shiftKey&&(selectionContext.focusIsLeavingContainer=!0))})),container.on("focus",function(selectionContext){return async function(evt){var shouldOrig=selectionContext.options.autoSelectFirstItem,shouldSelect="function"==typeof shouldOrig?shouldOrig():shouldOrig;return selectionContext.focusIsLeavingContainer&&(shouldSelect=!1),shouldSelect&&evt.target===selectionContext.container.get(0)&&(-32768===selectionContext.activeItemIndex&&(selectionContext.activeItemIndex=0),await fluid.focus(selectionContext.selectables[selectionContext.activeItemIndex])),evt.stopPropagation()}}(that)),container.on("blur",function(selectionContext){return function(evt){return selectionContext.focusIsLeavingContainer=!1,evt.stopPropagation()}}(that)),that.promise=that.selectablesUpdated(),that};fluid.selectable=function(target,options){target=$(target);var that=makeElementsSelectable(target,fluid.selectable.defaults,options);return fluid.setScopedData(target,CONTEXT_KEY,that),that},fluid.selectable.select=async function(target,toSelect){return fluid.focus(toSelect)},fluid.selectable.selectNext=async function(target){return target=$(target),focusNextElement(fluid.getScopedData(target,CONTEXT_KEY))},fluid.selectable.selectPrevious=async function(target){return target=$(target),focusPreviousElement(fluid.getScopedData(target,CONTEXT_KEY))},fluid.selectable.currentSelection=function(target){target=$(target);var that=fluid.getScopedData(target,CONTEXT_KEY);return $(that.selectedElement())},fluid.selectable.defaults={direction:fluid.a11y.orientation.VERTICAL,selectablesTabindex:-1,autoSelectFirstItem:!0,rememberSelectionState:!0,selectableSelector:".selectable",selectableElements:null,onSelect:null,onUnselect:null,onLeaveContainer:null,noWrap:!1};var makeActivationHandler=function(binding){return function(evt){var target=evt.target;if(fluid.enabled(target)&&((evt.which?evt.which:evt.keyCode)===binding.key&&binding.activateHandler&&function(binding,evt){if(!binding.modifier)return!0;var modifierKey=binding.modifier,isCtrlKeyPresent=modifierKey&&evt.ctrlKey,isAltKeyPresent=modifierKey&&evt.altKey,isShiftKeyPresent=modifierKey&&evt.shiftKey;return isCtrlKeyPresent||isAltKeyPresent||isShiftKeyPresent}(binding,evt))){var event=$.Event("fluid-activate");$(target).trigger(event,[binding.activateHandler]),event.isDefaultPrevented()&&evt.preventDefault()}}};fluid.activatable=function(target,fn,options){!function(elements,onActivateHandler,defaultKeys,options){var bindings=[];$(defaultKeys).each((function(index,key){bindings.push({modifier:null,key:key,activateHandler:onActivateHandler})})),options&&options.additionalBindings&&(bindings=bindings.concat(options.additionalBindings)),fluid.initEnablement(elements);for(var i=0;i<bindings.length;++i){var binding=bindings[i];elements.on("keydown",makeActivationHandler(binding))}elements.on("fluid-activate",(function(evt,handler){return(handler=handler||onActivateHandler)?handler(evt):null}))}(target=$(target),fn,fluid.activatable.defaults.keys,options)},fluid.activate=function(target){$(target).trigger("fluid-activate")},fluid.activatable.defaults={keys:[$.ui.keyCode.ENTER,$.ui.keyCode.SPACE]}}(jQuery);var fluid=fluid||{};fluid.version="Infusion 4.0.0",fluid.Error=Error,fluid.environment={fluid:fluid},fluid.global=fluid.global||"undefined"!=typeof window?window:"undefined"!=typeof self?self:{},fluid.invokeLater=function(func){return setTimeout(func,0)},fluid.defeatLogging=!0,fluid.activityTracing=!1,fluid.activityTrace=[];var activityParser=/(%\w+)/g;function transformInternal(source,togo,key,transformations){for(var transit=source[key],j=0;j<transformations.length;++j)transit=transformations[j](transit,key);transit!==fluid.NO_VALUE&&(togo[key]=transit)}fluid.renderActivityArgument=function(arg){return fluid.isComponent(arg)?fluid.dumpComponentAndPath(arg):arg},fluid.renderOneActivity=function(activity,nowhile){for(var togo=!0===nowhile?[]:[" while "],message=activity.message,index=activityParser.lastIndex=0;;){var match=activityParser.exec(message);if(!match)break;var key=match[1].substring(1);togo.push(message.substring(index,match.index)),togo.push(fluid.renderActivityArgument(activity.args[key])),index=activityParser.lastIndex}return index<message.length&&togo.push(message.substring(index)),togo},fluid.renderActivity=function(activityStack,renderer){return renderer=renderer||fluid.renderOneActivity,fluid.transform(activityStack,renderer)},fluid.singleThreadLocal=function(initFunc){var value=initFunc();return function(newValue){return void 0===newValue?value:value=newValue}},fluid.threadLocal=fluid.singleThreadLocal,fluid.globalThreadLocal=fluid.threadLocal((function(){return{}})),fluid.getActivityStack=function(){var root=fluid.globalThreadLocal();return root.activityStack||(root.activityStack=[]),root.activityStack},fluid.describeActivity=fluid.getActivityStack,fluid.logActivity=function(activity){activity=activity||fluid.describeActivity();var rendered=fluid.renderActivity(activity).reverse();rendered.length>0&&(fluid.log("Current activity: "),fluid.each(rendered,(function(args){fluid.log.apply(null,args)})))},fluid.pushActivity=function(type,message,args){var record={type:type,message:message,args:args,time:(new Date).getTime()};fluid.activityTracing&&fluid.activityTrace.push(record),fluid.passLogLevel(fluid.logLevel.TRACE)&&fluid.log.apply(null,fluid.renderOneActivity(record,!0)),fluid.getActivityStack().push(record)},fluid.popActivity=function(popframes){popframes=popframes||1,fluid.activityTracing&&fluid.activityTrace.push({pop:popframes});var activityStack=fluid.getActivityStack(),popped=activityStack.length-popframes;activityStack.length=popped<0?0:popped},fluid.FluidError=function(){var togo=Error.apply(this,arguments);this.message=togo.message;try{throw togo}catch(togo){this.stack=togo.stack}return this},fluid.FluidError.prototype=Object.create(Error.prototype),fluid.logFailure=function(args,activity){fluid.log.apply(null,[fluid.logLevel.FAIL,"ASSERTION FAILED: "].concat(args)),fluid.logActivity(activity)},fluid.renderLoggingArg=function(arg){return void 0===arg?"undefined":fluid.isPrimitive(arg)||!fluid.isPlainObject(arg)?arg:JSON.stringify(arg)},fluid.builtinFail=function(args){var message=fluid.transform(args,fluid.renderLoggingArg).join("");throw new fluid.FluidError("Assertion failure - check console for more details: "+message)},fluid.fail=function(...messages){var activity=fluid.makeArray(fluid.describeActivity());fluid.popActivity(activity.length),fluid.failureEvent?fluid.failureEvent.fire(messages,activity):(fluid.logFailure(messages,activity),fluid.builtinFail(messages,activity))},fluid.notrycatch=!1,fluid.tryCatch=function(tryfun,catchfun,finallyfun){if(finallyfun=finallyfun||fluid.identity,fluid.notrycatch){var togo=tryfun();return finallyfun(),togo}try{return tryfun()}catch(e){if(!catchfun)throw e;catchfun(e)}finally{finallyfun()}},fluid.expect=function(name,target,members){fluid.transform(fluid.makeArray(members),(function(key){void 0===target[key]&&fluid.fail(name+" missing required member "+key)}))},fluid.isLogging=function(){return logLevelStack[0].priority>fluid.logLevel.IMPORTANT.priority},fluid.isLogLevel=function(arg){return fluid.isMarker(arg)&&void 0!==arg.priority},fluid.passLogLevel=function(testLogLevel){return testLogLevel.priority<=logLevelStack[0].priority},fluid.setLogging=function(enabled){var logLevel;"boolean"==typeof enabled?logLevel=fluid.logLevel[enabled?"INFO":"IMPORTANT"]:fluid.isLogLevel(enabled)?logLevel=enabled:fluid.fail("Unrecognised fluid logging level ",enabled),logLevelStack.unshift(logLevel),fluid.defeatLogging=!fluid.isLogging()},fluid.setLogLevel=fluid.setLogging,fluid.popLogging=function(){var togo=1===logLevelStack.length?logLevelStack[0]:logLevelStack.shift();return fluid.defeatLogging=!fluid.isLogging(),togo},fluid.doBrowserLog=function(args){"undefined"!=typeof console&&(console.debug?console.debug.apply(console,args):"function"==typeof console.log&&console.log.apply(console,args))},fluid.log=function(){var directArgs=fluid.makeArray(arguments),userLogLevel=fluid.logLevel.INFO;fluid.isLogLevel(directArgs[0])&&(userLogLevel=directArgs.shift()),fluid.passLogLevel(userLogLevel)&&fluid.loggingEvent.fire(directArgs)},fluid.isValue=function(value){return null!=value},fluid.isPrimitive=function(value){var valueType=typeof value;return!value||"string"===valueType||"boolean"===valueType||"number"===valueType||"function"===valueType},fluid.isJQuery=function(totest){return Boolean(totest&&totest.jquery&&totest.constructor&&totest.constructor.prototype&&totest.constructor.prototype.jquery)},fluid.isArrayable=function(totest){return Boolean(totest)&&("[object Array]"===Object.prototype.toString.call(totest)||fluid.isJQuery(totest))},fluid.isPlainObject=function(totest,strict){var string=Object.prototype.toString.call(totest);return"[object Array]"===string?!strict:"[object Object]"===string&&(!totest.constructor||!totest.constructor.prototype||Object.prototype.hasOwnProperty.call(totest.constructor.prototype,"isPrototypeOf"))},fluid.typeCode=function(totest){return fluid.isPrimitive(totest)||!fluid.isPlainObject(totest)?"primitive":fluid.isArrayable(totest)?"array":"object"},fluid.isIoCReference=function(ref){return"string"==typeof ref&&"{"===ref.charAt(0)},fluid.isReferenceOrExpander=function(ref){return ref&&(fluid.isIoCReference(ref)||ref.expander)},fluid.isDOMNode=function(obj){return obj&&"number"==typeof obj.nodeType},fluid.isComponent=function(obj){return obj&&obj.constructor===fluid.componentConstructor},fluid.isUncopyable=function(totest){return fluid.isPrimitive(totest)||!fluid.isPlainObject(totest)},fluid.isApplicable=function(totest){return totest.apply&&"function"==typeof totest.apply},fluid.identity=function(arg){return arg},fluid.notImplemented=function(){fluid.fail("This operation is not implemented")},fluid.firstDefined=function(a,b){return void 0===a?b:a},fluid.freshContainer=function(tocopy){return fluid.isArrayable(tocopy)?[]:{}},fluid.testStrategyRecursion=function(funcName,segs){segs.length>fluid.strategyRecursionBailout&&fluid.fail("Runaway recursion encountered in "+funcName+" - reached path depth of "+fluid.strategyRecursionBailout+" via path of "+segs.join(".")+"this object is probably circularly connected. Either adjust your object structure to remove the circularity or increase fluid.strategyRecursionBailout")},fluid.copyRecurse=function(tocopy,segs){return fluid.testStrategyRecursion("fluid.copy",segs),fluid.isUncopyable(tocopy)?tocopy:fluid.transform(tocopy,(function(value,key){segs.push(key);var togo=fluid.copyRecurse(value,segs);return segs.pop(),togo}))},fluid.copy=function(tocopy){return fluid.copyRecurse(tocopy,[])},fluid.extend=$.extend,fluid.makeArray=function(arg){var togo=[];if(null!=arg)if(fluid.isPrimitive(arg)||fluid.isPlainObject(arg,!0)||"number"!=typeof arg.length)togo.push(arg);else for(var i=0;i<arg.length;++i)togo[i]=arg[i];return togo},fluid.pushArray=function(holder,member,topush){var array=holder[member]?holder[member]:holder[member]=[];Array.isArray(topush)?array.push.apply(array,topush):array.push(topush)},fluid.transform=function(source,...transformations){if(fluid.isPrimitive(source))return source;var togo=fluid.freshContainer(source);if(fluid.isArrayable(source))for(var i=0;i<source.length;++i)transformInternal(source,togo,i,transformations);else for(var key in source)transformInternal(source,togo,key,transformations);return togo},fluid.forEachInRange=function(array,start,end,func){for(var i=start;i<end;++i)func(array[i],i)},fluid.peek=function(array){return 0===array.length?void 0:array[array.length-1]},fluid.each=function(source,func){if(fluid.isArrayable(source))for(var i=0;i<source.length;++i)func(source[i],i);else for(var key in source)func(source[key],key)},fluid.make_find=function(find_if){var target=!find_if&&void 0;return function(source,func,deffolt){var disp;if(fluid.isArrayable(source)){for(var i=0;i<source.length;++i)if((disp=func(source[i],i))!==target)return find_if?source[i]:disp}else for(var key in source)if((disp=func(source[key],key))!==target)return find_if?source[key]:disp;return deffolt}},fluid.find=fluid.make_find(!1),fluid.find_if=fluid.make_find(!0),fluid.accumulate=function(list,fn,arg){for(var i=0;i<list.length;++i)arg=fn(list[i],arg,i);return arg},fluid.add=function(a,b){return a+b},fluid.remove_if=function(source,fn,target){if(fluid.isArrayable(source))for(var i=source.length-1;i>=0;--i)fn(source[i],i)&&(target&&target.unshift(source[i]),source.splice(i,1));else for(var key in source)fn(source[key],key)&&(target&&(target[key]=source[key]),delete source[key]);return target||source},fluid.generate=function(n,generator,applyFunc){for(var togo=[],i=0;i<n;++i)togo[i]=applyFunc?generator(i):generator;return togo},fluid.iota=function(count,first){first=first||0;for(var togo=[],i=0;i<count;++i)togo[togo.length]=first++;return togo},fluid.getMembers=function(holder,name){return fluid.transform(holder,(function(member){return fluid.get(member,name)}))},fluid.filterKeys=function(toFilter,keys,exclude){return fluid.remove_if($.extend({},toFilter),(function(value,key){return exclude^-1===keys.indexOf(key)}))},fluid.censorKeys=function(toCensor,keys){return fluid.filterKeys(toCensor,keys,!0)},fluid.keys=function(obj){var togo=[];for(var key in obj)togo.push(key);return togo},fluid.values=function(obj){var togo=[];for(var key in obj)togo.push(obj[key]);return togo},fluid.contains=function(obj,value){return obj?fluid.isArrayable(obj)?-1!==obj.indexOf(value):fluid.find(obj,(function(thisValue){if(value===thisValue)return!0})):void 0},fluid.keyForValue=function(obj,value){return fluid.find(obj,(function(thisValue,key){if(value===thisValue)return key}))},fluid.arrayToHash=function(array){var togo={};return fluid.each(array,(function(el){togo[el]=!0})),togo},fluid.stableSort=function(array,func){for(var i=0;i<array.length;i++){var j,k=array[i];for(j=i;j>0&&func(k,array[j-1])<0;j--)array[j]=array[j-1];array[j]=k}},fluid.hashToArray=function(hash,keyName,func){var togo=[];return fluid.each(hash,(function(el,key){var newEl=el;void 0!==keyName&&((newEl={})[keyName]=key),func?newEl=func(newEl,el,key)||newEl:newEl!==el&&$.extend(!0,newEl,el),togo.push(newEl)})),togo},fluid.flatten=function(array){var togo=[];return fluid.each(array,(function(element){fluid.isArrayable(element)?togo=togo.concat(element):togo.push(element)})),togo},fluid.clear=function(target){if(fluid.isArrayable(target))target.length=0;else for(var i in target)delete target[i]},fluid.compareStringLength=function(ascending){return ascending?function(a,b){return a.length-b.length}:function(a,b){return b.length-a.length}},fluid.parseInteger=function(string){return isFinite(string)&&string%1==0?Number(string):NaN},fluid.roundToDecimal=function(num,scale,method){return scale=scale&&scale>=0?Math.round(scale):0,Number("ceil"===method||"floor"===method?Math[method](num+"e"+scale)+"e-"+scale:(num>=0?1:-1)*(Math.round(Math.abs(num)+"e"+scale)+"e-"+scale))},fluid.debounce=function(func,wait,immediate){var timeout,result;return function(){var context=this,args=arguments,later=function(){timeout=null,immediate||(result=func.apply(context,args))},callNow=immediate&&!timeout;return clearTimeout(timeout),timeout=setTimeout(later,wait),callNow&&(result=func.apply(context,args)),result}},fluid.freezeRecursive=function(tofreeze,segs){return segs=segs||[],fluid.testStrategyRecursion("fluid.freezeRecursive",segs),fluid.isPlainObject(tofreeze)?(fluid.each(tofreeze,(function(value,key){segs.push(key),fluid.freezeRecursive(value,segs),segs.pop()})),Object.freeze(tofreeze)):tofreeze},fluid.marker=function(){},fluid.makeMarker=function(value,extra){var togo=Object.create(fluid.marker.prototype);return togo.value=value,fluid.extend(togo,extra),Object.freeze(togo)},fluid.NO_VALUE=fluid.makeMarker("NO_VALUE"),fluid.EXPAND=fluid.makeMarker("EXPAND"),fluid.isMarker=function(totest,type){return totest instanceof fluid.marker&&(!type||totest.value===type.value)},fluid.logLevelsSpec={FATAL:0,FAIL:5,WARN:10,IMPORTANT:12,INFO:15,TRACE:20},fluid.logLevel=fluid.transform(fluid.logLevelsSpec,(function(value,key){return fluid.makeMarker(key,{priority:value})}));var logLevelStack=[fluid.logLevel.IMPORTANT];fluid.model={},fluid.model.copyModel=function(target,source){fluid.clear(target),$.extend(!0,target,source)},fluid.model.parseEL=function(EL){return""===EL?[]:String(EL).split(".")},fluid.model.composePath=function(prefix,suffix){return""===prefix?suffix:""===suffix?prefix:prefix+"."+suffix},fluid.model.composeSegments=function(){return fluid.makeArray(arguments).join(".")},fluid.lastDotIndex=function(path){return path.lastIndexOf(".")},fluid.model.getToTailPath=function(path){var lastdot=fluid.lastDotIndex(path);return-1===lastdot?"":path.substring(0,lastdot)},fluid.model.getTailPath=function(path){var lastdot=fluid.lastDotIndex(path);return path.substring(lastdot+1)},fluid.path=fluid.model.composeSegments,fluid.composePath=fluid.model.composePath,fluid.requireDataBinding=function(){fluid.fail("Please include DataBinding.js in order to operate complex model accessor configuration")},fluid.model.setWithStrategy=fluid.model.getWithStrategy=fluid.requireDataBinding,fluid.model.resolvePathSegment=function(root,segment,create,origEnv){if(!origEnv&&root.resolvePathSegment){var togo=root.resolvePathSegment(segment);if(void 0!==togo)return togo}return create&&void 0===root[segment]?root[segment]={}:root[segment]},fluid.model.parseToSegments=function(EL,parseEL,copy){return"number"==typeof EL||"string"==typeof EL?parseEL(EL):copy?fluid.makeArray(EL):EL},fluid.model.pathToSegments=function(EL,config){var parser=config&&config.parser?config.parser.parse:fluid.model.parseEL;return fluid.model.parseToSegments(EL,parser)},fluid.model.accessImpl=function(root,EL,newValue,config,initSegs,returnSegs,traverser){var segs=fluid.model.pathToSegments(EL,config),initPos=0;if(initSegs&&(initPos=initSegs.length,segs=initSegs.concat(segs)),root=traverser(root,segs,initPos,config,newValue===fluid.NO_VALUE?0:1),newValue===fluid.NO_VALUE)return returnSegs?{root:root,segs:segs}:root;root[fluid.peek(segs)]=newValue},fluid.model.accessSimple=function(root,EL,newValue,environment,initSegs,returnSegs){return fluid.model.accessImpl(root,EL,newValue,environment,initSegs,returnSegs,fluid.model.traverseSimple)},fluid.model.traverseSimple=function(root,segs,initPos,environment,uncess){for(var origEnv=environment,limit=segs.length-uncess,i=0;i<limit;++i){if(!root)return;var segment=segs[i];root=environment&&environment[segment]?environment[segment]:fluid.model.resolvePathSegment(root,segment,1===uncess,origEnv),environment=null}return root},fluid.model.setSimple=function(root,EL,newValue,environment,initSegs){fluid.model.accessSimple(root,EL,newValue,environment,initSegs,!1)},fluid.model.getSimple=function(root,EL,environment,initSegs){return null==EL||0===EL.length?root:fluid.model.accessSimple(root,EL,fluid.NO_VALUE,environment,initSegs,!1)},fluid.getImmediate=function(root,segs,i){for(var limit=void 0===i?segs.length:i+1,j=0;j<limit;++j)root=root?root[segs[j]]:void 0;return root},fluid.decodeAccessorArg=function(arg3){return arg3&&arg3!==fluid.model.defaultGetConfig&&arg3!==fluid.model.defaultSetConfig?"environment"===arg3.type?arg3.value:void 0:null},fluid.set=function(root,EL,newValue,config,initSegs){var env=fluid.decodeAccessorArg(config);void 0===env?fluid.model.setWithStrategy(root,EL,newValue,config,initSegs):fluid.model.setSimple(root,EL,newValue,env,initSegs)},fluid.get=function(root,EL,config,initSegs){var env=fluid.decodeAccessorArg(config);return void 0===env?fluid.model.getWithStrategy(root,EL,config,initSegs):fluid.model.accessImpl(root,EL,fluid.NO_VALUE,env,null,!1,fluid.model.traverseSimple)},fluid.getGlobalValue=function(path,env){if(path)return env=env||fluid.environment,fluid.get(fluid.global,path,{type:"environment",value:env})},fluid.bind=function(obj,fnName,args){return obj[fnName].apply(obj,fluid.makeArray(args))},fluid.proxyComponentArgs=fluid.identity,fluid.invokeGlobalFunction=function(functionPath,args,environment){var func=fluid.getGlobalValue(functionPath,environment);if(func){var argsArray=fluid.isArrayable(args)?args:fluid.makeArray(args);return fluid.proxyComponentArgs(argsArray),func.apply(null,argsArray)}fluid.fail("Error invoking global function: "+functionPath+" could not be located")},fluid.registerGlobalFunction=function(functionPath,func,env){env=env||fluid.environment,fluid.set(fluid.global,functionPath,func,{type:"environment",value:env})},fluid.setGlobalValue=fluid.registerGlobalFunction,fluid.registerNamespace=function(path,env){env=env||fluid.environment;var existing=fluid.getGlobalValue(path,env);return existing||(existing={},fluid.setGlobalValue(path,existing,env)),existing},fluid.dumpEl=fluid.identity,fluid.renderTimestamp=fluid.identity,fluid.generateUniquePrefix=function(){return Math.floor(1e12*Math.random()).toString(36)+"-"};var fluid_prefix=fluid.generateUniquePrefix();fluid.fluidInstance=fluid_prefix;var fluid_guid=1;fluid.allocateGuid=function(){return fluid_prefix+fluid_guid++},fluid.registerNamespace("fluid.event"),fluid.extremePriority=4e9,fluid.priorityTypes={first:-1,last:1,before:0,after:0},fluid.extremalPriorities={none:0,transaction:10,testing:20,authoring:30},fluid.parsePriorityConstraint=function(constraint,fixedOnly,site){var segs=constraint.split(":"),type=segs[0],lookup=fluid.priorityTypes[type];return void 0===lookup&&fluid.fail("Invalid constraint type in priority field "+constraint+": the only supported values are "+fluid.keys(fluid.priorityTypes).join(", ")+" or numeric"),fixedOnly&&0===lookup&&fluid.fail("Constraint type in priority field "+constraint+" is not supported in a "+site+" record - you must use either a numeric value or first, last"),{type:segs[0],target:segs[1]}},fluid.parsePriority=function(priority,count,fixedOnly,site){var togo={count:count||0,fixed:null,constraint:null,site:site};"number"==typeof(priority=priority||0)?togo.fixed=-priority:togo.constraint=fluid.parsePriorityConstraint(priority,fixedOnly,site);var multiplier=togo.constraint?fluid.priorityTypes[togo.constraint.type]:0;if(0!==multiplier){var target=togo.constraint.target||"none",extremal=fluid.extremalPriorities[target];void 0===extremal&&fluid.fail("Unrecognised extremal priority target "+target+": the currently supported values are "+fluid.keys(fluid.extremalPriorities).join(", ")+": register your value in fluid.extremalPriorities"),togo.fixed=multiplier*(fluid.extremePriority+extremal)}return null!==togo.fixed&&(togo.fixed+=togo.count/1024),togo},fluid.renderPriority=function(parsed){return parsed.constraint?parsed.constraint.target?parsed.constraint.type+":"+parsed.constraint.target:parsed.constraint.type:Math.floor(parsed.fixed)},fluid.compareByPriority=function(recA,recB){return null!==recA.priority.fixed&&null!==recB.priority.fixed?recA.priority.fixed-recB.priority.fixed:(null===recA.priority.fixed)-(null===recB.priority.fixed)},fluid.honourConstraint=function(array,firstConstraint,c){var constraint=array[c].priority.constraint,matchIndex=fluid.find(array,(function(element,index){return element.namespace===constraint.target?index:void 0}),-1);if(-1===matchIndex)return!0;if(matchIndex>=firstConstraint)return!1;for(var target=matchIndex+("after"===constraint.type?1:0),temp=array[c],shift=c;shift>=target;--shift)array[shift]=array[shift-1];return array[target]=temp,!0},fluid.sortByPriority=function(array){fluid.stableSort(array,fluid.compareByPriority);for(var firstConstraint=fluid.find(array,(function(element,index){return element.priority.constraint&&0===fluid.priorityTypes[element.priority.constraint.type]?index:void 0}),array.length);;){if(firstConstraint===array.length)return array;for(var oldFirstConstraint=firstConstraint,c=firstConstraint;c<array.length;++c){fluid.honourConstraint(array,firstConstraint,c)&&++firstConstraint}if(firstConstraint===oldFirstConstraint){var holders=array.slice(firstConstraint);fluid.fail("Could not find targets for any constraints in "+holders[0].priority.site+" ",holders,": none of the targets ("+fluid.getMembers(holders,"priority.constraint.target").join(", ")+") matched any namespaces of the elements in (",array.slice(0,firstConstraint),") - this is caused by either an invalid or circular reference")}}},fluid.parsePriorityRecords=function(records,name){var array=fluid.hashToArray(records,"namespace",(function(newElement,oldElement){$.extend(newElement,oldElement),newElement.priority=fluid.parsePriority(oldElement.priority,0,!1,name)}));return fluid.sortByPriority(array),array},fluid.event.identifyListener=function(listener,soft){return"string"==typeof listener||listener.$$fluid_guid||soft||(listener.$$fluid_guid=fluid.allocateGuid()),listener.$$fluid_guid},fluid.event.impersonateListener=function(origListener,newListener){fluid.event.identifyListener(origListener),newListener.$$fluid_guid=origListener.$$fluid_guid},fluid.event.sortListeners=function(listeners){var togo=[];return fluid.each(listeners,(function(oneNamespace){for(var headHard,i=0;i<oneNamespace.length;++i){var thisListener=oneNamespace[i];thisListener.softNamespace||headHard||(headHard=thisListener)}headHard?togo.push(headHard):togo=togo.concat(oneNamespace)})),fluid.sortByPriority(togo)},fluid.event.resolveListener=function(listener){var listenerName=listener.globalName||("string"==typeof listener?listener:null);if(listenerName){var listenerFunc=fluid.getGlobalValue(listenerName);listenerFunc?listener=listenerFunc:fluid.fail("Unable to look up name "+listenerName+" as a global function")}return listener},fluid.nameComponent=function(that){return that?fluid.dumpComponentAndPath(that):"[unknown component]"},fluid.event.nameEvent=function(that,eventName){return eventName+" of "+fluid.nameComponent(that)},fluid.event.firer=function(){},fluid.makeEventFirer=function(options){var that,name=(options=options||{}).name||"<anonymous>",lazyInit=function(){that.listeners={},that.byId={},that.sortedListeners=[],that.onDestroy=null,that.addListener=function(listener,namespace,priority,softNamespace,listenerId){var record;if(that.destroyed&&fluid.fail("Cannot add listener to destroyed event firer "+that.name),listener){fluid.isPlainObject(listener,!0)&&!fluid.isApplicable(listener)&&(listener=(record=listener).listener,namespace=record.namespace,priority=record.priority,softNamespace=record.softNamespace,listenerId=record.listenerId),"string"==typeof listener&&(listener={globalName:listener});var id=listenerId||fluid.event.identifyListener(listener);namespace=namespace||id,record=$.extend(record||{},{namespace:namespace,listener:listener,softNamespace:softNamespace,listenerId:listenerId,priority:fluid.parsePriority(priority,that.sortedListeners.length,!1,"listeners")}),that.byId[id]=record,(that.listeners[namespace]=fluid.makeArray(that.listeners[namespace]))[softNamespace?"push":"unshift"](record),that.sortedListeners=fluid.event.sortListeners(that.listeners)}},that.addListener.apply(null,arguments)};return that=Object.create(fluid.event.firer.prototype),fluid.extend(that,{eventId:fluid.allocateGuid(),name:name,ownerId:options.ownerId,typeName:"fluid.event.firer",destroy:function(){that.destroyed=!0,fluid.each(that.onDestroy,(function(func){func()}))},addListener:function(){lazyInit.apply(null,arguments)},removeListener:function(listener){if(that.listeners){var namespace,id,record;"string"==typeof listener?(namespace=listener,(record=that.listeners[namespace])||(id=namespace,namespace=null)):"function"==typeof listener&&((id=fluid.event.identifyListener(listener,!0))||fluid.fail("Cannot remove unregistered listener function ",listener," from event "+that.name));var rec=that.byId[id],softNamespace=rec&&rec.softNamespace;namespace=namespace||rec&&rec.namespace||id,delete that.byId[id],(record=that.listeners[namespace])&&(softNamespace?fluid.remove_if(record,(function(thisLis){return thisLis.listener.$$fluid_guid===id||thisLis.listenerId===id})):record.shift(),0===record.length&&delete that.listeners[namespace]),that.sortedListeners=fluid.event.sortListeners(that.listeners)}},fire:function(){var listeners=that.sortedListeners;if(options.promise&&(that.promisePayload=arguments[0]),listeners&&!that.destroyed)for(var i=0;i<listeners.length;++i){var lisrec=listeners[i];"function"!=typeof lisrec.listener&&(lisrec.listener=fluid.event.resolveListener(lisrec.listener));var value,listener=lisrec.listener,ret=listener.apply(null,arguments);if((options.preventable&&!1===ret||that.destroyed)&&(value=!1),void 0!==value)return value}}}),options.promise&&(that.then=function(func){"promisePayload"in that?func(that.promisePayload):that.addListener(func)}),that},fluid.event.addPrimitiveListener=function(holder,name,func){var existing=holder[name];existing||(existing=holder[name]=[]),existing.push(func)},fluid.fireEvent=function(component,eventName,args){var firer=component.events&&component.events[eventName];firer&&firer.fire.apply(null,fluid.makeArray(args))},fluid.event.addListenerToFirer=function(firer,value,namespace,wrapper){if(wrapper=wrapper||fluid.identity,fluid.isArrayable(value))for(var i=0;i<value.length;++i)fluid.event.addListenerToFirer(firer,value[i],namespace,wrapper);else"function"==typeof value||"string"==typeof value?wrapper(firer).addListener(value,namespace):value&&"object"==typeof value&&wrapper(firer).addListener(value.listener,namespace||value.namespace,value.priority,value.softNamespace,value.listenerId)},fluid.event.resolveListenerRecord=function(records){return{records:records}},fluid.expandImmediate=function(material){fluid.fail("fluid.expandImmediate could not be loaded - please include FluidIoC.js in order to operate IoC-driven event with descriptor "+material)},fluid.mergeListeners=function(that,events,listeners){fluid.each(listeners,(function(value,key){var firer,namespace;if(fluid.isIoCReference(key))(firer=fluid.expandImmediate(key,that))||fluid.fail("Error in listener record: key "+key+' could not be looked up to an event firer - did you miss out "events." when referring to an event firer?');else{var keydot=key.indexOf(".");-1!==keydot&&(namespace=key.substring(keydot+1),key=key.substring(0,keydot)),events[key]||fluid.fail("Listener registered for event "+key+" which is not defined for this component"),firer=events[key]}var record=fluid.event.resolveListenerRecord(value,that,key,namespace,!0);fluid.event.addListenerToFirer(firer,record.records,namespace,record.adderWrapper)}))},fluid.eventFromRecord=function(eventSpec,eventKey,that){var event;return eventSpec&&("string"!=typeof eventSpec||fluid.isIoCReference(eventSpec))?fluid.event.resolveEvent?event=fluid.event.resolveEvent(that,eventKey,eventSpec):fluid.fail("fluid.event.resolveEvent could not be loaded - please include FluidIoC.js in order to operate IoC-driven event with descriptor ",eventSpec):event=fluid.makeEventFirer({name:fluid.event.nameEvent(that,eventKey),preventable:"preventable"===eventSpec,promise:"promise"===eventSpec,ownerId:that.id}),event},fluid.mergeListenerPolicy=function(target,source,key){return"string"!=typeof key&&fluid.fail("Error in listeners declaration - the keys in this structure must resolve to event names - got "+key+" from ",source),!fluid.isIoCReference(key)&&-1!==key.indexOf(".")?source||target:fluid.arrayConcatPolicy(target,source)},fluid.makeMergeListenersPolicy=function(merger,modelRelay){return function(target,source){return target=target||{},modelRelay&&(fluid.isArrayable(source)||"target"in source&&("string"==typeof source.target||source.target.segs))?target[""]=merger(target[""],source,""):fluid.each(source,(function(listeners,key){target[key]=merger(target[key],listeners,key)})),target}},fluid.validateListenersImplemented=function(that){var errors=[];return fluid.each(that.events,(function(event,name){fluid.each(event.sortedListeners,(function(lisrec){lisrec.listener!==fluid.notImplemented&&"fluid.notImplemented"!==lisrec.listener.globalName||errors.push({name:name,namespace:lisrec.namespace,componentSource:fluid.model.getSimple(that.options.listeners,[name+"."+lisrec.namespace,0,"componentSource"])})}))})),errors},fluid.arrayConcatPolicy=function(target,source){return fluid.makeArray(target).concat(fluid.makeArray(source))},fluid.loggingEvent=fluid.makeEventFirer({name:"logging event"}),fluid.addTimestampArg=function(args){var arg0=fluid.renderTimestamp(new Date)+": ";args.unshift(arg0)},fluid.loggingEvent.addListener(fluid.doBrowserLog,"log"),fluid.loggingEvent.addListener(fluid.identity,"filterArgs","before:log"),fluid.loggingEvent.addListener(fluid.addTimestampArg,"addTimestampArg","after:filterArgs"),fluid.upgradeError=function(originError,whileMsg){var error=originError instanceof Error?originError:fluid.isPrimitive(originError)?{message:originError}:fluid.extend({},originError);return error.message=error.message+whileMsg,error},fluid.failureEvent=fluid.makeEventFirer({name:"failure event"}),fluid.failureEvent.addListener(fluid.builtinFail,"fail"),fluid.failureEvent.addListener(fluid.logFailure,"log","before:fail"),fluid.componentConstructor=function(){},Object.defineProperty(fluid.componentConstructor,"name",{value:"fluid.componentConstructor"}),fluid.typeTag=function(type,id){var that=Object.create(fluid.componentConstructor.prototype);return that.typeName=type,that.id=id||fluid.allocateGuid(),that};var gradeTick=1,gradeTickStore={};function regenerateCursor(source,segs,limit,sourceStrategy){for(var i=0;i<limit;++i)source=sourceStrategy(source,segs[i],i,fluid.makeArray(segs));return source}function regenerateSources(sources,segs,limit,sourceStrategies){for(var togo=[],i=0;i<sources.length;++i){var thisSource=regenerateCursor(sources[i],segs,limit,sourceStrategies[i]);void 0!==thisSource&&togo.push(thisSource)}return togo}fluid.defaultsStore={},fluid.flattenGradeName=function(gradeName){return"string"==typeof gradeName?gradeName:JSON.stringify(gradeName)},fluid.resolveGradesImpl=function(gs,gradeNames){for(var i=(gradeNames=fluid.makeArray(gradeNames)).length-1;i>=0;--i){var gradeName=gradeNames[i],flatGradeName=fluid.flattenGradeName(gradeName);if(gradeName&&!gs.gradeHash[flatGradeName]){var options=(fluid.isReferenceOrExpander(gradeName)?null:fluid.rawDefaults(gradeName))||{},thisTick=gradeTickStore[gradeName]||gradeTick-1;gs.lastTick=Math.max(gs.lastTick,thisTick),gs.gradeHash[flatGradeName]=!0,gs.gradeChain.push(gradeName);for(var oGradeNames=fluid.makeArray(options.gradeNames),j=oGradeNames.length-1;j>=0;--j)fluid.resolveGradesImpl(gs,oGradeNames[j])}}return gs},fluid.resolveGradeStructure=function(defaultName,gradeNames){var gradeStruct={lastTick:0,gradeChain:[],gradeHash:{}};return fluid.resolveGradesImpl(gradeStruct,[defaultName].concat(fluid.makeArray(gradeNames))),gradeStruct.gradeChain.reverse(),gradeStruct},fluid.hasGrade=function(options,gradeName){return!(!options||!options.gradeNames)&&fluid.contains(options.gradeNames,gradeName)},fluid.resolveGrade=function(defaults,defaultName,gradeNames){var gradeStruct=fluid.resolveGradeStructure(defaultName,gradeNames),mergeArgs=fluid.transform(gradeStruct.gradeChain,fluid.rawDefaults,fluid.copy);fluid.remove_if(mergeArgs,(function(options){return!options}));for(var mergePolicy={},i=0;i<mergeArgs.length;++i)mergeArgs[i]&&mergeArgs[i].mergePolicy&&(mergePolicy=$.extend(!0,mergePolicy,mergeArgs[i].mergePolicy));mergeArgs=[mergePolicy,{}].concat(mergeArgs);var mergedDefaults=fluid.merge.apply(null,mergeArgs);return mergedDefaults.gradeNames=gradeStruct.gradeChain,fluid.freezeRecursive(mergedDefaults),{defaults:mergedDefaults,lastTick:gradeStruct.lastTick}},fluid.mergedDefaultsCache={},fluid.gradeNamesToKey=function(defaultName,gradeNames){return defaultName+"|"+gradeNames.join("|")},fluid.getMergedDefaults=function(defaultName,gradeNames){gradeNames=fluid.makeArray(gradeNames);var key=fluid.gradeNamesToKey(defaultName,gradeNames),mergedDefaults=fluid.mergedDefaultsCache[key];if(mergedDefaults){for(var lastTick=0,searchGrades=mergedDefaults.defaults.gradeNames,i=0;i<searchGrades.length;++i)lastTick=Math.max(lastTick,gradeTickStore[searchGrades[i]]||0);lastTick>mergedDefaults.lastTick&&(fluid.passLogLevel(fluid.logLevel.TRACE)&&fluid.log(fluid.logLevel.TRACE,"Clearing cache for component "+defaultName+" with gradeNames ",searchGrades),mergedDefaults=null)}if(!mergedDefaults){var defaults=fluid.rawDefaults(defaultName);if(!defaults)return defaults;mergedDefaults=fluid.mergedDefaultsCache[key]=fluid.resolveGrade(defaults,defaultName,gradeNames)}return mergedDefaults.defaults},fluid.NO_ARGUMENTS=fluid.makeMarker("NO_ARGUMENTS"),fluid.upgradePrimitiveFunc=function(rec,key){if(rec&&fluid.isPrimitive(rec)){var togo={};return togo[key||("string"==typeof rec&&"{"!==rec.charAt(0)?"funcName":"func")]=rec,togo.args=fluid.NO_ARGUMENTS,togo}return rec},fluid.annotateListeners=function(componentName,options){options.listeners=fluid.transform(options.listeners,(function(record){var togo=fluid.makeArray(record);return fluid.transform(togo,(function(onerec){return(onerec=fluid.upgradePrimitiveFunc(onerec,"listener")).componentSource=componentName,onerec}))})),options.invokers=fluid.transform(options.invokers,(function(record){return(record=fluid.upgradePrimitiveFunc(record))&&(record.componentSource=componentName),record}))},fluid.workflowCache={},fluid.workflowCacheSorted=[],fluid.resortWorkflows=function(workflowType,baseIndex){var thisCache=fluid.workflowCache[workflowType],parsed=fluid.parsePriorityRecords(thisCache,workflowType+" workflows");return parsed.forEach((function(oneParsed,index){thisCache[oneParsed.namespace].index=index+baseIndex})),parsed},fluid.indexOneWorkflows=function(gradeName,workflowType,workflows,baseIndex){return fluid.each(workflows,(function(oneWorkflow,workflowKey){fluid.model.setSimple(fluid.workflowCache,[workflowType,workflowKey],{workflowType:workflowType,workflowName:workflowKey,priority:oneWorkflow.priority,gradeName:gradeName,workflowOptions:oneWorkflow})})),fluid.resortWorkflows(workflowType,baseIndex)},fluid.clearGradeWorkflows=function(gradeName,workflowType){var cacheForType=fluid.workflowCache[workflowType];fluid.each(cacheForType,(function(oneWorkflow,workflowKey){oneWorkflow.gradeName===gradeName&&delete cacheForType[workflowKey]}))},fluid.indexGradeWorkflows=function(gradeName,options){fluid.clearGradeWorkflows(gradeName,"global"),fluid.clearGradeWorkflows(gradeName,"local");var sortedGlobal=fluid.indexOneWorkflows(gradeName,"global",fluid.getImmediate(options,["workflows","global"]),0),globalWorkflowCount=sortedGlobal.length,sortedLocal=fluid.indexOneWorkflows(gradeName,"local",fluid.getImmediate(options,["workflows","local"]),globalWorkflowCount);fluid.workflowCacheSorted=sortedGlobal.concat(sortedLocal)},fluid.rawDefaults=function(componentName){var entry=fluid.defaultsStore[componentName];return entry&&entry.options},fluid.registerRawDefaults=function(componentName,options){fluid.pushActivity("registerRawDefaults","registering defaults for grade %componentName with options %options",{componentName:componentName,options:options});var optionsCopy=fluid.expandCompact?fluid.expandCompact(options):fluid.copy(options);fluid.annotateListeners(componentName,optionsCopy),fluid.indexGradeWorkflows(componentName,optionsCopy),delete optionsCopy.workflows;var callerInfo=fluid.getCallerInfo&&fluid.getCallerInfo(6);fluid.freezeRecursive(optionsCopy),fluid.defaultsStore[componentName]={options:optionsCopy,callerInfo:callerInfo},gradeTickStore[componentName]=gradeTick++,fluid.popActivity()},fluid.doIndexDefaults=function(defaultName,defaults,index,indexSpec){for(var requiredGrades=fluid.makeArray(indexSpec.gradeNames),i=0;i<requiredGrades.length;++i)if(!fluid.hasGrade(defaults,requiredGrades[i]))return;for(var keys=("function"==typeof indexSpec.indexFunc?indexSpec.indexFunc:fluid.getGlobalValue(indexSpec.indexFunc))(defaults)||[],j=0;j<keys.length;++j)fluid.pushArray(index,keys[j],defaultName)},fluid.indexDefaults=function(indexName,indexSpec){var index={};for(var defaultName in fluid.defaultsStore){var defaults=fluid.getMergedDefaults(defaultName);fluid.doIndexDefaults(defaultName,defaults,index,indexSpec)}return index},fluid.defaults=function(componentName,options){if(void 0===options)return fluid.getMergedDefaults(componentName);options&&options.options&&fluid.fail("Probable error in options structure for "+componentName+' with option named "options" - perhaps you meant to write these options at top level in fluid.defaults? - ',options),fluid.registerRawDefaults(componentName,options);var gradedDefaults=fluid.getMergedDefaults(componentName);fluid.hasGrade(gradedDefaults,"fluid.function")||fluid.makeComponentCreator(componentName)},fluid.validateCreatorGrade=function(message,componentName){var defaults=fluid.getMergedDefaults(componentName);if(defaults&&defaults.gradeNames&&0!==defaults.gradeNames.length){if(!defaults.argumentMap){for(var blankGrades=[],i=0;i<defaults.gradeNames.length;++i){var gradeName=defaults.gradeNames[i];fluid.rawDefaults(gradeName)||blankGrades.push(gradeName)}0===blankGrades.length?fluid.fail(message+" type "+componentName+" which is not derived from fluid.component"):fluid.fail("The grade hierarchy of component with type "+componentName+" is incomplete - it inherits from the following grade(s): "+blankGrades.join(", ")+" for which the grade definitions are corrupt or missing. Please check the files which might include these grades and ensure they are readable and have been loaded by this instance of Infusion")}}else fluid.fail(message+" type "+componentName+" which does not have any gradeNames defined")},fluid.makeComponentCreator=function(componentName){var creator=function(){return fluid.validateCreatorGrade("Cannot make component creator for",componentName),fluid.initFreeComponent(componentName,arguments)},existing=fluid.getGlobalValue(componentName);existing&&$.extend(creator,existing),fluid.setGlobalValue(componentName,creator)},fluid.emptyPolicy=fluid.freezeRecursive({}),fluid.derefMergePolicy=function(policy){return(policy?policy["*"]:fluid.emptyPolicy)||fluid.emptyPolicy},fluid.compileMergePolicy=function(mergePolicy){var builtins={},defaultValues={},togo={builtins:builtins,defaultValues:defaultValues};return mergePolicy?(fluid.each(mergePolicy,(function(value,key){var parsed={},builtin=!0;if("function"==typeof value)parsed.func=value;else if("object"==typeof value)parsed=value;else if(fluid.isDefaultValueMergePolicy(value))fluid.set(defaultValues,key,"{that}.options."+value),togo.hasDefaults=!0,builtin=!1;else for(var split=value.split(/\s*,\s*/),i=0;i<split.length;++i)parsed[split[i]]=!0;builtin&&fluid.set(builtins,fluid.composePath(key,"*"),parsed)})),togo):togo},fluid.isDefaultValueMergePolicy=function(policy){return"string"==typeof policy&&-1===policy.indexOf(",")&&!/replace|nomerge|noexpand/.test(policy)},fluid.mergeOneImpl=function(thisTarget,thisSource,j,sources,newPolicy,newPolicyHolder,i,segs){var togo=thisTarget,primitiveTarget=fluid.isPrimitive(thisTarget);return void 0!==thisSource&&(newPolicy.func||null===thisSource||!fluid.isPlainObject(thisSource)||newPolicy.nomerge?(sources[j]=void 0,togo=newPolicy.func?newPolicy.func.call(null,thisTarget,thisSource,newPolicyHolder,segs,i):thisSource):primitiveTarget&&(togo=thisTarget=fluid.freshContainer(thisSource))),togo},fluid.fetchMergeChildren=function(target,i,segs,sources,mergePolicy,options){for(var thisPolicy=fluid.derefMergePolicy(mergePolicy),j=sources.length-1;j>=0;--j){var source=sources[j];if(void 0!==source&&(fluid.each(source,(function(newSource,name){var childPolicy=fluid.concreteTrundler(mergePolicy,name);(!(name in target)||options.evaluateFully&&void 0===childPolicy&&!fluid.isPrimitive(target[name]))&&(segs[i]=name,options.strategy(target,name,i+1,segs,sources,mergePolicy))})),thisPolicy.replace))break}return target},fluid.inEvaluationMarker=Object.freeze({__CURRENTLY_IN_EVALUATION__:!0}),fluid.strategyRecursionBailout=50,fluid.makeMergeStrategy=function(options){var strategy=function(target,name,i,segs,sources,policy){if(i>fluid.strategyRecursionBailout&&fluid.fail("Overflow/circularity in options merging, current path is ",segs," at depth ",i,' - please protect components from merging using the "nomerge" merge policy'),!fluid.isPrimitive(target)){var oldTarget;if(fluid.isTracing&&fluid.tracing.pathCount.push(fluid.path(segs.slice(0,i))),(name in target||options.fullyEvaluated)&&(oldTarget=target[name],!options.evaluateFully))return oldTarget;void 0===sources&&(segs=fluid.makeArray(segs),sources=regenerateSources(options.sources,segs,i-1,options.sourceStrategies),policy=regenerateCursor(options.mergePolicy,segs,i-1,fluid.concreteTrundler));var start,limit,mul,newPolicyHolder=fluid.concreteTrundler(policy,name),newPolicy=fluid.derefMergePolicy(newPolicyHolder);newPolicy.replace?(start=1-sources.length,limit=0,mul=-1):(start=0,limit=sources.length-1,mul=1);for(var thisTarget,newSources=[],j=start;j<=limit;++j){var k=mul*j,thisSource=options.sourceStrategies[k](sources[k],name,i,segs);if(void 0!==thisSource&&(fluid.isPrimitive(thisSource)||(newSources[k]=thisSource),void 0===oldTarget)){if(-1===mul){thisTarget=target[name]=thisSource;break}thisTarget=fluid.mergeOneImpl(thisTarget,thisSource,j,newSources,newPolicy,newPolicyHolder,i,segs,options),target[name]=thisTarget}}return void 0!==oldTarget&&(thisTarget=oldTarget),newSources.length>0&&fluid.isPlainObject(thisTarget)&&fluid.fetchMergeChildren(thisTarget,i,segs,newSources,newPolicyHolder,options),thisTarget}};return options.strategy=strategy,strategy},fluid.driveStrategy=function(root,pathSegs,strategy){pathSegs=fluid.makeArray(pathSegs);for(var i=0;i<pathSegs.length;++i){if(!root)return;root=strategy(root,pathSegs[i],i+1,pathSegs)}return root},fluid.concreteTrundler=function(source,seg){return source?source[seg]:void 0},fluid.merge=function(policy,...sources){var compiled=fluid.compileMergePolicy(policy).builtins,options=fluid.makeMergeOptions(compiled,sources,{});return options.initter(),options.target},fluid.makeMergeOptions=function(policy,sources,userOptions){var options={mergePolicy:policy,sources:sources};return(options=$.extend(options,userOptions)).target=options.target||fluid.freshContainer(options.sources[0]),options.sourceStrategies=options.sourceStrategies||fluid.generate(options.sources.length,fluid.concreteTrundler),options.initter=function(){options.evaluateFully=!0,fluid.fetchMergeChildren(options.target,0,[],options.sources,options.mergePolicy,options),options.fullyEvaluated=!0},fluid.makeMergeStrategy(options),options},fluid.transformOptions=function(options,transRec){return fluid.expect("Options transformation record",transRec,["transformer","config"]),fluid.getGlobalValue(transRec.transformer).call(null,options,transRec.config)},fluid.findMergeBlocks=function(mergeBlocks,recordType){return fluid.remove_if(fluid.makeArray(mergeBlocks),(function(block){return block.recordType!==recordType}))},fluid.transformOptionsBlocks=function(mergeBlocks,transformOptions,recordTypes){fluid.each(recordTypes,(function(recordType){var blocks=fluid.findMergeBlocks(mergeBlocks,recordType);fluid.each(blocks,(function(block){var source=block.source?"source":"target";block[block.simple||"target"===source?"target":"source"]=fluid.transformOptions(block[source],transformOptions)}))}))},fluid.dedupeDistributionNamespaces=function(mergeBlocks){var byNamespace={};fluid.remove_if(mergeBlocks,(function(mergeBlock){var ns=mergeBlock.namespace;if(ns){if(byNamespace[ns]&&byNamespace[ns]!==mergeBlock.contextThat.id)return!0;byNamespace[ns]=mergeBlock.contextThat.id}}))},fluid.mergeRecordTypes={defaults:1e3,defaultValueMerge:900,lensedComponents:800,subcomponentRecord:700,user:600,distribution:100},fluid.model.applyChangeRequest=function(model,request){var segs=request.segs;if(0===segs.length)"ADD"===request.type?$.extend(!0,model,request.value):fluid.clear(model);else if("ADD"===request.type)fluid.model.setSimple(model,request.segs,request.value);else{for(var i=0;i<segs.length-1;++i)if(!(model=model[segs[i]]))return;delete model[fluid.peek(segs)]}},fluid.destroyValue=function(target,segs){target&&fluid.model.applyChangeRequest(target,{type:"DELETE",segs:segs})},fluid.mergeComponentOptions=function(that,potentia,lightMerge){fluid.validateCreatorGrade("Cannot construct component of",lightMerge.type);var sharedMergePolicy={},mergeBlocks=fluid.expandComponentOptions(sharedMergePolicy,potentia,lightMerge,that),options={},sourceStrategies=[],sources=[],baseMergeOptions={target:options,sourceStrategies:sourceStrategies},updateBlocks=function(){fluid.each(mergeBlocks,(function(block){fluid.isPrimitive(block.priority)&&(block.priority=fluid.parsePriority(block.priority,0,!1,block.recordType))})),fluid.sortByPriority(mergeBlocks),fluid.dedupeDistributionNamespaces(mergeBlocks),sourceStrategies.length=0,sources.length=0,fluid.each(mergeBlocks,(function(block){sourceStrategies.push(block.strategy),sources.push(block.target)}))};updateBlocks();var compiledPolicy,mergePolicy,mergeOptions=fluid.makeMergeOptions(sharedMergePolicy,sources,baseMergeOptions);function computeMergePolicy(){mergePolicy=fluid.driveStrategy(options,"mergePolicy",mergeOptions.strategy),mergePolicy=$.extend({},fluid.rootMergePolicy,mergePolicy),compiledPolicy=fluid.compileMergePolicy(mergePolicy),$.extend(!0,sharedMergePolicy,compiledPolicy.builtins)}mergeOptions.mergeBlocks=mergeBlocks,mergeOptions.updateBlocks=updateBlocks,mergeOptions.destroyValue=function(segs){for(var i=0;i<mergeBlocks.length;++i)mergeBlocks[i].immutableTarget||fluid.destroyValue(mergeBlocks[i].target,segs);fluid.destroyValue(baseMergeOptions.target,segs)},computeMergePolicy(),mergeOptions.computeMergePolicy=computeMergePolicy,compiledPolicy.hasDefaults&&(mergeBlocks.push(fluid.generateExpandBlock({options:compiledPolicy.defaultValues,recordType:"defaultValueMerge",priority:fluid.mergeRecordTypes.defaultValueMerge},that,{})),updateBlocks()),that.options=options,fluid.driveStrategy(options,"gradeNames",mergeOptions.strategy),fluid.deliverOptionsStrategy(that,options,mergeOptions),fluid.computeComponentAccessor(that,potentia.localRecord);var transformOptions=fluid.driveStrategy(options,"transformOptions",mergeOptions.strategy);return transformOptions&&(fluid.transformOptionsBlocks(mergeBlocks,transformOptions,["user","subcomponentRecord"]),updateBlocks()),baseMergeOptions.target.mergePolicy||computeMergePolicy(),mergeOptions},fluid.defaults("fluid.function",{}),fluid.invokeGradedFunction=function(name,spec){var defaults=fluid.defaults(name);defaults&&defaults.argumentMap&&fluid.hasGrade(defaults,"fluid.function")||fluid.fail("Cannot look up name "+name+" to a function with registered argumentMap - got defaults ",defaults);var args=[];return fluid.each(defaults.argumentMap,(function(value,key){args[value]=spec[key]})),fluid.invokeGlobalFunction(name,args)},fluid.noNamespaceDistributionPrefix="no-namespace-distribution-",fluid.mergeOneDistribution=function(target,source,key){var namespace=source.namespace||key||fluid.noNamespaceDistributionPrefix+fluid.allocateGuid();source.namespace=namespace,target[namespace]=$.extend(!0,{},target[namespace],source)},fluid.distributeOptionsPolicy=function(target,source){if(target=target||{},fluid.isArrayable(source))for(var i=0;i<source.length;++i)fluid.mergeOneDistribution(target,source[i]);else"string"==typeof source.target?fluid.mergeOneDistribution(target,source):fluid.each(source,(function(oneSource,key){fluid.mergeOneDistribution(target,oneSource,key)}));return target},fluid.mergingArray=function(){},fluid.mergingArray.prototype=[],fluid.deferringMergePolicy=function(target,source,mergePolicyHolder){return target=target||{},fluid.each(source,(function(oneSource,key){target[key]||(target[key]=new fluid.mergingArray),fluid.derefMergePolicy(mergePolicyHolder[key]).replace&&void 0!==oneSource&&(target[key].length=0),oneSource instanceof fluid.mergingArray?target[key].push.apply(target[key],oneSource):void 0!==oneSource&&target[key].push(oneSource)})),target},fluid.invokerStrategies=fluid.arrayToHash(["func","funcName","listener","this","method","changePath","value"]),fluid.invokersMergePolicy=function(target,source){return target=target||{},fluid.each(source,(function(oneInvoker,name){if(oneInvoker){oneInvoker=fluid.upgradePrimitiveFunc(oneInvoker);var oneT=target[name];for(var key in oneT||(oneT=target[name]={}),fluid.invokerStrategies)if(key in oneInvoker)for(var key2 in fluid.invokerStrategies)oneT[key2]=void 0;$.extend(oneT,oneInvoker)}else target[name]=oneInvoker})),target},fluid.rootMergePolicy=fluid.freezeRecursive({gradeNames:fluid.arrayConcatPolicy,distributeOptions:fluid.distributeOptionsPolicy,members:{noexpand:!0,func:fluid.deferringMergePolicy},invokers:{noexpand:!0,func:fluid.invokersMergePolicy},components:{noexpand:!0,func:fluid.deferringMergePolicy},dynamicComponents:{noexpand:!0,func:fluid.deferringMergePolicy},transformOptions:"replace",listeners:fluid.makeMergeListenersPolicy(fluid.mergeListenerPolicy)}),fluid.defaults("fluid.component",{mergePolicy:fluid.rootMergePolicy,argumentMap:{options:0},workflows:{local:{concludeComponentObservation:{funcName:"fluid.concludeComponentObservation",priority:"first"},concludeComponentInit:{funcName:"fluid.concludeComponentInit",waitIO:!0,priority:"last"}}},events:{onCreate:"promise",onDestroy:"promise",afterDestroy:"promise"}}),fluid.computeNickName=function(typeName){var segs=fluid.model.parseEL(typeName);return fluid.peek(segs)},fluid.isDestroyed=function(that,strict){return"destroyed"===that.lifecycleStatus||!strict&&"destroying"===that.lifecycleStatus},fluid.computeGlobalMemberName=function(type,id){return fluid.computeNickName(type)+"-"+id},fluid.adaptTransactionFailure=function(transRec){var returned=!1;transRec.promise.then(null,(function(e){if(!returned)throw e;0===transRec.promise.onReject.length&&fluid.fireUnhandledRejection(transRec.promise,e)})),returned=!0},fluid.initFreeComponent=function(type,initArgs){var id=fluid.allocateGuid(),path=[fluid.computeGlobalMemberName(type,id)],userRecord={recordType:"user",type:type},upDefaults=fluid.defaults(type),argMap=fluid.defaults(void 0!==upDefaults.argumentMap.container?"fluid.viewComponent":"fluid.component").argumentMap;fluid.each(argMap,(function(index,name){var arg=initArgs[index];userRecord[name]="options"===name?fluid.expandCompact(arg,!0):arg}));var potentia={type:"create",path:path,componentId:id,records:[userRecord]},transRec=fluid.registerPotentia(potentia),shadow=fluid.commitPotentiae(transRec.transactionId);return fluid.adaptTransactionFailure(transRec),shadow&&shadow.that};var charStart="(?:[\\w\\u00c0-\\uFFFF*_-";fluid.simpleCSSMatcher={regexp:new RegExp("([#.]?)("+charStart+"]|\\\\.)+)","g"),charToTag:{"":"tag","#":"id",".":"clazz"}},fluid.IoCSSMatcher={regexp:new RegExp("([&#]?)("+charStart+"]|\\.|\\/)+)","g"),charToTag:{"":"context","&":"context","#":"id"}};var childSeg=new RegExp("\\s*(>)?\\s*","g");fluid.parseSelector=function(selstring,strategy){var togo=[];selstring=selstring.trim();var regexp=strategy.regexp;regexp.lastIndex=0;for(var lastIndex=0;;){for(var atNode=[],first=!0;;){var segMatch=regexp.exec(selstring);if(!segMatch)break;if(segMatch.index!==lastIndex){if(!first)break;fluid.fail("Error in selector string - cannot match child selector expression starting at "+selstring.substring(lastIndex))}var thisNode={},text=segMatch[2],targetTag=strategy.charToTag[segMatch[1]];targetTag&&(thisNode[targetTag]=text),atNode[atNode.length]=thisNode,lastIndex=regexp.lastIndex,first=!1}childSeg.lastIndex=lastIndex;var fullAtNode={predList:atNode},childMatch=childSeg.exec(selstring);if(childMatch&&childMatch.index===lastIndex||fluid.fail("Error in selector string - can not match child selector expression at "+selstring.substring(lastIndex)),">"===childMatch[1]&&(fullAtNode.child=!0),togo[togo.length]=fullAtNode,childSeg.lastIndex>=selstring.length)break;lastIndex=childSeg.lastIndex,regexp.lastIndex=childSeg.lastIndex}return togo},fluid.flattenObjectPaths=function(originalObject){var flattenedObject={};return fluid.each(originalObject,(function(value,key){if(null!==value&&"object"==typeof value){var flattenedSubObject=fluid.flattenObjectPaths(value);fluid.each(flattenedSubObject,(function(subValue,subKey){flattenedObject[key+"."+subKey]=subValue})),"function"==typeof fluid.get(value,"toString")&&(flattenedObject[key]=value.toString())}else flattenedObject[key]=value})),flattenedObject},fluid.stringTemplate=function(template,values){var flattenedValues=fluid.flattenObjectPaths(values),keys=fluid.keys(flattenedValues);keys=keys.sort(fluid.compareStringLength());for(var i=0;i<keys.length;++i)for(var key=keys[i],templatePlaceholder="%"+key,replacementValue=flattenedValues[key],indexOfPlaceHolder=-1;-1!==(indexOfPlaceHolder=template.indexOf(templatePlaceholder));)template=template.slice(0,indexOfPlaceHolder)+replacementValue+template.slice(indexOfPlaceHolder+templatePlaceholder.length);return template},fluid.promise=function(){var that={onResolve:[],onReject:[],onCancel:[],then:function(onResolve,onReject,onCancel){return fluid.promise.pushHandler(that,onResolve,"onResolve","resolve"),fluid.promise.pushHandler(that,onReject,"onReject","reject"),fluid.promise.pushHandler(that,onCancel,"onCancel","cancel"),that},resolve:function(value){return that.disposition?"cancel"!==that.disposition&&fluid.fail("Error: resolving promise ",that,' which has already received "'+that.disposition+'"'):that.complete("resolve",that.onResolve,value),that},reject:function(reason){return that.disposition?"cancel"!==that.disposition&&fluid.fail("Error: rejecting promise ",that,'which has already received "'+that.disposition+'"'):(0===that.onReject.length&&fluid.armUnhandledRejection(that,reason),that.complete("reject",that.onReject,reason)),that},cancel:function(reason){that.disposition||that.complete("cancel",that.onCancel,reason)},complete:function(which,queue,arg){that.disposition=which,that.value=arg;for(var i=0;i<queue.length;++i)queue[i](arg);delete that.onResolve,delete that.onReject,delete that.onCancel}};return that},fluid.promise.pushHandler=function(promise,handler,eventName,disposition){handler&&(promise.disposition?promise.disposition===disposition&&(handler(promise.value),promise.directHandle=disposition):promise[eventName].push(handler))},fluid.armUnhandledRejection=function(promise,reason){fluid.invokeLater((function(){"reject"!==promise.directHandle&&fluid.fireUnhandledRejection(promise,reason)}))},fluid.fireUnhandledRejection=function(promise,reason){fluid.unhandledRejectionEvent.fire(reason,promise)},fluid.unhandledRejectionEvent=fluid.makeEventFirer({name:"Global unhandled rejection handler"}),fluid.logUnhandledRejection=function(reason){fluid.log(fluid.logLevel.WARN,"Unhandled promise rejection: ",reason)},fluid.unhandledRejectionEvent.addListener(fluid.logUnhandledRejection,"log"),fluid.isPromise=function(totest){return totest&&"function"==typeof totest.then},fluid.toPromise=function(promiseOrValue){if(fluid.isPromise(promiseOrValue))return promiseOrValue;var togo=fluid.promise();return togo.resolve(promiseOrValue),togo},fluid.promise.follow=function(source,target){source.then(target.resolve,target.reject),target.then(null,null,source.cancel)},fluid.promise.map=function(source,func){var promise=fluid.toPromise(source),togo=fluid.promise();return promise.then((function(value){var mapped=func(value);fluid.isPromise(mapped)?fluid.promise.follow(mapped,togo):togo.resolve(mapped)}),(function(error){togo.reject(error)})),togo},fluid.promise.makeSequencer=function(sources,options,strategy){fluid.isArrayable(sources)||fluid.fail("fluid.promise sequence algorithms must be supplied an array as source");var sequencer={sources:sources,resolvedSources:[],index:0,strategy:strategy,options:options,returns:[],sequenceStarted:!1,sequenceCancelled:!1,promise:fluid.promise()};return sequencer.promise.then(null,null,(function(){fluid.promise.cancelSequencer(sequencer)})),sequencer.promise.sequencer=sequencer,sequencer},fluid.promise.cancelSequencer=function(sequencer){sequencer.sequenceCancelled=!0,sequencer.resolvedSources.forEach((function(source){fluid.isPromise(source)&&source.cancel()}))},fluid.promise.progressSequence=function(that,retValue){that.returns.push(retValue),that.index++,fluid.promise.resumeSequence(that)},fluid.promise.processSequenceReject=function(that,error){for(var i=that.index-1;i>=0;--i){var resolved=that.resolvedSources[i];error=(fluid.isPromise(resolved)&&"function"==typeof resolved.accumulateRejectionReason?resolved.accumulateRejectionReason:fluid.identity)(error)}that.promise.reject(error)},fluid.promise.resumeSequence=function(that){if(that.sequenceStarted=!0,!that.sequenceCancelled)if(that.index===that.sources.length)that.promise.resolve(that.strategy.resolveResult(that));else{var value=that.strategy.invokeNext(that);that.resolvedSources[that.index]=value,fluid.isPromise(value)?value.then((function(retValue){fluid.promise.progressSequence(that,retValue)}),(function(error){fluid.promise.processSequenceReject(that,error)})):fluid.promise.progressSequence(that,value)}},fluid.promise.makeSequenceStrategy=function(){return{invokeNext:function(that){var source=that.sources[that.index];return"function"==typeof source?source(that.options):source},resolveResult:function(that){return that.returns}}},fluid.promise.sequence=function(sources,options){var sequencer=fluid.promise.makeSequencer(sources,options,fluid.promise.makeSequenceStrategy());return fluid.promise.resumeSequence(sequencer),sequencer.promise},fluid.promise.makeTransformerStrategy=function(){return{invokeNext:function(that){var lisrec=that.sources[that.index];return lisrec.listener=fluid.event.resolveListener(lisrec.listener),lisrec.listener.apply(null,[that.returns[that.index],that.options])},resolveResult:function(that){return that.returns[that.index]}}},fluid.promise.makeTransformer=function(listeners,payload,options){listeners.unshift({listener:function(){return payload}});var sequencer=fluid.promise.makeSequencer(listeners,options,fluid.promise.makeTransformerStrategy());return sequencer.returns.push(null),sequencer},fluid.promise.filterNamespaces=function(listeners,namespaces){return namespaces?fluid.remove_if(fluid.makeArray(listeners),(function(element){return element.namespace&&!element.softNamespace&&!fluid.contains(namespaces,element.namespace)})):listeners},fluid.promise.fireTransformEvent=function(event,payload,options){var listeners=(options=options||{}).reverse?fluid.makeArray(event.sortedListeners).reverse():fluid.makeArray(event.sortedListeners);listeners=fluid.promise.filterNamespaces(listeners,options.filterNamespaces);var sequencer=fluid.promise.makeTransformer(listeners,payload,options),canceller=sequencer.promise.cancel,remover=function(){fluid.remove_if(event.onDestroy,(function(func){return func===canceller}))};return fluid.event.addPrimitiveListener(event,"onDestroy",canceller),sequencer.promise.then(remover,remover,remover),fluid.promise.resumeSequence(sequencer),sequencer.promise},fluid.renderTimestamp=function(date){var zeropad=function(num,width){width||(width=2);var numstr=void 0===num?"":num.toString();return"00000".substring(5-width+numstr.length)+numstr};return zeropad(date.getHours())+":"+zeropad(date.getMinutes())+":"+zeropad(date.getSeconds())+"."+zeropad(date.getMilliseconds(),3)},fluid.isTracing=!1,fluid.registerNamespace("fluid.tracing"),fluid.tracing.pathCount=[],fluid.tracing.summarisePathCount=function(pathCount){pathCount=pathCount||fluid.tracing.pathCount;for(var togo={},i=0;i<pathCount.length;++i){var path=pathCount[i];togo[path]?++togo[path]:togo[path]=1}var toReallyGo=[];return fluid.each(togo,(function(el,path){toReallyGo.push({path:path,count:el})})),toReallyGo.sort((function(a,b){return b.count-a.count})),toReallyGo},fluid.tracing.condensePathCount=function(prefixes,pathCount){prefixes=fluid.makeArray(prefixes);var prefixCount={};fluid.each(prefixes,(function(prefix){prefixCount[prefix]=0}));var togo=[];return fluid.each(pathCount,(function(el){var path=el.path;fluid.find(prefixes,(function(prefix){if(0===path.indexOf(prefix))return prefixCount[prefix]+=el.count,!0}))||togo.push(el)})),fluid.each(prefixCount,(function(count,path){togo.unshift({path:path,count:count})})),togo},fluid.obtainException=function(){return new Error("Trace exception")},fluid.registerNamespace("fluid.exceptionDecoders"),fluid.decodeStack=function(){var e=fluid.obtainException();return fluid.exceptionDecoders.standard(e)},fluid.exceptionDecoders.standard=function(e){var lines=e.stack.replace(/(?:\n@:0)?\s+$/m,"").replace(/^\(/gm,"{anonymous}(").split("\n");return fluid.transform(lines,(function(line){var atind=(line=line.replace(/\)/g,"")).indexOf("at ");return-1===atind?[line]:[line.substring(atind+"at ".length),line.substring(0,atind)]}))},fluid.getCallerInfo=function(atDepth){atDepth=atDepth||3;var stack=fluid.decodeStack(),element=stack&&stack[atDepth]&&stack[atDepth][0];if(element){var lastslash=element.lastIndexOf("/");-1===lastslash&&(lastslash=0);var nextColon=element.indexOf(":",lastslash);return{path:element.substring(0,lastslash),filename:element.substring(lastslash+1,nextColon),index:element.substring(nextColon+1)}}return null},fluid.generatePadding=function(c,count){for(var togo="",i=0;i<count;++i)togo+=c;return togo},fluid.SYNTHETIC_PROPERTY=Object.freeze({}),fluid.getSafeProperty=function(obj,key){var desc=Object.getOwnPropertyDescriptor(obj,key);return desc&&!desc.get?obj[key]:fluid.SYNTHETIC_PROPERTY},fluid.prettyPrintJSONImpl=function(obj,small,options){function out(str){options.output+=str}var big=small+options.indentChars,isFunction="function"==typeof obj;if(void 0!==options.maxRenderChars&&options.output.length>options.maxRenderChars)return!0;if(null===obj)out("null");else if(void 0===obj)out("undefined");else if(obj===fluid.SYNTHETIC_PROPERTY)out("[Synthetic property]");else if(fluid.isPrimitive(obj)&&!isFunction)out(JSON.stringify(obj));else{if(-1!==options.stack.indexOf(obj))return void out("(CIRCULAR)");var i;if(options.stack.push(obj),fluid.isArrayable(obj))if(0===obj.length)out("[]");else{for(out("[\n"+big),i=0;i<obj.length;++i){if(fluid.prettyPrintJSONImpl(obj[i],big,options))return!0;i!==obj.length-1&&out(",\n"+big)}out("\n"+small+"]")}else{out("{"+(isFunction?" Function":"")+"\n"+big);var keys=fluid.keys(obj);for(i=0;i<keys.length;++i){var key=keys[i],value=fluid.getSafeProperty(obj,key);if(out(JSON.stringify(key)+": "),fluid.prettyPrintJSONImpl(value,big,options))return!0;i!==keys.length-1&&out(",\n"+big)}out("\n"+small+"}")}options.stack.pop()}},fluid.prettyPrintJSON=function(obj,options){return(options=$.extend({indent:4,stack:[],output:""},options)).indentChars=fluid.generatePadding(" ",options.indent),fluid.prettyPrintJSONImpl(obj,"",options),options.output},fluid.dumpEl=function(element){var togo;if(!element)return"null";if(3===element.nodeType||8===element.nodeType)return"[data: "+element.data+"]";if(9===element.nodeType)return"[document: location "+element.location+"]";if(!element.nodeType&&fluid.isArrayable(element)){togo="[";for(var i=0;i<element.length;++i)togo+=fluid.dumpEl(element[i]),i<element.length-1&&(togo+=", ");return togo+"]"}return togo=(element=$(element)).get(0).tagName,element.id&&(togo+="#"+element.id),element.attr("class")&&(togo+="."+element.attr("class")),togo},fluid.debugger=function(){},fluid.defaults("fluid.debuggingProbe",{gradeNames:["fluid.component"]}),fluid.probeToDistribution=function(probe){var instantiator=fluid.globalInstantiator,parsed=fluid.parseContextReference(probe.target),segs=fluid.model.parseToSegments(parsed.path,instantiator.parseEL,!0);"options"!==segs[0]&&segs.unshift("options");var parsedPriority=fluid.parsePriority(probe.priority);return parsedPriority.constraint&&!parsedPriority.constraint.target&&(parsedPriority.constraint.target="authoring"),{target:"{/ "+parsed.context+"}."+instantiator.composeSegments.apply(null,segs),record:{func:probe.func,funcName:probe.funcName,args:probe.args,priority:fluid.renderPriority(parsedPriority)}}},fluid.registerProbes=function(probes){var probeDistribution=fluid.transform(probes,fluid.probeToDistribution),memberName="fluid_debuggingProbe_"+fluid.allocateGuid();return fluid.construct([memberName],{type:"fluid.debuggingProbe",distributeOptions:probeDistribution}),memberName},fluid.deregisterProbes=function(probeName){fluid.destroy([probeName])};var fluid=fluid||{};async function applyOp(node,func){if(node=$(node)[0]){var promise=new Promise((function(resolve){node.addEventListener(func,resolve,{once:!0})}));return node[func](),promise}}fluid.uaMatch=function(ua){ua=ua.toLowerCase();var match=/(chrome)[ \/]([\w.]+)/.exec(ua)||/(webkit)[ \/]([\w.]+)/.exec(ua)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua)||/(msie) ([\w.]+)/.exec(ua)||ua.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua)||[];return{browser:match[1]||"",version:match[2]||"0"}},fluid.assignJQueryBrowser=function($){if(!$.browser){var matched=fluid.uaMatch(navigator.userAgent),browser={};matched.browser&&(browser[matched.browser]=!0,browser.version=matched.version),browser.chrome?browser.webkit=!0:browser.webkit&&(browser.safari=!0),$.browser=browser}},fluid.assignJQueryBrowser(jQuery),fluid.getScopedData=function(target,key){var data=$(target).data("fluid-scoped-data");return data?data[key]:void 0},fluid.setScopedData=function(target,key,value){$(target).each((function(){var data=$.data(this,"fluid-scoped-data")||{};data[key]=value,$.data(this,"fluid-scoped-data",data)}))},fluid.lastFocusedElement=null,$(document).on("focusin",(function(event){fluid.lastFocusedElement=event.target})),fluid.enabled=function(target,state){if(target=$(target),void 0===state)return!1!==fluid.getScopedData(target,"enablement");$("*",target).add(target).each((function(){void 0!==fluid.getScopedData(this,"enablement")?fluid.setScopedData(this,"enablement",state):/select|textarea|input/i.test(this.nodeName)&&$(this).prop("disabled",!state)})),fluid.setScopedData(target,"enablement",state)},fluid.initEnablement=function(target){fluid.setScopedData(target,"enablement",!0)},fluid.resolveEventTarget=function(event){for(;event.originalEvent&&event.originalEvent.target;)event=event.originalEvent;return event.target},$.each(["focus","blur"],(function(i,name){fluid[name]=function(elem){return applyOp(elem,name)}})),fluid.visitComponentChildren=function(that,visitor,options,segs){segs=segs||[];var shadow=fluid.shadowForComponent(that);for(var name in shadow.childComponents){var component=shadow.childComponents[name];if(!options.visited||!options.visited[component.id]){if(segs.push(name),options.visited&&(options.visited[component.id]=!0),visitor(component,name,segs,segs.length-1))return!0;options.flat||fluid.visitComponentChildren(component,visitor,options,segs),segs.pop()}}},fluid.getContextHash=function(instantiator,that){var shadow=instantiator.idToShadow[that.id];return shadow&&shadow.contextHash},fluid.componentHasGrade=function(that,gradeName){var contextHash=fluid.getContextHash(fluid.globalInstantiator,that);return!(!contextHash||!contextHash[gradeName])},fluid.visitComponentsForMatching=function(that,options,visitor){var instantiator=fluid.getInstantiator(that);options=$.extend({visited:{},instantiator:instantiator},options);var thatStack=[that],contextHashes=[fluid.getContextHash(instantiator,that)];fluid.visitComponentChildren(that,(function(component,name,segs){thatStack.length=1,contextHashes.length=1;for(var i=0;i<segs.length;++i){var child=thatStack[i][segs[i]];thatStack[i+1]=child,contextHashes[i+1]=fluid.getContextHash(instantiator,child)||{}}return visitor(component,thatStack,contextHashes,segs,segs.length)}),options,[])},fluid.getMemberNames=function(instantiator,thatStack){if(0===thatStack.length)return[];var path=instantiator.idToPath(fluid.peek(thatStack).id),segs=instantiator.parseEL(path);return segs.unshift.apply(segs,fluid.generate(thatStack.length-segs.length,"")),segs},fluid.visitComponentsForVisibility=function(instantiator,thatStack,visitor,options){options=options||{visited:{},flat:!0,instantiator:instantiator};for(var memberNames=fluid.getMemberNames(instantiator,thatStack),i=thatStack.length-1;i>=0;--i){var that=thatStack[i];if(options.visited[that.id]=!0,visitor(that,memberNames[i],memberNames,i))return;if(fluid.visitComponentChildren(that,visitor,options,memberNames))return;memberNames.pop()}},fluid.mountStrategy=function(prefix,root,toMount){var offset=prefix.length;return function(target,name,i,segs){if(!(i<=prefix.length)){for(var j=0;j<prefix.length;++j)if(segs[j]!==prefix[j])return;return toMount(target,name,i-prefix.length,segs.slice(offset))}}},fluid.invokerFromRecord=function(invokerec,name,that){fluid.pushActivity("makeInvoker","beginning instantiation of invoker with name %name and record %record as child of %that",{name:name,record:invokerec,that:that});var invoker=invokerec?fluid.makeInvoker(that,invokerec,name):void 0;return fluid.popActivity(),invoker},fluid.memberFromRecord=function(memberrecs,name,that){for(var togo,shadow=fluid.shadowForComponent(that),i=0;i<memberrecs.length;++i){var expanded=fluid.expandImmediate(memberrecs[i],that,shadow.localRecord);togo=fluid.isPlainObject(togo)?$.extend(!0,togo,expanded):expanded}return togo},fluid.resourceFromRecord=function(resourceRec,name,that){var resourceFetcher=fluid.getForComponent(that,"resourceFetcher"),resourceSpec=resourceFetcher.resourceSpecs[name],oneFetcher=new fluid.fetchResources.FetchOne(resourceSpec,resourceFetcher),existing=that.resources[name];if(existing&&existing!==fluid.inEvaluationMarker)return existing;var promise=oneFetcher.resourceSpec.promise;return promise.disposition||fluid.currentTreeTransaction().pendingIO.push(promise),oneFetcher},fluid.recordStrategy=function(that,options,optionsStrategy,recordPath,recordMaker,prefix,exceptions){prefix=prefix||[];var fullyEvaluated=!1;return{strategy:function(target,name,i){if(1===i&&!fullyEvaluated){var record=fluid.driveStrategy(options,[recordPath,name],optionsStrategy);if(void 0===record){if(!(prefix.length>0))return;fluid.fail("Reference to "+recordPath+" record with name "+name+" which is not registered for component "+fluid.dumpComponentAndPath(that))}fluid.set(target,[name],fluid.inEvaluationMarker);var member=recordMaker(record,name,that);return fluid.set(target,[name],member),member}},initter:function(){var records=fluid.driveStrategy(options,recordPath,optionsStrategy)||{};for(var name in records)exceptions&&exceptions[name]||fluid.getForComponent(that,prefix.concat([name]));fullyEvaluated=!0}}},fluid.makeDistributionRecord=function(contextThat,sourceRecord,sourcePath,targetSegs,exclusions,sourceType){sourceType=sourceType||"distribution",fluid.pushActivity("makeDistributionRecord","Making distribution record from source record %sourceRecord path %sourcePath to target path %targetSegs",{sourceRecord:sourceRecord,sourcePath:sourcePath,targetSegs:targetSegs});var source=fluid.copy(fluid.get(sourceRecord,sourcePath));fluid.each(exclusions,(function(exclusion){fluid.model.applyChangeRequest(source,{segs:exclusion,type:"DELETE"})}));var record={options:{}};return fluid.model.applyChangeRequest(record,{segs:targetSegs,type:"ADD",value:source}),fluid.checkComponentRecord(record,fluid.componentRecordExpected),fluid.popActivity(),$.extend(record,{contextThat:contextThat,recordType:sourceType})},fluid.filterBlocks=function(contextThat,sourceBlocks,sourceSegs,targetSegs,exclusions,removeSource){var togo=[];return fluid.each(sourceBlocks,(function(block){var source=fluid.get(block.source,sourceSegs);if(void 0!==source){togo.push(fluid.makeDistributionRecord(contextThat,block.source,sourceSegs,targetSegs,exclusions,"distribution"));var rescued=$.extend({},source);removeSource&&fluid.model.applyChangeRequest(block.source,{segs:sourceSegs,type:"DELETE"}),fluid.each(exclusions,(function(exclusion){var orig=fluid.get(rescued,exclusion);fluid.set(block.source,sourceSegs.concat(exclusion),orig)}))}})),togo},fluid.noteCollectedDistribution=function(parentShadow,memberName,distribution){fluid.model.setSimple(parentShadow,["collectedDistributions",memberName,distribution.id],!0)},fluid.isCollectedDistribution=function(parentShadow,memberName,distribution){return fluid.model.getSimple(parentShadow,["collectedDistributions",memberName,distribution.id])},fluid.clearCollectedDistributions=function(parentShadow,memberName){fluid.model.applyChangeRequest(parentShadow,{segs:["collectedDistributions",memberName],type:"DELETE"})},fluid.collectDistributions=function(distributedBlocks,parentShadow,distribution,thatStack,contextHashes,memberNames,i){var lastMember=fluid.peek(memberNames);!fluid.isCollectedDistribution(parentShadow,lastMember,distribution)&&fluid.matchIoCSelector(distribution.selector,thatStack,contextHashes,memberNames,i)&&(distributedBlocks.push.apply(distributedBlocks,fluid.copy(distribution.blocks)),fluid.noteCollectedDistribution(parentShadow,lastMember,distribution))},fluid.registerCollectedClearer=function(shadow,parentShadow,memberName){!shadow.collectedClearer&&parentShadow&&(shadow.collectedClearer=function(){fluid.clearCollectedDistributions(parentShadow,memberName)})},fluid.receiveDistributions=function(parentThat,gradeNames,memberName,that){var instantiator=fluid.getInstantiator(parentThat||that),thatStack=instantiator.getThatStack(parentThat||that);thatStack.unshift(fluid.rootComponent);var memberNames=fluid.getMemberNames(instantiator,thatStack),shadows=fluid.transform(thatStack,(function(thisThat){return instantiator.idToShadow[thisThat.id]})),parentShadow=shadows[shadows.length-(parentThat?1:2)],contextHashes=fluid.getMembers(shadows,"contextHash");parentThat?(memberNames.push(memberName),contextHashes.push(fluid.gradeNamesToHash(gradeNames)),thatStack.push(that)):fluid.registerCollectedClearer(fluid.peek(shadows),parentShadow,fluid.peek(memberNames));for(var distributedBlocks=[],i=0;i<thatStack.length-1;++i)fluid.each(shadows[i].distributions,(function(distribution){fluid.collectDistributions(distributedBlocks,parentShadow,distribution,thatStack,contextHashes,memberNames,i)}));return distributedBlocks},fluid.computeTreeDistance=function(path1,path2){for(var i=0;i<path1.length&&i<path2.length&&path1[i]===path2[i];)++i;return path1.length+path2.length-2*i},fluid.computeDistributionPriority=function(targetThat,distributedBlock){if(!distributedBlock.priority){var instantiator=fluid.getInstantiator(targetThat),targetStack=instantiator.getThatStack(targetThat),targetPath=fluid.getMemberNames(instantiator,targetStack),sourceStack=instantiator.getThatStack(distributedBlock.contextThat),sourcePath=fluid.getMemberNames(instantiator,sourceStack),distance=fluid.computeTreeDistance(targetPath,sourcePath);distributedBlock.priority=fluid.mergeRecordTypes.distribution-distance}return distributedBlock},fluid.applyDistributions=function(that,preBlocks,targetShadow){var distributedBlocks=fluid.transform(preBlocks,(function(preBlock){return fluid.generateExpandBlock(preBlock,that,targetShadow.mergePolicy)}),(function(distributedBlock){return fluid.computeDistributionPriority(that,distributedBlock)})),mergeOptions=targetShadow.mergeOptions;return mergeOptions.mergeBlocks.push.apply(mergeOptions.mergeBlocks,distributedBlocks),mergeOptions.updateBlocks(),distributedBlocks},fluid.matchIoCSelector=function(selector,thatStack,contextHashes,memberNames,i){for(var thatpos=thatStack.length-1,selpos=selector.length-1;;){for(var isChild=selector[selpos].child,mustMatchHere=thatpos===thatStack.length-1||isChild,that=thatStack[thatpos],selel=selector[selpos],match=!0,j=0;j<selel.predList.length;++j){var pred=selel.predList[j],context=pred.context;if(context&&"*"!==context&&!contextHashes[thatpos][context]&&memberNames[thatpos]!==context){match=!1;break}if(pred.id&&that.id!==pred.id){match=!1;break}}if(0===selpos&&thatpos>i&&mustMatchHere&&isChild&&(match=!1),match){if(0===selpos)return!0;--thatpos,--selpos}else{if(mustMatchHere)return!1;--thatpos}if(thatpos<i)return!1}},fluid.queryIoCSelector=function(root,selector,flat){var parsed=fluid.parseSelector(selector,fluid.IoCSSMatcher),togo=[];return fluid.visitComponentsForMatching(root,{flat:flat},(function(that,thatStack,contextHashes){fluid.matchIoCSelector(parsed,thatStack,contextHashes,[],1)&&togo.push(that)})),togo},fluid.isIoCSSSelector=function(context){return-1!==context.indexOf(" ")},fluid.pushDistributions=function(targetHead,selector,target,blocks){var targetShadow=fluid.shadowForComponent(targetHead),id=fluid.allocateGuid(),distribution={id:id,target:target,selector:selector,blocks:blocks};return Object.freeze(distribution),Object.freeze(distribution.blocks),distribution.blocks.forEach((function(block){fluid.freezeRecursive(block.options)})),fluid.pushArray(targetShadow,"distributions",distribution),id},fluid.clearDistribution=function(targetHeadId,id){var targetHeadShadow=fluid.globalInstantiator.idToShadow[targetHeadId];targetHeadShadow&&fluid.remove_if(targetHeadShadow.distributions,(function(distribution){return distribution.id===id}))},fluid.clearDistributions=function(shadow){fluid.each(shadow.outDistributions,(function(outDist){fluid.clearDistribution(outDist.targetHeadId,outDist.distributionId)}))},fluid.extractSelectorHead=function(parsedSelector){var predList=parsedSelector[0].predList,context=predList[0].context;return predList.length=0,context},fluid.parseExpectedOptionsPath=function(path,role){var segs=fluid.model.parseEL(path);return"options"!==segs[0]&&fluid.fail("Error in options distribution path ",path," - only "+role+' paths beginning with "options" are supported'),segs.slice(1)},fluid.replicateProperty=function(source,property,targets){void 0!==source[property]&&fluid.each(targets,(function(target){target[property]=source[property]}))},fluid.undistributableOptions=["gradeNames","distributeOptions","argumentMap","mergePolicy"],fluid.distributeOptionsOne=function(that,record,targetRef,selector,context){fluid.pushActivity("distributeOptions","parsing distributeOptions block %record %that ",{that:that,record:record});var targetHead=fluid.resolveContext(context,that);targetHead||fluid.fail("Error in options distribution record ",record," - could not resolve context {"+context+"} to a head component");var preBlocks,thatShadow=fluid.shadowForComponent(that),targetSegs=fluid.model.parseEL(targetRef.path);if(void 0!==record.record)preBlocks=[fluid.makeDistributionRecord(that,record.record,[],targetSegs,[])];else{var source=fluid.parseContextReference(record.source);"that"!==source.context&&fluid.fail("Error in options distribution record ",record," only a source context of {that} is supported");var sourceSegs=fluid.parseExpectedOptionsPath(source.path,"source"),fullExclusions=fluid.makeArray(record.exclusions).concat(0===sourceSegs.length?fluid.undistributableOptions:[]),exclusions=fluid.transform(fullExclusions,(function(exclusion){return fluid.model.parseEL(exclusion)}));preBlocks=fluid.filterBlocks(that,thatShadow.mergeOptions.mergeBlocks,sourceSegs,targetSegs,exclusions,record.removeSource),thatShadow.mergeOptions.updateBlocks()}if(fluid.replicateProperty(record,"priority",preBlocks),fluid.replicateProperty(record,"namespace",preBlocks),selector){var distributionId=fluid.pushDistributions(targetHead,selector,record.target,preBlocks);thatShadow.outDistributions=thatShadow.outDistributions||[],thatShadow.outDistributions.push({targetHeadId:targetHead.id,distributionId:distributionId})}else{var targetShadow=fluid.shadowForComponent(targetHead);fluid.applyDistributions(that,preBlocks,targetShadow)}fluid.popActivity()},fluid.distributeOptions=function(that,optionsStrategy){var records=fluid.driveStrategy(that.options,"distributeOptions",optionsStrategy);fluid.each(records,(function(record){"string"!=typeof record.target&&fluid.fail("Error in options distribution record ",record,' a member named "target" must be supplied holding an IoC reference'),"string"==typeof record.source^void 0===record.record&&fluid.fail("Error in options distribution record ",record,': must supply either a member "source" holding an IoC reference or a member "record" holding a literal record');var selector,context,targetRef=fluid.parseContextReference(record.target);(fluid.isIoCSSSelector(targetRef.context)?(selector=fluid.parseSelector(targetRef.context,fluid.IoCSSMatcher),context=fluid.extractSelectorHead(selector)):context=targetRef.context,"/"===context||"that"===context)?fluid.distributeOptionsOne(that,record,targetRef,selector,context):fluid.currentTreeTransaction().deferredDistributions.push({that:that,record:record,targetRef:targetRef,selector:selector,context:context})}))},fluid.contextName=1,fluid.memberName=2,fluid.gradeNamesToHash=function(gradeNames){var contextHash={};return fluid.each(gradeNames,(function(gradeName){fluid.isReferenceOrExpander(gradeName)||(contextHash[gradeName]=fluid.contextName,contextHash[fluid.computeNickName(gradeName)]=fluid.contextName)})),contextHash},fluid.applyToContexts=function(hash,key,disposition){var existing=hash[key];hash[key]=(existing||0)|disposition},fluid.applyToScope=function(scope,key,value,disposition){(!scope[key]||disposition&fluid.memberName)&&(scope[key]=value)},fluid.cacheShadowGrades=function(that,shadow){var contextHash=fluid.gradeNamesToHash(that.options&&that.options.gradeNames||[that.typeName]);fluid.applyToContexts(contextHash,shadow.memberName,fluid.memberName),shadow.contextHash=contextHash,fluid.each(contextHash,(function(disposition,context){shadow.ownScope[context]=that,shadow.parentShadow&&"fluid.rootComponent"!==shadow.parentShadow.that.typeName&&fluid.applyToScope(shadow.parentShadow.childrenScope,context,that,disposition)}))},fluid.deliverOptionsStrategy=function(that,target,mergeOptions){var shadow=fluid.shadowForComponent(that,shadow);fluid.cacheShadowGrades(that,shadow),shadow.mergeOptions=mergeOptions},fluid.collectDistributedGrades=function(rec){var distributedBlocks=fluid.receiveDistributions(null,null,null,rec.that);if(distributedBlocks.length>0){var readyBlocks=fluid.applyDistributions(rec.that,distributedBlocks,rec.shadow),gradeNamesList=fluid.transform(fluid.getMembers(readyBlocks,["source","gradeNames"]),fluid.makeArray);fluid.accumulateDynamicGrades(rec,fluid.flatten(gradeNamesList))}},fluid.applyDynamicGrades=function(rec){rec.oldGradeNames=fluid.makeArray(rec.gradeNames);var newDefaults=fluid.copy(fluid.getMergedDefaults(rec.that.typeName,rec.gradeNames));rec.gradeNames.length=0,rec.gradeNames.push.apply(rec.gradeNames,newDefaults.gradeNames),fluid.each(rec.gradeNames,(function(gradeName){fluid.isReferenceOrExpander(gradeName)||(rec.seenGrades[gradeName]=!0)}));var shadow=rec.shadow;fluid.cacheShadowGrades(rec.that,shadow),shadow.mergeOptions.destroyValue(["mergePolicy"]),shadow.mergeOptions.destroyValue(["components"]),shadow.mergeOptions.destroyValue(["invokers"]),rec.defaultsBlock.source=newDefaults,shadow.mergeOptions.updateBlocks(),shadow.mergeOptions.computeMergePolicy(),fluid.accumulateDynamicGrades(rec,newDefaults.gradeNames)},fluid.accumulateDynamicGrades=function(rec,newGradeNames){fluid.each(newGradeNames,(function(gradeName){var flatGradeName=fluid.flattenGradeName(gradeName);rec.seenGrades[flatGradeName]||(fluid.isReferenceOrExpander(gradeName)?(rec.rawDynamic.push(gradeName),rec.seenGrades[flatGradeName]=!0):fluid.contains(rec.oldGradeNames,gradeName)||rec.plainDynamic.push(gradeName))}))},fluid.accumulateContextAwareGrades=function(that,rec){var newContextAware=[];if(fluid.contains(rec.gradeNames,"fluid.contextAware")){var contextAwarenessOptions=fluid.getForComponent(that,["options","contextAwareness"]);newContextAware=fluid.contextAware.check(that,contextAwarenessOptions);var lostGrade=fluid.find_if(rec.contextAware,(function(gradeName){return!fluid.contains(newContextAware,gradeName)}));lostGrade&&fluid.fail("Failure operating contextAwareness definition ",contextAwarenessOptions," for component "+fluid.dumpComponentAndPath(that)+": grade name "+lostGrade+" returned by an earlier round of checks was lost through a context change caused by a raw dynamic grade"),rec.contextAware=newContextAware}return newContextAware},fluid.computeDynamicGrades=function(that,shadow,strategy){delete that.options.gradeNames;var gradeNames=fluid.driveStrategy(that.options,"gradeNames",strategy);gradeNames.length=0;var rec={that:that,shadow:shadow,defaultsBlock:fluid.findMergeBlocks(shadow.mergeOptions.mergeBlocks,"defaults")[0],gradeNames:gradeNames,seenGrades:{},plainDynamic:[],contextAware:[],rawDynamic:[]};fluid.each(shadow.mergeOptions.mergeBlocks,(function(block){gradeNames.push.apply(gradeNames,fluid.makeArray(block.target&&block.target.gradeNames)),fluid.applyDynamicGrades(rec)})),fluid.collectDistributedGrades(rec);for(var checkContextAware=!0;;){for(;rec.plainDynamic.length>0;)gradeNames.push.apply(gradeNames,rec.plainDynamic),rec.plainDynamic.length=0,fluid.applyDynamicGrades(rec),fluid.collectDistributedGrades(rec);if(checkContextAware){var newContextAware=fluid.accumulateContextAwareGrades(that,rec);rec.plainDynamic=rec.plainDynamic.concat(newContextAware),checkContextAware=!1}else{if(!(rec.rawDynamic.length>0))break;var toexpand=rec.rawDynamic.shift(),expanded=fluid.expandImmediate(toexpand,that,shadow.localRecord);"function"==typeof expanded&&(expanded=expanded()),expanded&&(rec.plainDynamic=rec.plainDynamic.concat(expanded)),checkContextAware=!0}}fluid.remove_if(gradeNames,fluid.isReferenceOrExpander),shadow.collectedClearer&&(shadow.collectedClearer(),delete shadow.collectedClearer)},fluid.computeComponentAccessor=function(that,localRecord){var instantiator=fluid.globalInstantiator,shadow=fluid.shadowForComponent(that);shadow.localRecord=localRecord;var options=that.options,strategy=shadow.mergeOptions.strategy,optionsStrategy=fluid.mountStrategy(["options"],options,strategy);shadow.invokerStrategy=fluid.recordStrategy(that,options,strategy,"invokers",fluid.invokerFromRecord),shadow.eventStrategyBlock=fluid.recordStrategy(that,options,strategy,"events",fluid.eventFromRecord,["events"]);var eventStrategy=fluid.mountStrategy(["events"],that,shadow.eventStrategyBlock.strategy);if(shadow.memberStrategy=fluid.recordStrategy(that,options,strategy,"members",fluid.memberFromRecord,null,{model:!0,modelRelay:!0}),shadow.getConfig={strategies:[fluid.concreteStrategy,fluid.model.funcResolverStrategy,optionsStrategy,shadow.invokerStrategy.strategy,shadow.memberStrategy.strategy,eventStrategy]},fluid.computeDynamicGrades(that,shadow,strategy,shadow.mergeOptions.mergeBlocks),shadow.contextHash["fluid.resourceLoader"]){shadow.resourceStrategyBlock=fluid.recordStrategy(that,options,strategy,"resources",fluid.resourceFromRecord,["resources"]);var resourceStrategy=fluid.mountStrategy(["resources"],that,shadow.resourceStrategyBlock.strategy);shadow.getConfig.strategies.push(resourceStrategy),that.resources={}}if(fluid.distributeOptions(that,strategy),shadow.contextHash["fluid.resolveRoot"]){var memberName;if(shadow.contextHash["fluid.resolveRootSingle"]){var singleRootType=fluid.getForComponent(that,["options","singleRootType"]);singleRootType||fluid.fail("Cannot register object with grades "+Object.keys(shadow.contextHash).join(", ")+" as fluid.resolveRootSingle since it has not defined option singleRootType"),memberName=fluid.typeNameToMemberName(singleRootType)}else memberName=fluid.computeGlobalMemberName(that.typeName,that.id);var parent=fluid.resolveRootComponent;parent[memberName]&&instantiator.clearComponent(parent,memberName),instantiator.recordKnownComponent(parent,that,memberName,!1)}return shadow.getConfig},fluid.shadowForComponent=function(component){var instantiator=fluid.getInstantiator(component);return instantiator&&component?instantiator.idToShadow[component.id]:null},fluid.pathInEvaluation=function(path,paths){var index=paths.indexOf(path);return-1!==index&&index!==paths.length-1},fluid.getForComponent=function(component,path){var segs=fluid.model.pathToSegments(path);if(0===segs.length)return component;var instantiator=fluid.globalInstantiator,shadow=fluid.shadowForComponent(component);if(!shadow)return fluid.get(component,path);var next=fluid.get(component,segs[0],shadow.getConfig);if(fluid.isComponent(next))return fluid.getForComponent(next,segs.slice(1));var inEvaluationPaths=instantiator.inEvaluationPaths,inEvaluationPath=component.id+":"+path;if(!fluid.pathInEvaluation(inEvaluationPath,inEvaluationPaths)){inEvaluationPaths.push(inEvaluationPath);var togo=fluid.get(component,path,shadow.getConfig);return inEvaluationPaths.pop(),togo}fluid.fail("Error in component configuration - a circular reference was found during evaluation of path "+path+" for component "+fluid.dumpComponentAndPath(component)+": a circular set of references was found - for more details, see the activity records following this message in the console")},fluid.concreteStrategy=function(component,thisSeg,index,segs){var atval=component[thisSeg];return atval===fluid.inEvaluationMarker&&fluid.fail('Error in component configuration - a circular reference was found during evaluation of path segment "'+thisSeg+" of path ",segs,'": for more details, see the activity records following this message in the console, or issue fluid.setLogging(fluid.logLevel.TRACE) when running your application'),index>1?atval:void 0===atval&&component.hasOwnProperty(thisSeg)?fluid.NO_VALUE:atval},fluid.frameworkGrades=["fluid.component","fluid.modelComponent","fluid.viewComponent","fluid.rendererComponent"],fluid.filterBuiltinGrades=function(gradeNames){return fluid.remove_if(fluid.makeArray(gradeNames),(function(gradeName){return-1!==fluid.frameworkGrades.indexOf(gradeName)}))},fluid.dumpGradeNames=function(that){return that.options&&that.options.gradeNames?" gradeNames: "+JSON.stringify(fluid.filterBuiltinGrades(that.options.gradeNames)):""},fluid.dumpThat=function(that){return'{ typeName: "'+that.typeName+" id: "+that.id+'"'+fluid.dumpGradeNames(that)+"}"},fluid.dumpThatStack=function(thatStack,instantiator){return fluid.transform(thatStack,(function(that){var path=instantiator.idToPath(that.id);return fluid.dumpThat(that)+(path?" - path: "+path:"")})).join("\n")},fluid.dumpComponentPath=function(that){var path=fluid.pathForComponent(that);return path?fluid.pathUtil.composeSegments.apply(null,path):"** no path registered for component **"},fluid.dumpComponentAndPath=function(that){return"component "+fluid.dumpThat(that)+" at path "+fluid.dumpComponentPath(that)},fluid.resolveContext=function(context,that,fast){if("that"===context)return that;if("/"===context)return fluid.rootComponent;if("object"==typeof context){var innerContext=fluid.resolveContext(context.context,that,fast);fluid.isComponent(innerContext)||fluid.triggerMismatchedPathError(context.context,that);var rawValue=fluid.getForComponent(innerContext,context.path),expanded=fluid.expandOptions(rawValue,that);return fluid.isComponent(expanded)||fluid.fail("Unable to resolve recursive context expression "+fluid.renderContextReference(context)+": the directly resolved value of "+rawValue+" did not resolve to a component in the scope of component ",that,": got ",expanded),expanded}var foundComponent,instantiator=fluid.globalInstantiator;if(fast)return instantiator.idToShadow[that.id].ownScope[context];var thatStack=instantiator.getFullStack(that);return fluid.visitComponentsForVisibility(instantiator,thatStack,(function(component,memberName){var scopeValue=fluid.shadowForComponent(component).contextHash[context];if(scopeValue&&scopeValue!==fluid.memberName||context===memberName)return foundComponent=component,!0})),foundComponent},fluid.triggerMismatchedPathError=function(parsed,parentThat){var ref=fluid.renderContextReference(parsed);fluid.fail("Failed to resolve reference "+ref+" - could not match context with name "+parsed.context+" from "+fluid.dumpComponentAndPath(parentThat))},fluid.makeStackFetcher=function(parentThat,localRecord,fast){return function(parsed){parentThat&&"destroyed"===parentThat.lifecycleStatus&&fluid.fail("Cannot resolve reference "+fluid.renderContextReference(parsed)+" from component "+fluid.dumpThat(parentThat)+" which has been destroyed");var context=parsed.context;if(localRecord&&context in localRecord)return fluid.get(localRecord[context],parsed.path);var foundComponent=fluid.resolveContext(context,parentThat,fast);return foundComponent||""===parsed.path||fluid.triggerMismatchedPathError(parsed,parentThat),fluid.getForComponent(foundComponent,parsed.path)}},fluid.makeStackResolverOptions=function(parentThat,localRecord,fast){return $.extend(fluid.copy(fluid.rawDefaults("fluid.makeExpandOptions")),{ELstyle:"{}",localRecord:localRecord||{},fetcher:fluid.makeStackFetcher(parentThat,localRecord,fast),contextThat:parentThat,exceptions:{members:{model:!0,modelRelay:!0}}})},fluid.clearListeners=function(shadow){fluid.each(shadow.listeners,(function(rec){rec.event.removeListener(rec.listenerId||rec.listener)})),delete shadow.listeners},fluid.recordListener=function(event,listener,shadow,listenerId){event.ownerId!==shadow.that.id&&fluid.pushArray(shadow,"listeners",{event:event,listener:listener,listenerId:listenerId})},fluid.constructScopeObjects=function(instantiator,parent,child,childShadow){var parentShadow=parent?instantiator.idToShadow[parent.id]:null;childShadow.childrenScope=parentShadow?Object.create(parentShadow.ownScope):{},childShadow.ownScope=Object.create(childShadow.childrenScope),childShadow.parentShadow=parentShadow,childShadow.childComponents={},fluid.cacheShadowGrades(child,childShadow)},fluid.clearChildrenScope=function(parentShadow,child,childShadow,memberName){var keys=fluid.keys(childShadow.contextHash);keys.push(memberName),keys.forEach((function(context){parentShadow.childrenScope[context]===child&&delete parentShadow.childrenScope[context]}))},fluid.clearComponentIndexes=function(instantiator,destroyRec){var shadow=destroyRec.shadow;fluid.clearChildrenScope(shadow,destroyRec.child,destroyRec.childShadow,destroyRec.name),delete instantiator.pathToComponent[destroyRec.childPath],delete shadow.childComponents[destroyRec.name]},fluid.doDestroy=function(instantiator,destroyRec){var shadow=destroyRec.childShadow,that=destroyRec.child;for(var key in fluid.each(shadow.injectedPaths,(function(troo,injectedPath){var parentPath=fluid.model.getToTailPath(injectedPath),otherParent=instantiator.pathToComponent[parentPath];instantiator.clearComponent(otherParent,fluid.model.getTailPath(injectedPath),that)})),fluid.clearComponentIndexes(instantiator,destroyRec),fluid.clearDistributions(shadow),fluid.clearListeners(shadow),that.events)"afterDestroy"!==key&&"function"==typeof that.events[key].destroy&&that.events[key].destroy();that.applier&&that.applier.destroy(),that.lifecycleStatus="destroyed",fluid.fireEvent(destroyRec.child,"afterDestroy",[destroyRec.child,destroyRec.name,destroyRec.component]),delete instantiator.idToShadow[destroyRec.child.id]},fluid.instantiator=function(){var that=fluid.typeTag("instantiator");function recordComponent(parent,component,path,name,created){var shadow;if(created)(shadow=that.idToShadow[component.id]={}).that=component,shadow.path=path,shadow.memberName=name,fluid.constructScopeObjects(that,parent,component,shadow);else{(shadow=that.idToShadow[component.id]).injectedPaths=shadow.injectedPaths||{},shadow.injectedPaths[path]=!0;var parentShadow=that.idToShadow[parent.id],keys=fluid.keys(shadow.contextHash);fluid.remove_if(keys,(function(key){return shadow.contextHash&&shadow.contextHash[key]===fluid.memberName})),keys.push(name),keys.forEach((function(context){parentShadow.childrenScope.hasOwnProperty(context)||(parentShadow.childrenScope[context]=component)}))}that.pathToComponent[path]&&fluid.fail("Error during instantiation - path "+path+" which has just created component "+fluid.dumpThat(component)+" has already been used for component "+fluid.dumpThat(that.pathToComponent[path])+" - this is a circular instantiation or other oversight. Please clear the component using instantiator.clearComponent() before reusing the path."),that.pathToComponent[path]=component}return $.extend(that,{lifecycleStatus:"constructed",pathToComponent:{},idToShadow:{},modelTransactions:{},treeTransactions:{},inEvaluationPaths:[],currentTreeTransactionId:null,composePath:fluid.model.composePath,composeSegments:fluid.model.composeSegments,parseEL:fluid.model.parseEL,events:{onComponentAttach:fluid.makeEventFirer({name:"instantiator's onComponentAttach event"}),onComponentClear:fluid.makeEventFirer({name:"instantiator's onComponentClear event"}),onBeginTreeTransaction:fluid.makeEventFirer({name:"instantiator's onBeginTransaction event"}),onEndTreeTransaction:fluid.makeEventFirer({name:"instantiator's onEndTransaction event"})}}),that.parseToSegments=function(path){return fluid.model.parseToSegments(path,that.parseEL,!0)},that.idToPath=function(id){var shadow=that.idToShadow[id];return shadow?shadow.path:""},that.getThatStack=function(component){var shadow=that.idToShadow[component.id];if(shadow){for(var path=shadow.path,parsed=that.parseEL(path),root=that.pathToComponent[""],togo=[],i=0;i<parsed.length;++i)root=root[parsed[i]],togo.push(root);return togo}return[]},that.getFullStack=function(component){var thatStack=component?that.getThatStack(component):[];return thatStack.unshift(fluid.resolveRootComponent),thatStack},that.recordRoot=function(component){recordComponent(null,component,"","",!0)},that.recordKnownComponent=function(parent,component,name,created){if(parent[name]=component,fluid.isComponent(component)||"instantiator"===component.type){var parentShadow=that.idToShadow[parent.id];parentShadow.childComponents[name]=component;var path=that.composePath(parentShadow.path,name);recordComponent(parent,component,path,name,created),that.events.onComponentAttach.fire(component,path,that,created)}else fluid.fail("Cannot record non-component with value ",component,' at path "'+name+'" of parent ',parent)},that.clearComponent=function(component,name,child,options,nested,path){var shadow=that.idToShadow[component.id];options=options||{flat:!0,destroyRecs:[]},child=child||component[name],void 0===(path=path||shadow.path)&&fluid.fail("Cannot clear component "+name+" from component ",component," which was not created by this instantiator");var childPath=that.composePath(path,name),childShadow=that.idToShadow[child.id];if(childShadow){var created=childShadow.path===childPath;that.events.onComponentClear.fire(child,childPath,component,created);var destroyRec={child:child,childShadow:childShadow,name:name,component:component,shadow:shadow,childPath:childPath};created?(fluid.isDestroyed(child)&&fluid.fail('Cannot destroy component which is already in status "'+child.lifecycleStatus+'"'),child.lifecycleStatus="destroying",fluid.visitComponentChildren(child,(function(gchild,gchildname,segs,i){var parentPath=that.composeSegments.apply(null,segs.slice(0,i));that.clearComponent(child,gchildname,null,options,!0,parentPath)}),options,that.parseEL(childPath)),fluid.fireEvent(child,"onDestroy",[child,name||"",component]),options.destroyRecs.push(destroyRec)):(fluid.remove_if(childShadow.injectedPaths,(function(troo,path){return path===childPath})),fluid.clearComponentIndexes(that,destroyRec)),nested||(delete component[name],options.destroyRecs.forEach((function(destroyRec){fluid.doDestroy(that,destroyRec)})))}},that},fluid.globalInstantiator=fluid.instantiator(),fluid.getInstantiator=function(component){var instantiator=fluid.globalInstantiator;return component&&instantiator.idToShadow[component.id]?instantiator:null},fluid.defaults("fluid.resolveRoot"),fluid.defaults("fluid.resolveRootSingle",{gradeNames:"fluid.resolveRoot"}),fluid.constructRootComponents=function(instantiator){fluid.rootComponent=instantiator.rootComponent=fluid.typeTag("fluid.rootComponent"),instantiator.recordRoot(fluid.rootComponent),fluid.resolveRootComponent=instantiator.resolveRootComponent=fluid.typeTag("fluid.resolveRootComponent"),instantiator.recordKnownComponent(fluid.rootComponent,fluid.resolveRootComponent,"resolveRootComponent",!0);var rootShadow=instantiator.idToShadow[fluid.rootComponent.id];rootShadow.contextHash={};var resolveRootShadow=instantiator.idToShadow[fluid.resolveRootComponent.id];resolveRootShadow.ownScope=rootShadow.ownScope,resolveRootShadow.childrenScope=rootShadow.childrenScope,instantiator.recordKnownComponent(fluid.resolveRootComponent,instantiator,"instantiator",!0),resolveRootShadow.childrenScope.instantiator=instantiator},fluid.constructRootComponents(fluid.globalInstantiator),fluid.expandOptions=function(args,that,mergePolicy,localRecord,outerExpandOptions){if(!args)return args;fluid.pushActivity("expandOptions","expanding options %args for component %that ",{that:that,args:args});var expandOptions=fluid.makeStackResolverOptions(that,localRecord);expandOptions.mergePolicy=mergePolicy,expandOptions.defer=outerExpandOptions&&outerExpandOptions.defer;var expanded=expandOptions.defer?fluid.makeExpandOptions(args,expandOptions):fluid.expand(args,expandOptions);return fluid.popActivity(),expanded},fluid.computeMergeListPriority=function(toMerge){toMerge.forEach((function(record){var recordType=record.recordType;"distribution"!==recordType&&(record.priority=fluid.mergeRecordTypes[recordType]+(record.priorityDelta||0),Number.isInteger(record.priority)||fluid.fail("Merge record with unrecognised type "+recordType+": ",record))}))};var addPolicyBuiltins=function(policy){return fluid.each(["gradeNames","mergePolicy","argumentMap","components","dynamicComponents","events","listeners","modelListeners","modelRelay","distributeOptions","transformOptions"],(function(key){fluid.set(policy,[key,"*","noexpand"],!0)})),policy};fluid.generateExpandBlock=function(record,that,mergePolicy,localRecord){var expanded=fluid.expandOptions(record.options||{},record.contextThat||that,mergePolicy,localRecord,{defer:!0});return expanded.priority=record.priority,expanded.namespace=record.namespace,expanded.recordType=record.recordType,expanded},fluid.fabricateDestroyMethod=function(that){return function(){var currentTrans=fluid.currentTreeTransaction(),shadow=fluid.shadowForComponent(that),transRec=fluid.destroy(shadow.path);currentTrans||transRec.promise.then(null,(function(e){throw e}))}},fluid.typeNameToMemberName=function(typeName){return typeName.replace(/\./g,"_")},fluid.expandComponentOptions=function(mergePolicy,potentia,lightMerge,that){var toMerge=lightMerge.toMerge,container=fluid.lightMergeValue(toMerge,"container");return container&&toMerge.push({recordType:"distribution",priority:fluid.mergeRecordTypes.distribution,options:{container:container},contextThat:potentia.parentThat}),that.destroy=fluid.fabricateDestroyMethod(that),addPolicyBuiltins(mergePolicy),fluid.shadowForComponent(that).mergePolicy=mergePolicy,fluid.computeMergeListPriority(toMerge),fluid.transform(toMerge,(function(value){return fluid.generateExpandBlock(value,that,mergePolicy,potentia.localRecord)}))},fluid.computeDynamicComponentKey=function(recordKey,sourceKey){return recordKey+(0===sourceKey||"0"===sourceKey?"":"-"+sourceKey)},fluid.concludeAnyTreeTransaction=function(){var errorOut,instantiator=fluid.globalInstantiator,transactionId=instantiator.currentTreeTransactionId;if(transactionId&&(instantiator.treeTransactions[transactionId].promise.then(null,(function(e){errorOut=e})),fluid.commitPotentiae(transactionId),errorOut))throw errorOut},fluid.bindDeferredComponent=function(that,componentName,lightMerge,dynamicComponent){var eventName=lightMerge.createOnEvent,event=fluid.isIoCReference(eventName)?fluid.expandOptions(eventName,that):that.events[eventName];event&&event.addListener||fluid.fail("Error instantiating createOnEvent component with name "+componentName+" of parent ",that," since event specification "+eventName+" could not be expanded to an event - got ",event);var shadow=fluid.shadowForComponent(that);dynamicComponent&&fluid.set(shadow,["dynamicComponentCount",componentName],0);var constructListener=function(){var key=dynamicComponent?fluid.computeDynamicComponentKey(componentName,shadow.dynamicComponentCount[componentName]++):componentName,localRecord={arguments:fluid.makeArray(arguments)};fluid.pushActivity("initDeferred","instantiating deferred component %componentName of parent %that due to event %eventName",{componentName:componentName,that:that,eventName:eventName});var freshLightMerge=fluid.copy(lightMerge);delete freshLightMerge.createOnEvent,fluid.registerConcreteSubPotentia(freshLightMerge,key,0,that,localRecord),fluid.popActivity()};event.addListener(constructListener),fluid.recordListener(event,constructListener,shadow),event.addListener(fluid.concludeAnyTreeTransaction,"fluid-componentConstruction","last:transaction"),fluid.recordListener(event,fluid.concludeAnyTreeTransaction,shadow)},fluid.markSubtree=function(instantiator,that,path,state){that.lifecycleStatus=state,fluid.visitComponentChildren(that,(function(child,name){var childPath=instantiator.composePath(path,name),childShadow=instantiator.idToShadow[child.id];childShadow&&childShadow.path===childPath&&fluid.markSubtree(instantiator,child,childPath,state)}),{flat:!0})},fluid.assessTreeConstruction=function(that,shadow){var instantiator=fluid.globalInstantiator,thatStack=instantiator.getThatStack(that),unstableUp=fluid.find_if(thatStack,(function(that){return"constructing"===that.lifecycleStatus}));unstableUp?that.lifecycleStatus="constructed":fluid.markSubtree(instantiator,that,shadow.path,"treeConstructed")},fluid.concludeComponentObservation=function(shadow){var that=shadow.that,mergeOptions=shadow.mergeOptions;fluid.pushActivity("concludeComponentObservation","constructing component of type %componentName at path %path",{componentName:that.typeName,path:shadow.path}),mergeOptions.evaluateFully=!0;for(var i=0;i<mergeOptions.mergeBlocks.length;++i)mergeOptions.mergeBlocks[i].initter();mergeOptions.initter(),delete that.options.mergePolicy,shadow.memberStrategy.initter(),shadow.invokerStrategy.initter(),fluid.freezeRecursive(that.options),fluid.each(shadow.lightMergeComponents,(function(lightMerge,key){lightMerge.createOnEvent&&fluid.bindDeferredComponent(that,key,lightMerge)})),fluid.each(shadow.lightMergeDynamicComponents,(function(lightMerge,key){lightMerge.createOnEvent&&fluid.bindDeferredComponent(that,key,lightMerge,!0)})),fluid.popActivity()},fluid.concludeComponentInit=function(shadow){var that=shadow.that;if(!fluid.isDestroyed(that))return that.lifecycleStatus="constructed",fluid.assessTreeConstruction(that,shadow),that.events.onCreate.fire(that),fluid.popActivity(),that},fluid.pushCreatePotentia=function(potentiaList,path,topush){var existing=potentiaList.pathToPotentia[path];if(!existing||existing.applied)return potentiaList.pathToPotentia[path]=topush,topush.records&&(topush.lightMerge=fluid.lightMergeRecords(topush.records),delete topush.records),topush;fluid.lightMergeRecords.pushRecords(existing,topush.records||topush.lightMerge.toMerge)},fluid.blankPotentiaList=function(){return{destroys:[],creates:[],activeCount:0,pathToPotentia:{}}},fluid.isInjectedComponentRecord=function(record){return"string"==typeof record||fluid.isPlainObject(record,!0)&&record.expander},fluid.lightMergeValue=function(records,member){var value;return records.forEach((function(record){var recValue=record[member];value=void 0===recValue?value:recValue})),value},fluid.lightMergeRecords=function(records){var togo={toMerge:[],isInjected:!1};return fluid.lightMergeRecords.pushRecords(togo,records),togo},fluid.lightMergeRecords.pushRecord=function(lightMerge,record){fluid.isInjectedComponentRecord(record)?(lightMerge.toMerge=[{injected:record}],lightMerge.isInjected=!0):(lightMerge.type=record.type||lightMerge.type,lightMerge.createOnEvent=record.createOnEvent||lightMerge.createOnEvent,lightMerge.source=record.source||lightMerge.source,lightMerge.sources=record.sources||lightMerge.sources,lightMerge.isInjected?lightMerge.toMerge=[record]:lightMerge.toMerge.push(record),lightMerge.isInjected=!1)},fluid.lightMergeRecords.pushRecords=function(lightMerge,records){records.forEach((function(record){fluid.lightMergeRecords.pushRecord(lightMerge,record)}))},fluid.instantiateEvents=function(shadow){var that=shadow.that;shadow.eventStrategyBlock.initter();var listeners=fluid.getForComponent(that,["options","listeners"]);fluid.mergeListeners(that,that.events,listeners);var errors=fluid.validateListenersImplemented(that);errors.length>0&&fluid.fail(fluid.transform(errors,(function(error){return["Error constructing component ",that," - the listener for event "+error.name+" with namespace "+error.namespace+(error.componentSource?" which was defined in grade "+error.componentSource:"")+" needs to be overridden with a concrete implementation"]}))).join("\n")},fluid.initComponentShell=function(potentia,lightMerge){var instantiator=fluid.globalInstantiator,upDefaults=fluid.defaults(lightMerge.type),parentThat=potentia.parentThat,memberName=potentia.memberName,distributions=fluid.receiveDistributions(parentThat,upDefaults&&upDefaults.gradeNames,memberName,{});fluid.each(distributions,(function(distribution){fluid.computeDistributionPriority(parentThat,distribution),fluid.isPrimitive(distribution.priority)&&(distribution.priority=fluid.parsePriority(distribution.priority,0,!1,"options distribution"))})),fluid.sortByPriority(distributions),fluid.lightMergeRecords.pushRecords(lightMerge,distributions),upDefaults=fluid.defaults(lightMerge.type);var defaultCopy=fluid.copy(upDefaults);lightMerge.toMerge.unshift({options:defaultCopy,recordType:"defaults"});var that="fluid.emptySubcomponent"===lightMerge.type?null:fluid.typeTag(lightMerge.type,potentia.componentId);that&&(that.lifecycleStatus="constructing",instantiator.recordKnownComponent(parentThat,that,memberName,!0),fluid.mergeComponentOptions(that,potentia,lightMerge).exceptions={members:{model:!0,modelRelay:!0}},that.events={});return that},fluid.registerConcreteSubPotentia=function(lightMerge,key,componentDepth,parentShell,localRecord,transactionId){componentDepth=componentDepth||0;var newSegs=fluid.pathForComponent(parentShell).concat([key]);parentShell[key]&&fluid.registerPotentia({segs:newSegs,type:"destroy"},transactionId),lightMerge.toMerge=fluid.transform(lightMerge.toMerge,(function(toMerge){return $.extend({componentDepth:componentDepth+1,sourceComponentId:parentShell.id,recordType:"subcomponentRecord"},toMerge)})),lightMerge.type=fluid.expandImmediate(lightMerge.type,parentShell,localRecord);var subPotentia={type:"create",segs:newSegs,lightMerge:lightMerge,localRecord:localRecord};fluid.registerPotentia(subPotentia,transactionId)},fluid.lightMergeComponentRecord=function(shadow,shadowKey,key,mergingArray){var lightMerge=fluid.lightMergeRecords(mergingArray);return fluid.set(shadow,[shadowKey,key],lightMerge),lightMerge},fluid.componentRecordExpected=fluid.arrayToHash(["type","options","container","createOnEvent"]),fluid.dynamicComponentRecordExpected=$.extend({},fluid.componentRecordExpected,fluid.arrayToHash(["source","sources"])),fluid.checkComponentRecord=function(localRecord,expected){fluid.isInjectedComponentRecord(localRecord)||(fluid.isPlainObject(localRecord,!0)?fluid.each(localRecord,(function(value,key){expected[key]||fluid.fail("Error in subcomponent record "+JSON.stringify(localRecord)+' - key "'+key+'" found, where the only legal options are '+fluid.keys(expected).join(", "))})):fluid.fail("Error in subcomponent record "+JSON.stringify(localRecord)+' - this should either be an object with member "type" or else a reference to another component'))},fluid.checkSubcomponentRecords=function(subcomponentRecords,expected){subcomponentRecords.forEach((function(oneRecord){fluid.checkComponentRecord(oneRecord,expected)}))},fluid.registerSourcedDynamicComponent=function(potentia,shell,source,sourceKey,lightMerge,key,localRecordContributor){var localRecord=$.extend({},potentia.localRecord,{source:source,sourcePath:sourceKey});(localRecordContributor||fluid.identity)(localRecord,source,sourceKey);var dynamicKey=fluid.computeDynamicComponentKey(key,sourceKey),freshLightMerge=fluid.copy(lightMerge);fluid.registerConcreteSubPotentia(freshLightMerge,dynamicKey,potentia.componentDepth,shell,localRecord)},fluid.registerSourcedDynamicComponents=function(potentia,shell,sources,lightMerge,key,localRecordContributor){fluid.each(sources,(function(source,sourceKey){fluid.registerSourcedDynamicComponent(potentia,shell,source,sourceKey,lightMerge,key,localRecordContributor)}))},fluid.lensedComponentModelListener=function(that,key,segs,value,isBoolean){var isEmptyValue=function(value){return isBoolean?!value:void 0===value},shadow=fluid.shadowForComponent(that),sourceKey=isBoolean?0:fluid.peek(segs),currentComponent=that[fluid.computeDynamicComponentKey(key,sourceKey)];if(isEmptyValue(value)||currentComponent)isEmptyValue(value)&&currentComponent&&currentComponent.destroy();else{var lightMerge=shadow.lightMergeDynamicComponents[key],parentRecord=shadow.modelSourcedDynamicComponents[key];fluid.registerSourcedDynamicComponent(shadow.potentia,that,value,sourceKey,lightMerge,key,parentRecord.localRecordContributor)}},fluid.lensedComponentDefToBlock=function(key,sourcesParsed,isBoolean){var fromModelPath=sourcesParsed.segs.slice(1),modelListener={path:{context:sourcesParsed.context,segs:fromModelPath.concat(isBoolean?[]:["*"])},excludeSource:"init",transactional:!0,funcName:"fluid.lensedComponentModelListener",args:["{that}",key,"{change}.path","{change}.value",isBoolean]},modelListeners={};return modelListeners["lensedComponents-"+key]=modelListener,{modelListeners:modelListeners}},fluid.addLensedComponentBlocks=function(lensedComponentBlocks,potentia,shadow){var merged=fluid.extend.apply(null,[!0,{}].concat(lensedComponentBlocks));shadow.mergeOptions.mergeBlocks.push(fluid.generateExpandBlock({options:merged,recordType:"lensedComponents",priority:fluid.mergeRecordTypes.lensedComponents},shadow.that,shadow.mergePolicy,potentia.localRecord)),shadow.mergeOptions.updateBlocks()},fluid.pushMarkupSourcedDynamicComponentListener=function(shell,key,sourcesParsed,registerDynamicComponents){var namespace=shell.id+"-markupDynamicComponents-"+key,context=fluid.resolveContext(sourcesParsed.context,shell);if(context.events.onDomBind)context.events.onDomBind.addListener(registerDynamicComponents,namespace);else{var targetShadow=fluid.shadowForComponent(context);fluid.addLensedComponentBlocks([{listeners:{onDomBind:{namespace:namespace,listener:registerDynamicComponents}}}],{},targetShadow)}},fluid.expectExactlyOne=function(failStart,target,members){var found=0;members.forEach((function(member){void 0!==target[member]&&++found})),1!==found&&fluid.fail.apply(null,failStart.concat([" must contain exactly one member out of "+members.join(", ")]))},fluid.registerSourcedDynamicComponentsTriage=function(potentia,shell,sourceOrSources,lightMerge,key,isBoolean,localRecordContributor){isBoolean&&sourceOrSources?fluid.registerSourcedDynamicComponent(potentia,shell,sourceOrSources,0,lightMerge,key,localRecordContributor):fluid.registerSourcedDynamicComponents(potentia,shell,sourceOrSources,lightMerge,key,localRecordContributor)},fluid.processComponentShell=function(potentia,shell,transRec){var shadow=fluid.globalInstantiator.idToShadow[shell.id];shadow.potentia=potentia,shadow.createdTransactionId=transRec.transactionId;var mergeOptions=shadow.mergeOptions,components=fluid.driveStrategy(shell.options,"components",mergeOptions.strategy);fluid.each(components,(function(subcomponentRecords,key){fluid.checkSubcomponentRecords(subcomponentRecords,fluid.componentRecordExpected);var lightMerge=fluid.lightMergeComponentRecord(shadow,"lightMergeComponents",key,subcomponentRecords);lightMerge.createOnEvent||fluid.registerConcreteSubPotentia(lightMerge,key,potentia.componentDepth,shell,potentia.localRecord)}));var dynamicComponents=fluid.driveStrategy(shell.options,"dynamicComponents",mergeOptions.strategy),lensedComponentBlocks=[];fluid.each(dynamicComponents,(function(subcomponentRecords,key){fluid.checkSubcomponentRecords(subcomponentRecords,fluid.dynamicComponentRecordExpected);var lightMerge=fluid.lightMergeComponentRecord(shadow,"lightMergeDynamicComponents",key,subcomponentRecords);if(fluid.expectExactlyOne(["dynamicComponents records ",subcomponentRecords],lightMerge,["source","sources","createOnEvent"]),void 0!==lightMerge.sources||void 0!==lightMerge.source){var recordSources=lightMerge.sources,isBoolean=!1;if(void 0!==lightMerge.source&&(recordSources=lightMerge.source,isBoolean=!0),fluid.isIoCReference(recordSources)){var sourcesParsed=fluid.parseValidModelReference(shell,"dynamicComponents source",recordSources,!0),registerDynamicComponents=function(){var sources=fluid.getForComponent(sourcesParsed.that,sourcesParsed.segs);fluid.registerSourcedDynamicComponentsTriage(potentia,shell,sources,lightMerge,key,null,isBoolean)};sourcesParsed.nonModel?"dom"===sourcesParsed.segs[0]?fluid.pushMarkupSourcedDynamicComponentListener(shell,key,sourcesParsed,registerDynamicComponents):registerDynamicComponents():(fluid.set(shadow,["modelSourcedDynamicComponents",key],{sourcesParsed:sourcesParsed,isBoolean:isBoolean}),lensedComponentBlocks.push(fluid.lensedComponentDefToBlock(key,sourcesParsed,isBoolean)))}else{var sources=fluid.expandImmediate(recordSources,shell,potentia.localRecord);fluid.registerSourcedDynamicComponentsTriage(potentia,shell,sources,lightMerge,key,null,isBoolean)}}})),lensedComponentBlocks.length&&fluid.addLensedComponentBlocks(lensedComponentBlocks,potentia,shadow),transRec.deferredDistributions.length&&(transRec.pendingPotentiae.creates.push({type:"distributeOptions",distributions:transRec.deferredDistributions}),++transRec.pendingPotentiae.activeCount,transRec.deferredDistributions=[])},fluid.preparePathedPotentia=function(potentia,instantiator){var segs=potentia.segs||instantiator.parseToSegments(potentia.path);potentia.segs=segs,potentia.memberName=fluid.peek(segs),potentia.parentThat=fluid.getImmediate(fluid.rootComponent,segs.slice(0,-1)),"create"!==potentia.type||potentia.parentThat||fluid.fail("Cannot construct component at path ",segs," whose parent does not exist")},fluid.fetchNestedInjectedComponentReference=function(transRec,potentiaList,injected,head,parentPath,segs){for(var instantiator=fluid.globalInstantiator,path=parentPath,current=head,i=0;i<segs.length;++i){if(path=fluid.composePath(path,segs[i]),!(current=instantiator.pathToComponent[path])){var upcoming=potentiaList.pathToPotentia[path];upcoming&&(upcoming.applied?fluid.fail("Circular reference found when resolving injected component reference ",injected," - the target of the reference is still in construction"):(current=fluid.operateCreatePotentia(transRec,upcoming))&&(path=instantiator.idToShadow[current.id].path))}current||i===segs.length-1||fluid.fail("Failed to resolved injected component reference ",injected," - component at segment "+segs[i]+" was not found")}return current},fluid.fetchInjectedComponentReference=function(transRec,potentiaList,injected,parentThat){var instantiator=fluid.globalInstantiator;if(injected.expander)return fluid.expandImmediate(injected,parentThat,null,!0);var parsed=fluid.parseContextReference(injected),head=fluid.resolveContext(parsed.context,parentThat);if(head){var parentPath=instantiator.idToShadow[head.id].path,segs=fluid.model.parseEL(parsed.path);return fluid.fetchNestedInjectedComponentReference(transRec,potentiaList,injected,head,parentPath,segs)}if(""===parsed.path)return head;fluid.fail("Error in injected component reference ",injected," - could not resolve context {"+parsed.context+"} to a head component")},fluid.operateCreatePotentia=function(transRec,potentia){var instantiator=fluid.globalInstantiator,potentiaList=transRec.pendingPotentiae;fluid.preparePathedPotentia(potentia,instantiator);var shell,memberName=potentia.memberName,parentThat=potentia.parentThat;fluid.pushActivity("operateCreatePotentia",'operating create potentia for path "%path" with records %records',{path:potentia.path,records:potentia.records}),potentia.applied=!0,--potentiaList.activeCount;var lightMerge=potentia.lightMerge;if(lightMerge.isInjected)parentThat[memberName]=fluid.inEvaluationMarker,(shell=fluid.fetchInjectedComponentReference(transRec,potentiaList,lightMerge.toMerge[0].injected,parentThat))?instantiator.recordKnownComponent(parentThat,shell,memberName,!1):delete parentThat[memberName];else if(lightMerge.type){if(shell=fluid.initComponentShell(potentia,lightMerge)){fluid.processComponentShell(potentia,shell,transRec);var shadow=instantiator.idToShadow[shell.id];transRec.outputShadows.push(shadow)}}else fluid.fail("Unrecognised material in place of subcomponent "+memberName+" - could not recognise the records ",potentia.records," as designating either an injected or concrete component");return fluid.pushPotentia(transRec.restoreRecords,instantiator,{type:"destroy",segs:potentia.segs}),fluid.popActivity(),shell},fluid.operateDestroyPotentia=function(transRec,potentia,instantiator){instantiator=instantiator||fluid.globalInstantiator,fluid.preparePathedPotentia(potentia,instantiator);var that=fluid.getImmediate(fluid.rootComponent,potentia.segs);that&&instantiator.clearComponent(potentia.parentThat,potentia.memberName,that)},fluid.lookupWorkflowStage=function(workflowName){if(!workflowName)return fluid.workflowCacheSorted.length;if("shells"===workflowName)return 0;var found=fluid.find_if(fluid.workflowCacheSorted,(function(workflowEntry){return workflowEntry.workflowName===workflowName}));if(found)return found.index+1;fluid.fail("Unknown workflow name "+workflowName+' supplied as "breakAt" for tree transaction: : valid names are '+fluid.getMembers(fluid.workflowCacheSorted,"workflowName").join(", "))},fluid.evaluateWorkflows=function(shadows,workflowType){var togo=[];return fluid.workflowCacheSorted[workflowType].forEach((function(workflowRecord){shadows.filter((function(oneShadow){return fluid.componentHasGrade(oneShadow.that,workflowRecord.gradeName)})).length>0&&togo.push({shadows:shadows,workflowIndex:workflowRecord.index,workflowOptions:workflowRecord.workflowOptions})})),togo},fluid.findWorkflowShadows=function(shadows,blockStart,blockEnd,workflowRecord){for(var workflowShadows=[],i=blockStart;i<blockEnd;++i)fluid.componentHasGrade(shadows[i].that,workflowRecord.gradeName)&&("global"===workflowRecord.workflowType?workflowShadows.push(shadows[i]):workflowShadows.unshift(shadows[i]));return workflowShadows},fluid.waitPendingIOTask=function(transRec){var sequence,instantiator=fluid.globalInstantiator,resumeCurrentTransaction=function(){instantiator.currentTreeTransactionId=transRec.transactionId},waitIOTask=function(){return transRec.pendingIO.length?sequence=fluid.promise.sequence(function(sequence){return sequence.concat([resumeCurrentTransaction])}(transRec.pendingIO)):null};return waitIOTask.taskName="waitIO",waitIOTask.sequence=sequence,waitIOTask},fluid.enqueueWorkflowBlock=function(transRec,shadows,workflowStart,workflowEnd,blockStart,blockEnd,sequencer){var workQueued=!1;return transRec.lastWorkflowShadow=Math.max(transRec.lastWorkflowShadow,blockEnd),fluid.forEachInRange(fluid.workflowCacheSorted,workflowStart,workflowEnd,(function(workflowRecord,workflowIndex){if(0===workflowIndex)for(var i=blockStart;i<blockEnd;++i)fluid.instantiateEvents(shadows[i]);var workflowShadows=fluid.findWorkflowShadows(shadows,blockStart,blockEnd,workflowRecord);if(transRec.maximumWorkflowStage=Math.max(transRec.maximumWorkflowStage,workflowIndex+1),workflowShadows.length>0){var workflow=workflowRecord.workflowOptions,workflowFunc=fluid.getGlobalValue(workflow.funcName),sequence=sequencer.sources;if(workflow.waitIO&&sequence.push(fluid.waitPendingIOTask(transRec)),"global"===workflowRecord.workflowType){var globalWorkflowTask=function(){workflowFunc(workflowShadows,transRec)};globalWorkflowTask.taskName=workflowRecord.namespace,sequence.push(globalWorkflowTask)}else{var localWorkflowTask=function(){"concludeComponentInit"===workflowRecord.namespace&&(sequencer.hasStartedConcludeInit=!0),workflowShadows.forEach((function(shadow){workflowFunc(shadow,transRec)}))};localWorkflowTask.taskName=workflowRecord.namespace,sequence.push(localWorkflowTask)}workQueued=!0}})),transRec.maximumWorkflowStage===transRec.workflowStageBreak&&(transRec.maximumWorkflowStage=0,transRec.restartLastWorkflowShadow=transRec.lastWorkflowShadow),workQueued},fluid.applyWorkflowPhase=function(transRec,sequencer){var shadows=transRec.outputShadows;if(shadows.length>transRec.lastWorkflowShadow&&transRec.maximumWorkflowStage>0)return fluid.enqueueWorkflowBlock(transRec,shadows,0,transRec.maximumWorkflowStage,transRec.lastWorkflowShadow,shadows.length,sequencer),!0;if(transRec.maximumWorkflowStage<transRec.workflowStageBreak)for(var workflowStage=transRec.maximumWorkflowStage;workflowStage<transRec.workflowStageBreak;++workflowStage){var workQueued=fluid.enqueueWorkflowBlock(transRec,shadows,workflowStage,workflowStage+1,transRec.restartLastWorkflowShadow,shadows.length,sequencer);if(workQueued)return workQueued}},fluid.commitPotentiaePhase=function(transRec){var pendingPotentiae=transRec.pendingPotentiae;pendingPotentiae.destroys.forEach((function(potentia){potentia.applied||(potentia.applied=!0,--pendingPotentiae.activeCount,fluid.operateDestroyPotentia(transRec,potentia))}));for(var i=0;i<pendingPotentiae.creates.length;++i){var potentia=pendingPotentiae.creates[i];potentia.applied||("create"===potentia.type?fluid.operateCreatePotentia(transRec,potentia):"distributeOptions"===potentia.type?(potentia.distributions.forEach((function(distro){fluid.distributeOptionsOne(distro.that,distro.record,distro.targetRef,distro.selector,distro.context)})),potentia.applied=!0,--pendingPotentiae.activeCount):fluid.fail("Unrecognised potentia type "+potentia.type))}},fluid.isPopulatedPotentiaList=function(potentiaList){return potentiaList.activeCount>0},fluid.commitPotentiae=function(transactionId,resumeSequencer){var instantiator=fluid.globalInstantiator,transRec=instantiator.treeTransactions[transactionId];++transRec.commitDepth;var lastWorkflowShadow=transRec.lastWorkflowShadow,rootSequencer=transRec.rootSequencer,sequencer=resumeSequencer;if(!sequencer){var topSequencer=fluid.getImmediate(fluid.peek(rootSequencer.sources),["sequencer"]);!topSequencer||topSequencer.hasStartedConcludeInit||topSequencer.promise.disposition?((sequencer=fluid.promise.makeSequencer([],{},fluid.promise.makeSequenceStrategy())).promise.sequencer=sequencer,rootSequencer.sources.push(sequencer.promise)):sequencer=topSequencer}return fluid.tryCatch((function(){fluid.isPopulatedPotentiaList(transRec.pendingPotentiae)&&fluid.commitPotentiaePhase(transRec),fluid.applyWorkflowPhase(transRec,sequencer)&&sequencer.sources.push((function(){sequencer.hasStartedConcludeInit?sequencer===fluid.peek(rootSequencer.sources).sequencer&&fluid.commitPotentiae(transactionId,null):fluid.commitPotentiae(transactionId,sequencer)})),sequencer.sequenceStarted||fluid.promise.resumeSequence(sequencer),rootSequencer.sequenceStarted||fluid.promise.resumeSequence(rootSequencer)}),(function(e){transRec.promise.disposition||transRec.promise.reject(e)})),--transRec.commitDepth,0!==transRec.commitDepth||resumeSequencer||(instantiator.currentTreeTransactionId=null),transRec.outputShadows[lastWorkflowShadow]},fluid.pushPotentia=function(potentiaList,instantiator,potentia){var segs=potentia.segs=potentia.segs||instantiator.parseToSegments(potentia.path),path=potentia.path=instantiator.composeSegments.apply(null,segs);if("destroy"===potentia.type)potentiaList.destroys.push(potentia),potentiaList.activeCount++,fluid.remove_if(potentiaList.creates,(function(create){if(!create.applied&&create.path.startsWith(potentia.path))return potentiaList.activeCount--,!0}));else{var newPotentia=potentia;"create"===potentia.type&&(newPotentia=fluid.pushCreatePotentia(potentiaList,path,potentia)),newPotentia&&(potentiaList.creates.push(potentia),potentiaList.activeCount++)}},fluid.pathForComponent=function(component,instantiator){var shadow=(instantiator=instantiator||fluid.getInstantiator(component)||fluid.globalInstantiator).idToShadow[component.id];return shadow?instantiator.parseEL(shadow.path):null},fluid.currentTreeTransaction=function(){var instantiator=fluid.globalInstantiator;return instantiator.treeTransactions[instantiator.currentTreeTransactionId]},fluid.clearTreeTransaction=function(transRec){transRec.rootSequencer=fluid.promise.makeSequencer([],{},fluid.promise.makeSequenceStrategy()),transRec.restoreRecords=fluid.blankPotentiaList(),transRec.initModelTransaction={},transRec.outputShadows=[],transRec.lastWorkflowShadow=0,transRec.maximumWorkflowStage=0,transRec.restartLastWorkflowShadow=0,transRec.deferredDistributions=[]},fluid.beginTreeTransaction=function(transactionOptions){var instantiator=fluid.globalInstantiator;instantiator.currentTreeTransactionId&&fluid.fail("Attempt to start new tree transaction when transaction "+instantiator.currentTreeTransactionId+" is already active");var transactionId=instantiator.currentTreeTransactionId=fluid.allocateGuid(),transRec=$.extend({transactionId:transactionId,workflowStageBreak:void 0,pendingPotentiae:fluid.blankPotentiaList(),commitDepth:0,cancelled:!1,cancellationError:null,pendingIO:[]},transactionOptions);fluid.clearTreeTransaction(transRec),transRec.promise=transRec.rootSequencer.promise;var onConclude=function(){instantiator.events.onEndTreeTransaction.fire(transRec),transRec.rootSequencer.promise.disposition&&(instantiator.currentTreeTransactionId=null,delete instantiator.treeTransactions[transactionId])};transRec.promise.then(onConclude,(function(err){transRec.cancelled||(delete transRec.rootSequencer,instantiator.inEvaluationPaths.length=0,fluid.cancelTreeTransaction(transactionId,instantiator,err),onConclude())})),instantiator.treeTransactions[transactionId]=transRec;try{transRec.workflowStageBreak=fluid.lookupWorkflowStage(transRec.breakAt)}catch(e){transRec.promise.reject(e)}return instantiator.events.onBeginTreeTransaction.fire(transRec),transRec},fluid.registerPotentia=function(potentia,transactionId){var instantiator=fluid.globalInstantiator;(transactionId=transactionId||instantiator.currentTreeTransactionId)||(transactionId=fluid.beginTreeTransaction().transactionId);var transRec=instantiator.treeTransactions[transactionId];return fluid.pushPotentia(transRec.pendingPotentiae,instantiator,potentia),transRec},fluid.cancelTreeTransaction=function(transactionId,instantiator){var transRec=instantiator.treeTransactions[transactionId];if(transRec)try{transRec.pendingPotentiae=transRec.restoreRecords,transRec.cancelled=!0,fluid.clearTreeTransaction(transRec),fluid.commitPotentiae(transactionId)}catch(e){throw fluid.log(fluid.logLevel.FAIL,"Fatal error cancelling transaction "+transactionId+": destroying all affected paths"),transRec.restoreRecords.creates.forEach((function(potentia){instantiator.clearComponent(potentia.parentThat,potentia.memberName,potentia.parentThat[potentia.memberName])})),e}},fluid.constructChild=function(parent,memberName,options){var path=fluid.pathForComponent(parent).concat([memberName]);return fluid.construct(path,options)},fluid.construct=function(path,componentOptions,constructOptions){constructOptions=constructOptions||{};var transRec=fluid.registerPotentia({path:path,type:"destroy"},constructOptions.transactionId),record={recordType:"user"};fluid.each(fluid.componentRecordExpected,(function(troo,key){void 0!==componentOptions[key]&&(record[key]=componentOptions[key])})),record.options=componentOptions;var potentia={path:path,type:"create",localRecord:constructOptions.localRecord,records:[record]};return fluid.registerPotentia(potentia,transRec.transactionId),constructOptions.transactionId||fluid.commitPotentiae(transRec.transactionId),fluid.adaptTransactionFailure(transRec),constructOptions.returnTransaction?transRec:fluid.getImmediate(fluid.rootComponent,potentia.segs)},fluid.destroy=function(path,instantiator){0===(instantiator=instantiator||fluid.globalInstantiator).parseToSegments(path).length&&fluid.fail("Cannot destroy the root component");var transRec=fluid.registerPotentia({path:path,type:"destroy"});return fluid.commitPotentiae(transRec.transactionId),transRec},fluid.constructSingle=function(parentPath,options,instantiator){instantiator=instantiator||fluid.globalInstantiator,parentPath=parentPath||"";var segs=fluid.model.parseToSegments(parentPath,instantiator.parseEL,!0);"string"==typeof options&&(options={type:options});var type=options.type;type||fluid.fail("Cannot construct singleton object without a type entry");var gradeNames=(options=$.extend({},options)).gradeNames=fluid.makeArray(options.gradeNames);gradeNames.unshift(type),options.type="fluid.component",0===segs.length&&gradeNames.push("fluid.resolveRoot");var memberName=fluid.typeNameToMemberName(options.singleRootType||type);return segs.push(memberName),fluid.construct(segs,options)},fluid.destroySingle=function(parentPath,typeName,instantiator){instantiator=instantiator||fluid.globalInstantiator;var segs=fluid.model.parseToSegments(parentPath,instantiator.parseEL,!0),memberName=fluid.typeNameToMemberName(typeName);segs.push(memberName),fluid.destroy(segs,instantiator)},fluid.makeGradeLinkage=function(linkageName,inputNames,outputNames){fluid.defaults(linkageName,{gradeNames:"fluid.component",distributeOptions:{record:outputNames,target:"{/ "+inputNames.join("&")+"}.options.gradeNames"}}),fluid.constructSingle([],linkageName)},fluid.componentForPath=function(path){return fluid.globalInstantiator.pathToComponent[fluid.isArrayable(path)?path.join("."):path]},fluid.thisistToApplicable=function(record,recthis,that){return{apply:function(noThis,args){var resolvedThis=fluid.expandImmediate(recthis,that);"string"==typeof resolvedThis&&(resolvedThis=fluid.getGlobalValue(resolvedThis)),resolvedThis||fluid.fail("Could not resolve reference "+recthis+" to a value");var resolvedFunc=resolvedThis[record.method];return"function"!=typeof resolvedFunc&&fluid.fail("Object ",resolvedThis," at reference "+recthis+" has no member named "+record.method+" which is a function "),fluid.passLogLevel(fluid.logLevel.TRACE)&&fluid.log(fluid.logLevel.TRACE,"Applying arguments ",args," to method "+record.method+" of instance ",resolvedThis),resolvedFunc.apply(resolvedThis,args)}}},fluid.changeToApplicable=function(record,that){fluid.getForComponent(that,"applier");var parsed=fluid.parseValidModelReference(that,"changePath listener record",record.changePath);return fluid.materialiseModelPath(parsed.that,parsed.modelSegs),{apply:function(noThis,args,localRecord,mergeRecord){var value;record.func||record.funcName?value=fluid.makeInvoker(that,fluid.filterKeys(record,["func","funcName","args"]),"changePath listener record",localRecord)():value=fluid.expandImmediate(record.value,that,fluid.extend(localRecord,{arguments:args}));var sources=mergeRecord&&mergeRecord.source&&mergeRecord.source.length?fluid.makeArray(record.source).concat(mergeRecord.source):record.source;parsed.applier.change(parsed.modelSegs,value,record.type,sources)}}},fluid.recordToApplicable=function(record,that,standard){if(void 0!==record.changePath)return fluid.changeToApplicable(record,that,standard);var recthis=record.this;return record.method^recthis&&fluid.fail("Record ",that,' must contain both entries "method" and "this" if it contains either'),record.method?fluid.thisistToApplicable(record,recthis,that):null},fluid.getGlobalValueNonComponent=function(funcName,context){var defaults=fluid.defaults(funcName);return defaults&&fluid.hasGrade(defaults,"fluid.component")&&fluid.fail("Error in function specification - cannot invoke function "+funcName+" in the context of "+context+": component creator functions can only be used as subcomponents"),fluid.getGlobalValue(funcName)},fluid.makeInvoker=function(that,invokerec,name,localRecord){void 0===(invokerec=fluid.upgradePrimitiveFunc(invokerec)).args||invokerec.args===fluid.NO_ARGUMENTS||fluid.isArrayable(invokerec.args)||(invokerec.args=fluid.makeArray(invokerec.args));var func=fluid.recordToApplicable(invokerec,that),invokePre=fluid.preExpand(invokerec.args);localRecord=localRecord||{};var expandOptions=fluid.makeStackResolverOptions(that,localRecord,!0);return(func=func||(invokerec.funcName?fluid.getGlobalValueNonComponent(invokerec.funcName,"an invoker"):fluid.expandImmediate(invokerec.func,that)))&&func.apply?func===fluid.notImplemented&&fluid.fail("Error constructing component ",that," - the invoker named "+name+" which was defined in grade "+invokerec.componentSource+" needs to be overridden with a concrete implementation"):fluid.fail("Error in invoker record: could not resolve members func, funcName or method to a function implementation - got "+func+" from ",invokerec),function(){var togo,finalArgs;return!1===fluid.defeatLogging&&fluid.pushActivity("invokeInvoker","invoking invoker with name %name and record %record holding component %that",{name:name,record:invokerec,that:that}),"destroyed"===that.lifecycleStatus?fluid.log(fluid.logLevel.WARN,"Ignoring call to invoker "+name+" of component ",that," which has been destroyed"):(localRecord.arguments=arguments,void 0===invokerec.args||invokerec.args===fluid.NO_ARGUMENTS?finalArgs=arguments:(fluid.expandImmediateImpl(invokePre,expandOptions),finalArgs=invokePre.source),togo=func.apply(null,finalArgs)),!1===fluid.defeatLogging&&fluid.popActivity(),togo}},fluid.event.makeTrackedListenerAdder=function(source){var shadow=fluid.shadowForComponent(source);return function(event){return{addListener:function(listener,namespace,priority,softNamespace,listenerId){fluid.recordListener(event,listener,shadow,listenerId),event.addListener.apply(null,arguments)}}}},fluid.event.listenerEngine=function(eventSpec,callback,adder){var argstruc={};function checkFire(){if(!fluid.find(eventSpec,(function(value,key){if(void 0===argstruc[key])return!0}))){var oldstruc=argstruc;argstruc={},callback(oldstruc)}}fluid.each(eventSpec,(function(event,eventName){adder(event).addListener((function(){argstruc[eventName]=fluid.makeArray(arguments),checkFire()}))}))},fluid.event.dispatchListener=function(that,listener,eventName,eventSpec,wrappedArgs){void 0===eventSpec.args||eventSpec.args===fluid.NO_ARGUMENTS||fluid.isArrayable(eventSpec.args)||(eventSpec.args=fluid.makeArray(eventSpec.args)),listener=fluid.event.resolveListener(listener);var dispatchPre=fluid.preExpand(eventSpec.args),localRecord={},expandOptions=fluid.makeStackResolverOptions(that,localRecord,!0),togo=function(){!1===fluid.defeatLogging&&fluid.pushActivity("dispatchListener","firing to listener to event named %eventName of component %that",{eventName:eventName,that:that});var finalArgs,args=wrappedArgs?arguments[0]:arguments;localRecord.arguments=args,void 0!==eventSpec.args&&eventSpec.args!==fluid.NO_ARGUMENTS?(fluid.expandImmediateImpl(dispatchPre,expandOptions),finalArgs=dispatchPre.source):finalArgs=args;var togo=listener.apply(null,finalArgs);return!1===fluid.defeatLogging&&fluid.popActivity(),togo};return fluid.event.impersonateListener(listener,togo),togo},fluid.event.resolveSoftNamespace=function(key){if("string"!=typeof key)return null;var lastpos=Math.max(key.lastIndexOf("."),key.lastIndexOf("}"));return key.substring(lastpos+1)},fluid.event.resolveListenerRecord=function(lisrec,that,eventName,namespace,standard){var badRec=function(record,extra){fluid.fail("Error in listener record - could not resolve reference ",record,' to a listener or firer. Did you miss out "events." when referring to an event firer?'+extra)};fluid.pushActivity("resolveListenerRecord","resolving listener record for event named %eventName for component %that",{eventName:eventName,that:that});var records=fluid.makeArray(lisrec),togo={records:fluid.transform(records,(function(record){var expanded=fluid.isPrimitive(record)||record.expander?{listener:record}:fluid.copy(record),methodist=fluid.recordToApplicable(record,that,standard);expanded.listener=methodist||(expanded.listener||expanded.func||expanded.funcName),expanded.listener||badRec(record,' Listener record must contain a member named "listener", "func", "funcName" or "method"');var softNamespace=record.method?fluid.event.resolveSoftNamespace(record.this)+"."+record.method:fluid.event.resolveSoftNamespace(expanded.listener);expanded.namespace||namespace||!softNamespace||(expanded.softNamespace=!0,expanded.namespace=(record.componentSource?record.componentSource:that.typeName)+"."+softNamespace);var listener=expanded.listener=fluid.expandOptions(expanded.listener,that);listener||badRec(record,"");var firer=!1;return"fluid.event.firer"===listener.typeName&&(listener=listener.fire,firer=!0),expanded.listener=standard&&(expanded.args&&"fluid.notImplemented"!==listener||firer)?fluid.event.dispatchListener(that,listener,eventName,expanded):listener,expanded.listenerId=fluid.allocateGuid(),expanded})),adderWrapper:standard?fluid.event.makeTrackedListenerAdder(that):null};return fluid.popActivity(),togo},fluid.event.expandOneEvent=function(that,event){var origin;return(origin="string"==typeof event&&"{"!==event.charAt(0)?fluid.getForComponent(that,["events",event]):fluid.expandOptions(event,that))&&"fluid.event.firer"===origin.typeName||fluid.fail("Error in event specification - could not resolve base event reference ",event," to an event firer: got ",origin),origin},fluid.event.expandEvents=function(that,event){return"string"==typeof event?fluid.event.expandOneEvent(that,event):fluid.transform(event,(function(oneEvent){return fluid.event.expandOneEvent(that,oneEvent)}))},fluid.event.resolveEvent=function(that,eventName,eventSpec){fluid.pushActivity("resolveEvent","resolving event with name %eventName attached to component %that",{eventName:eventName,that:that});var adder=fluid.event.makeTrackedListenerAdder(that);"string"==typeof eventSpec&&(eventSpec={event:eventSpec});var event="fluid.event.firer"===eventSpec.typeName?eventSpec:eventSpec.event||eventSpec.events;event||fluid.fail("Event specification for event with name "+eventName+" does not include a base event specification: ",eventSpec);var firer,origin="fluid.event.firer"===event.typeName?event:fluid.event.expandEvents(that,event),isMultiple="fluid.event.firer"!==origin.typeName;if(eventSpec.args||isMultiple){firer=fluid.makeEventFirer({name:" [composite] "+fluid.event.nameEvent(that,eventName)});var dispatcher=fluid.event.dispatchListener(that,firer.fire,eventName,eventSpec,isMultiple);isMultiple?fluid.event.listenerEngine(origin,dispatcher,adder):adder(origin).addListener(dispatcher)}else(firer={typeName:"fluid.event.firer"}).fire=function(){var outerArgs=fluid.makeArray(arguments);fluid.pushActivity("fireSynthetic","firing synthetic event %eventName ",{eventName:eventName});var togo=origin.fire.apply(null,outerArgs);return fluid.popActivity(),togo},firer.addListener=function(listener,namespace,priority,softNamespace,listenerId){var dispatcher=fluid.event.dispatchListener(that,listener,eventName,eventSpec);adder(origin).addListener(dispatcher,namespace,priority,softNamespace,listenerId)},firer.removeListener=function(listener){origin.removeListener(listener)},firer.originEvent=origin;return fluid.popActivity(),firer},fluid.coerceToPrimitive=function(string){return"false"!==string&&("true"===string||(isFinite(string)?Number(string):string))},fluid.compactStringToRec=function(string,type){var openPos=string.indexOf("("),closePos=string.indexOf(")");if((-1===openPos^-1===closePos||openPos>closePos)&&fluid.fail("Badly-formed compact "+type+" record without matching parentheses: "+string),-1!==openPos&&-1!==closePos){var trail=string.substring(closePos+1);""!==trail.trim()&&fluid.fail("Badly-formed compact "+type+" record "+string+" - unexpected material following close parenthesis: "+trail);var prefix=string.substring(0,openPos),body=string.substring(openPos+1,closePos).trim(),args=""===body?[]:fluid.transform(body.split(","),(function(str){return str.trim()}),fluid.coerceToPrimitive),togo=fluid.upgradePrimitiveFunc(prefix,null);return togo.args=args,togo}return"expander"===type&&fluid.fail("Badly-formed compact expander record without parentheses: "+string),string},fluid.expandPrefix="@expand:",fluid.expandCompactString=function(string,active){var rec=string;if(0===string.indexOf(fluid.expandPrefix)){var rem=string.substring(fluid.expandPrefix.length);rec={expander:fluid.compactStringToRec(rem,"expander")}}else active&&(rec=fluid.compactStringToRec(string,active));return rec};var singularPenRecord={listeners:"listener",modelListeners:"modelListener"},singularRecord=$.extend({invokers:"invoker"},singularPenRecord);function regenerateCursor(source,segs,limit,sourceStrategy){for(var i=0;i<limit;++i)source=sourceStrategy(source,segs[i],i,fluid.makeArray(segs));return source}fluid.expandCompactRec=function(segs,target,source){fluid.guardCircularExpansion(segs,segs.length);var pen=fluid.peek(segs),active=singularRecord[pen];!active&&segs.length>1&&(active=singularPenRecord[segs[segs.length-2]]),fluid.each(source,(function(value,key){if(fluid.isPlainObject(value))return target[key]=fluid.freshContainer(value),segs.push(key),fluid.expandCompactRec(segs,target[key],value),void segs.pop();"string"==typeof value&&(value=fluid.expandCompactString(value,active)),target[key]=value}))},fluid.expandCompact=function(options){var togo={};return fluid.expandCompactRec([],togo,options),togo},fluid.extractEL=function(string,options){if("ALL"===options.ELstyle||"{}"===options.ELstyle)return string;if(1===options.ELstyle.length){if(string.charAt(0)===options.ELstyle)return string.substring(1)}else if("${}"===options.ELstyle){var i1=string.indexOf("${"),i2=string.lastIndexOf("}");if(0===i1&&-1!==i2)return string.substring(2,i2)}},fluid.extractELWithContext=function(string,options){var EL=fluid.extractEL(string,options);return fluid.isIoCReference(EL)?fluid.parseContextReference(EL):"{}"===options.ELstyle?null:EL?{path:EL}:EL},fluid.parseContextReference=function(reference,index,delimiter){index=index||0;var endcpos,context,nested,isNested="{"===reference.charAt(index+1);-1===(endcpos=isNested?(nested=fluid.parseContextReference(reference,index+1,"}")).endpos:reference.indexOf("}",index+1))&&fluid.fail('Cannot parse context reference "'+reference+'": Malformed context reference without }'),context=isNested?nested:reference.substring(index+1,endcpos);var endpos=delimiter?reference.indexOf(delimiter,endcpos+1):reference.length,path=reference.substring(endcpos+1,endpos);return"."===path.charAt(0)&&(path=path.substring(1)),{context:context,path:path,endpos:endpos}},fluid.renderContextReference=function(parsed){var context=parsed.context;return"{"+(fluid.isPrimitive(context)?context:fluid.renderContextReference(context))+"}"+(parsed.path?"."+parsed.path:"")},fluid.resolveContextValue=function(string,options){function fetch(parsed){fluid.pushActivity("resolveContextValue","resolving context value %parsed",{parsed:parsed});var togo=options.fetcher(parsed);return fluid.pushActivity("resolvedContextValue","resolved value %parsed to value %value",{parsed:parsed,value:togo}),fluid.popActivity(2),togo}var parsed;if(options.bareContextRefs&&fluid.isIoCReference(string))return fetch(parsed=fluid.parseContextReference(string));if(options.ELstyle&&"${}"!==options.ELstyle&&(parsed=fluid.extractELWithContext(string,options)))return fetch(parsed);if("${}"===options.ELstyle)for(;"string"==typeof string;){var i1=string.indexOf("${"),i2=string.indexOf("}",i1+2);if(-1===i1||-1===i2)break;"{"===string.charAt(i1+2)?i2=(parsed=fluid.parseContextReference(string,i1+2,"}")).endpos:parsed={path:string.substring(i1+2,i2)};var subs=fetch(parsed),all=0===i1&&i2===string.length-1;if(null==subs)return subs;string=all?subs:string.substring(0,i1)+subs+string.substring(i2+1)}return string},fluid.fetchExpandChildren=function(target,i,segs,source,mergePolicy,options){if(source.expander){var expanded=fluid.expandExpander(target,source,options);if(fluid.isPrimitive(expanded)||!fluid.isPlainObject(expanded)||fluid.isArrayable(expanded)^fluid.isArrayable(target))return expanded;$.extend(!0,target,expanded)}return fluid.each(source,(function(newSource,key){void 0===newSource?target[key]=void 0:"expander"!==key&&(segs[i]=key,!0!==fluid.getImmediate(options.exceptions,segs,i)&&options.strategy(target,key,i+1,segs,source,mergePolicy))})),target},fluid.isUnexpandable=function(source){return fluid.isPrimitive(source)||!fluid.isPlainObject(source)},fluid.expandSource=function(options,target,i,segs,deliverer,source,policy,recurse){var expanded,isTrunk,thisPolicy=fluid.derefMergePolicy(policy);return"string"!=typeof source||thisPolicy.noexpand?thisPolicy.noexpand||fluid.isUnexpandable(source)?expanded=fluid.copy(source):source.expander?expanded=fluid.expandExpander(deliverer,source,options):(expanded=fluid.freshContainer(source),isTrunk=!0):options.defaultEL&&"{"!==source.charAt(0)?expanded=source:(fluid.pushActivity("expandContextValue","expanding context value %source held at path %path",{source:source,path:fluid.path.apply(null,segs.slice(0,i))}),expanded=fluid.copy(fluid.resolveContextValue(source,options)),fluid.popActivity(1)),expanded!==fluid.NO_VALUE&&deliverer(expanded),isTrunk&&recurse(expanded,source,i,segs,policy),expanded},fluid.guardCircularExpansion=function(segs,i){i>fluid.strategyRecursionBailout&&fluid.fail("Overflow/circularity in options expansion, current path is ",segs," at depth ",i,' - please ensure options are not circularly connected, or protect from expansion using the "noexpand" policy or expander')},fluid.makeExpandStrategy=function(options){var recurse=function(target,source,i,segs,policy){return fluid.fetchExpandChildren(target,i||0,segs||[],source,policy,options)},strategy=function(target,name,i,segs,source,policy){if(fluid.guardCircularExpansion(segs,i),target){if(target.hasOwnProperty(name))return target[name];void 0===source&&(source=regenerateCursor(options.source,segs,i-1,options.sourceStrategy),policy=regenerateCursor(options.mergePolicy,segs,i-1,fluid.concreteTrundler));var thisSource=options.sourceStrategy(source,name,i,segs),thisPolicy=fluid.concreteTrundler(policy,name);return fluid.expandSource(options,target,i,segs,(function(value){target[name]=value}),thisSource,thisPolicy,recurse)}};return options.recurse=recurse,options.strategy=strategy,strategy},fluid.defaults("fluid.makeExpandOptions",{ELstyle:"${}",bareContextRefs:!0,target:fluid.inCreationMarker}),fluid.makeExpandOptions=function(source,options){return(options=$.extend({},fluid.rawDefaults("fluid.makeExpandOptions"),options)).defaultEL="${}"===options.ELStyle&&options.bareContextRefs,options.expandSource=function(source){return fluid.expandSource(options,null,0,[],fluid.identity,source,options.mergePolicy,!1)},fluid.isUnexpandable(source)?(options.strategy=fluid.concreteTrundler,options.initter=fluid.identity,options.target="string"==typeof source?(options.defer?fluid.copy:fluid.identity)(options.expandSource(source)):source,options.immutableTarget=!0):(options.source=source,options.target=fluid.freshContainer(source),options.sourceStrategy=options.sourceStrategy||fluid.concreteTrundler,fluid.makeExpandStrategy(options),options.initter=function(){options.target=fluid.fetchExpandChildren(options.target,0,[],options.source,options.mergePolicy,options)}),options},fluid.expand=function(source,options){var expandOptions=fluid.makeExpandOptions(source,options);return expandOptions.initter(),expandOptions.target},fluid.preExpandRecurse=function(root,source,holder,member,rootSegs){function pushExpander(expander){root.expanders.push({expander:expander,holder:holder,member:member}),delete holder[member]}if(fluid.guardCircularExpansion(rootSegs,rootSegs.length),fluid.isIoCReference(source)){var parsed=fluid.parseContextReference(source),segs=fluid.model.parseEL(parsed.path);pushExpander({typeFunc:fluid.expander.fetch,context:parsed.context,segs:segs})}else fluid.isPlainObject(source)&&(source.expander?(source.expander.typeFunc=fluid.getGlobalValue(source.expander.type||"fluid.expander.invokeFunc"),pushExpander(source.expander)):fluid.each(source,(function(value,key){rootSegs.push(key),fluid.preExpandRecurse(root,value,source,key,rootSegs),rootSegs.pop()})))},fluid.preExpand=function(source){var root={expanders:[],source:fluid.isUnexpandable(source)?source:fluid.copy(source)};return fluid.preExpandRecurse(root,root.source,root,"source",[]),root},fluid.expandImmediate=function(source,that,localRecord,noproxy){var options=fluid.makeStackResolverOptions(that,localRecord,!0);options.noproxy=!!noproxy;var root=fluid.preExpand(source);return fluid.expandImmediateImpl(root,options),root.source},fluid.expandImmediateImpl=function(root,options){for(var expanders=root.expanders,i=0;i<expanders.length;++i){var expander=expanders[i];expander.holder[expander.member]=expander.expander.typeFunc(null,expander,options)}},fluid.expandExpander=function(deliverer,source,options){var expander=fluid.getGlobalValue(source.expander.type||"fluid.expander.invokeFunc");return expander||fluid.fail("Unknown expander with type "+source.expander.type),expander(deliverer,source,options)},fluid.proxyComponentHandler=function(target,prop){return prop===Symbol.toStringTag?Object.prototype.toString.call(target):prop in target?target[prop]:fluid.getForComponent(target,prop)},fluid.proxyComponent=function(component){var shadow=fluid.shadowForComponent(component);return shadow.proxy||(shadow.proxy=new Proxy(component,{get:fluid.proxyComponentHandler})),shadow.proxy},fluid.possiblyProxyComponent=function(value){return fluid.isComponent(value)&&"treeConstructed"!==value.lifecycleStatus?fluid.proxyComponent(value):value},fluid.proxyComponentArgs=function(args){args.forEach((function(arg,i){args[i]=fluid.possiblyProxyComponent(arg)}))},fluid.registerNamespace("fluid.expander"),fluid.expander.fetch=function(deliverer,source,options){var localRecord=options.localRecord,context=source.expander.context,segs=source.expander.segs,inLocal=void 0!==localRecord[context],contextStatus=options.contextThat.lifecycleStatus,fast="treeConstructed"===contextStatus||"destroyed"===contextStatus,component=inLocal?localRecord[context]:fluid.resolveContext(context,options.contextThat,fast);if(component){var root=component;if(inLocal||"constructing"!==component.lifecycleStatus)for(var i=0;i<segs.length;++i)root=root?root[segs[i]]:void 0;else root=fluid.getForComponent(component,segs);return void 0!==root||inLocal||(root=fluid.getForComponent(component,segs)),fast||options.noproxy||!fluid.isComponent(root)?root:fluid.proxyComponent(root)}segs.length>0&&fluid.triggerMismatchedPathError(source.expander,options.contextThat)},fluid.expander.invokeFunc=function(deliverer,source,options){var expander=source.expander,args=fluid.makeArray(expander.args),whichFuncEntry=expander.func?"func":expander.funcName?"funcName":null;expander.args=args,args=options.recurse?options.recurse([],args):(expander=fluid.expandImmediate(expander,options.contextThat,options.localRecord,expander.noproxy)).args,expander.noproxy||fluid.proxyComponentArgs(args);var funcEntry=expander[whichFuncEntry],func=(options.expandSource?options.expandSource(funcEntry):funcEntry)||fluid.recordToApplicable(expander,options.contextThat);return"string"==typeof func&&(func=fluid.getGlobalValue(func)),func||fluid.fail("Error in expander record ",source.expander,": "+source.expander[whichFuncEntry]+" could not be resolved to a function for component ",options.contextThat),func.apply(null,args)},fluid.expander.noexpand=function(deliverer,source){return source.expander.value?source.expander.value:source.expander.tree},fluid.noexpand=fluid.expander.noexpand,fluid.model.makeEnvironmentStrategy=function(environment){return function(root,segment,index){return 0===index&&environment[segment]?environment[segment]:void 0}},fluid.model.defaultCreatorStrategy=function(root,segment){if(void 0===root[segment])return root[segment]={},root[segment]},fluid.model.defaultFetchStrategy=function(root,segment){return root[segment]},fluid.model.funcResolverStrategy=function(root,segment){if(root.resolvePathSegment)return root.resolvePathSegment(segment)},fluid.model.traverseWithStrategy=function(root,segs,initPos,config,uncess){for(var strategies=config.strategies,limit=segs.length-uncess,i=initPos;i<limit;++i){if(!root)return root;for(var accepted,j=0;j<strategies.length&&void 0===(accepted=strategies[j](root,segs[i],i+1,segs));++j);accepted===fluid.NO_VALUE&&(accepted=void 0),root=accepted}return root},fluid.model.getValueAndSegments=function(root,EL,config,initSegs){return fluid.model.accessWithStrategy(root,EL,fluid.NO_VALUE,config,initSegs,!0)},fluid.model.makeTrundler=function(config){return function(valueSeg,EL){return fluid.model.getValueAndSegments(valueSeg.root,EL,config,valueSeg.segs)}},fluid.model.getWithStrategy=function(root,EL,config,initSegs){return fluid.model.accessWithStrategy(root,EL,fluid.NO_VALUE,config,initSegs)},fluid.model.setWithStrategy=function(root,EL,newValue,config,initSegs){fluid.model.accessWithStrategy(root,EL,newValue,config,initSegs)},fluid.model.accessWithStrategy=function(root,EL,newValue,config,initSegs,returnSegs){if(fluid.isPrimitive(EL)||fluid.isArrayable(EL))return fluid.model.accessImpl(root,EL,newValue,config,initSegs,returnSegs,fluid.model.traverseWithStrategy);var key=EL.type||"default",resolver=config.resolvers[key];resolver||fluid.fail("Unable to find resolver of type "+key);var trundler=fluid.model.makeTrundler(config),valueSeg={root:root,segs:initSegs};return valueSeg=resolver(valueSeg,EL,trundler),EL.path&&valueSeg&&(valueSeg=trundler(valueSeg,EL.path)),returnSegs?valueSeg:valueSeg?valueSeg.root:void 0},fluid.registerNamespace("fluid.pathUtil"),fluid.pathUtil.getPathSegmentImpl=function(accept,path,i){var segment=null;accept&&(segment="");for(var escaped=!1,limit=path.length;i<limit;++i){var c=path.charAt(i);if(escaped)escaped=!1,null!==segment&&(segment+=c);else{if("."===c)break;"\\"===c?escaped=!0:null!==segment&&(segment+=c)}}return null!==segment&&(accept[0]=segment),i};var globalAccept=[];fluid.pathUtil.parseEL=function(path){for(var togo=[],index=0,limit=path.length;index<limit;){var firstdot=fluid.pathUtil.getPathSegmentImpl(globalAccept,path,index);togo.push(globalAccept[0]),index=firstdot+1}return togo},fluid.pathUtil.composeSegment=function(prefix,toappend){toappend=toappend.toString();for(var i=0;i<toappend.length;++i){var c=toappend.charAt(i);"."!==c&&"\\"!==c&&"}"!==c||(prefix+="\\"),prefix+=c}return prefix},fluid.pathUtil.escapeSegment=function(segment){return fluid.pathUtil.composeSegment("",segment)},fluid.pathUtil.composePath=function(prefix,suffix){return 0!==prefix.length&&(prefix+="."),fluid.pathUtil.composeSegment(prefix,suffix)},fluid.pathUtil.composeSegments=function(){for(var path="",i=0;i<arguments.length;++i)path=fluid.pathUtil.composePath(path,arguments[i]);return path},fluid.pathUtil.matchSegments=function(toMatch,segs,start,end){if(end-start!==toMatch.length)return!1;for(var i=start;i<end;++i)if(segs[i]!==toMatch[i-start])return!1;return!0},fluid.model.unescapedParser={parse:fluid.model.parseEL,compose:fluid.model.composeSegments},fluid.model.defaultGetConfig={parser:fluid.model.unescapedParser,strategies:[fluid.model.funcResolverStrategy,fluid.model.defaultFetchStrategy]},fluid.model.defaultSetConfig={parser:fluid.model.unescapedParser,strategies:[fluid.model.funcResolverStrategy,fluid.model.defaultFetchStrategy,fluid.model.defaultCreatorStrategy]},fluid.model.escapedParser={parse:fluid.pathUtil.parseEL,compose:fluid.pathUtil.composeSegments},fluid.model.escapedGetConfig={parser:fluid.model.escapedParser,strategies:[fluid.model.defaultFetchStrategy]},fluid.model.escapedSetConfig={parser:fluid.model.escapedParser,strategies:[fluid.model.defaultFetchStrategy,fluid.model.defaultCreatorStrategy]},fluid.stronglyConnected=function(vertices,accessor){var that={stack:[],accessor:accessor,components:[],index:0};return vertices.forEach((function(vertex){delete vertex.lowIndex,delete vertex.tarjanIndex,delete vertex.onStack})),vertices.forEach((function(vertex){void 0===vertex.tarjanIndex&&fluid.stronglyConnectedOne(vertex,that)})),that.components},fluid.stronglyConnectedOne=function(vertex,that){if(vertex.tarjanIndex=that.index,vertex.lowIndex=that.index,++that.index,that.stack.push(vertex),vertex.onStack=!0,that.accessor(vertex).forEach((function(outVertex){void 0===outVertex.tarjanIndex?(fluid.stronglyConnectedOne(outVertex,that),vertex.lowIndex=Math.min(vertex.lowIndex,outVertex.lowIndex)):outVertex.onStack&&(vertex.lowIndex=Math.min(vertex.lowIndex,outVertex.tarjanIndex))})),vertex.lowIndex===vertex.tarjanIndex){var outVertex,component=[];do{(outVertex=that.stack.pop()).onStack=!1,component.push(outVertex)}while(outVertex!==vertex);that.components.push(component)}},fluid.initRelayModel=function(that){return that.model},fluid.findInitModelTransaction=function(that){var transRec=fluid.currentTreeTransaction();if(transRec&&fluid.isComponent(that))return transRec.initModelTransaction[that.id]},fluid.enlistModelComponent=function(that){var treeTransaction=fluid.currentTreeTransaction(),transId=treeTransaction.initModelTransactionId,initModelTransaction=treeTransaction.initModelTransaction,enlist=initModelTransaction[that.id];if(!enlist){var shadow=fluid.shadowForComponent(that);enlist={that:that,applier:fluid.getForComponent(that,"applier"),initModels:[],completeOnInit:!!shadow.initTransactionId,transaction:that.applier.initiate(null,"init",transId)},initModelTransaction[that.id]=enlist,fluid.getModelTransactionRec(fluid.rootComponent,transId)[that.applier.applierId]={transaction:enlist.transaction},fluid.registerMaterialisationListener(that,that.applier)}return enlist},fluid.clearTransactions=function(){var instantiator=fluid.globalInstantiator;fluid.clear(instantiator.modelTransactions)},fluid.failureEvent.addListener(fluid.clearTransactions,"clearTransactions","before:fail"),fluid.clearLinkCounts=function(transRec,relaysAlso){fluid.each(transRec,(function(value,key){"number"==typeof value?transRec[key]=0:relaysAlso&&value.options&&"number"==typeof value.relayCount&&(value.relayCount=0)}))},fluid.computeInitialOutArcs=function(transacs,initModelTransaction){return fluid.transform(initModelTransaction,(function(recel,id){var oneOutArcs={},listeners=recel.that.applier.listeners.sortedListeners;fluid.each(listeners,(function(listener){if(listener.isRelay&&!fluid.isExcludedChangeSource(transacs[id],listener.cond)){var targetId=listener.targetId;targetId!==id&&(oneOutArcs[targetId]=!0)}}));var togo=Object.keys(oneOutArcs).map((function(id){return initModelTransaction[id]}));return fluid.remove_if(togo,(function(rec){return void 0===rec})),togo}))},fluid.sortCompleteLast=function(reca,recb){return(reca.completeOnInit?1:0)-(recb.completeOnInit?1:0)},fluid.subscribeResourceModelUpdates=function(that,resourceMapEntry){var treeTransaction=fluid.currentTreeTransaction(),resourceSpec=resourceMapEntry.resourceSpec,resourceUpdateListener=function(){var initTransaction=fluid.getImmediate(treeTransaction,["initModelTransaction",that.id]),trans=initTransaction?initTransaction.transaction:that.applier.initiate();if(resourceMapEntry.listeners.forEach((function(oneListener){var innerValue=fluid.getImmediate(resourceSpec,oneListener.resourceSegs),segs=oneListener.segs;trans.change(segs,null,"DELETE"),trans.change(segs,innerValue)})),initTransaction){var transRec=fluid.getModelTransactionRec(fluid.rootComponent,trans.id);fluid.clearLinkCounts(transRec,!0),that.applier.preCommit.fire(trans,that)}else trans.commit()};resourceSpec.onFetched.addListener(resourceUpdateListener),fluid.recordListener(resourceSpec.onFetched,resourceUpdateListener,fluid.shadowForComponent(that))},fluid.resolveResourceModelWorkflow=function(shadows,treeTransaction){var initModelTransaction=treeTransaction.initModelTransaction;shadows.forEach((function(shadow){var that=shadow.that;fluid.registerMergedModelListeners(that,that.options.modelListeners),fluid.each(shadow.modelSourcedDynamicComponents,(function(componentRecord,key){fluid.constructLensedComponents(shadow,initModelTransaction[that.id],componentRecord.sourcesParsed,key)}))}))},fluid.condenseResourceMap=function(resourceMap){var byId={};return resourceMap.forEach((function(resourceMapEntry){var resourceSpec=resourceMapEntry.fetchOne.resourceSpec,id=resourceSpec.transformEvent.eventId,existing=byId[id];existing||(existing=byId[id]={resourceSpec:resourceSpec,listeners:[]}),existing.listeners.push({resourceSegs:resourceMapEntry.fetchOne.segs,segs:resourceMapEntry.segs})})),byId},fluid.operateInitialTransaction=function(initModelTransaction,transId){var transacs=fluid.transform(initModelTransaction,(function(recel){return recel.transaction})),outArcs=fluid.computeInitialOutArcs(transacs,initModelTransaction),recs=fluid.values(initModelTransaction),components=fluid.stronglyConnected(recs,(function(initTransactionRecord){return outArcs[initTransactionRecord.that.id]})),priorityIndex=0;components.forEach((function(component){component.forEach((function(recel){recel.initPriority=recel.completeOnInit?1/0:priorityIndex++}))})),recs.sort((function(reca,recb){return reca.initPriority-recb.initPriority}));var transRec=fluid.getModelTransactionRec(fluid.rootComponent,transId);recs.forEach((function(recel){var that=recel.that,applier=recel.that.applier,transac=transacs[that.id];recel.completeOnInit?fluid.notifyModelChanges(applier.listeners.sortedListeners,"ADD",transac.oldHolder,fluid.emptyHolder,null,transac,applier,that):fluid.each(recel.initModels,(function(oneInitModel){void 0!==oneInitModel&&transac.fireChangeRequest({type:"ADD",segs:[],value:oneInitModel}),fluid.clearLinkCounts(transRec,!0)}))})),recs.forEach((function(recel){var that=recel.that,applier=recel.that.applier,transac=transacs[that.id];if(applier.preCommit.fire(transac,that),!recel.completeOnInit){var resourceMapById=fluid.condenseResourceMap(applier.resourceMap);fluid.each(resourceMapById,(function(resourceMapEntry){fluid.subscribeResourceModelUpdates(that,resourceMapEntry)})),applier.earlyModelResolved.fire(that.model),applier.preCommit.fire(transac,that),recel.completeOnInit=!0;var shadow=fluid.shadowForComponent(that);shadow&&!shadow.initTransactionId&&(shadow.initTransactionId=transId)}}))},fluid.parseModelReference=function(that,ref){var parsed=fluid.parseContextReference(ref);return parsed.segs=fluid.pathUtil.parseEL(parsed.path),parsed},fluid.parseValidModelReference=function(that,name,ref,permitNonModel){var parsed,contextTarget,target,localRecord=fluid.shadowForComponent(that).localRecord,reject=function(){var failArgs=["Error in "+name+": ",ref].concat(fluid.makeArray(arguments));fluid.fail.apply(null,failArgs)},rejectNonModel=function(value){reject(" must be a reference to a component with a ChangeApplier (descended from fluid.modelComponent), instead got ",value)};if("string"==typeof ref)if(fluid.isIoCReference(ref)){var modelPoint=(parsed=fluid.parseModelReference(that,ref)).segs.indexOf("model");-1===modelPoint?permitNonModel?parsed.nonModel=!0:reject(' must be a reference into a component model via a path including the segment "model"'):(parsed.modelSegs=parsed.segs.slice(modelPoint+1),parsed.contextSegs=parsed.segs.slice(0,modelPoint),delete parsed.path)}else parsed={path:ref,modelSegs:that.applier.parseEL(ref)};else fluid.isArrayable(ref.segs)||reject(' must contain an entry "segs" holding path segments referring a model path within a component'),parsed={context:ref.context,modelSegs:fluid.expandImmediate(ref.segs,that,localRecord)},fluid.each(parsed.modelSegs,(function(seg,index){fluid.isValue(seg)||reject(" did not resolve path segment reference "+ref.segs[index]+" at index "+index)}));return parsed.context?localRecord&&parsed.context in localRecord?"source"===parsed.context&&localRecord.sourceModelReference?(target=localRecord.sourceModelReference.that,parsed.modelSegs=localRecord.sourceModelReference.modelSegs.concat(parsed.segs),parsed.nonModel=!1):target=localRecord[parsed.context]:((contextTarget=fluid.resolveContext(parsed.context,that))||reject(" context must be a reference to an existing component"),target=parsed.contextSegs?fluid.getForComponent(contextTarget,parsed.contextSegs):contextTarget):target=that,parsed.nonModel||(fluid.isComponent(target)||rejectNonModel(target),target.applier||fluid.getForComponent(target,["applier"]),target.applier||rejectNonModel(target)),parsed.that=target,parsed.applier=target&&target.applier,parsed.path||(parsed.path=target&&target.applier.composeSegments.apply(null,parsed.modelSegs)),parsed},fluid.registerNamespace("fluid.materialiserRegistry"),fluid.matchMaterialiserSpec=function(record,segs){for(var trundle=record,routedPath=null,i=0;i<segs.length;++i){var seg=segs[i],wildcard=trundle["*"];if(wildcard&&(routedPath=wildcard),!(trundle=trundle[seg]||wildcard))break;if(trundle.materialiser)return trundle}return routedPath&&fluid.fail("Materialised DOM path ",segs," did not match any registered materialiser - available paths are "+Object.keys(routedPath).join(", ")),null},fluid.materialiseModelPath=function(that,segs){var shadow=fluid.shadowForComponent(that),materialisedPath=["materialisedPaths"].concat(segs);fluid.getImmediate(shadow,materialisedPath)||fluid.each(fluid.materialiserRegistry,(function(gradeRecord,grade){if(fluid.componentHasGrade(that,grade)){var record=fluid.matchMaterialiserSpec(gradeRecord,segs);if(record&&record.materialiser){fluid.model.setSimple(shadow,materialisedPath,{});var args=fluid.makeArray(record.args);fluid.invokeGlobalFunction(record.materialiser,[that,fluid.makeArray(segs)].concat(args))}}}))},fluid.materialiseAgainstValue=function(that,newValue,segs){fluid.isPlainObject(newValue)?fluid.each(newValue,(function(inner,seg){segs.push(seg),fluid.materialiseAgainstValue(that,inner,segs),segs.pop()})):fluid.materialiseModelPath(that,segs)},fluid.registerMaterialisationListener=function(that,applier){fluid.each(fluid.materialiserRegistry,(function(gradeRecord,grade){fluid.componentHasGrade(that,grade)&&fluid.each(gradeRecord,(function(rest,root){applier.modelChanged.addListener({transactional:!1,path:root},(function(newValue){var segs=[root];fluid.materialiseAgainstValue(that,newValue,segs)}))}))}))},fluid.getModelTransactionRec=function(that,transId){transId||fluid.fail("Cannot get transaction record without transaction id");var instantiator=fluid.isComponent(that)&&!fluid.isDestroyed(that,!0)?fluid.globalInstantiator:null;if(!instantiator)return null;var transRec=instantiator.modelTransactions[transId];return transRec||(transRec=instantiator.modelTransactions[transId]={relays:[],sources:{},externalChanges:{}}),transRec},fluid.recordChangeListener=function(component,applier,sourceListener,listenerId){var shadow=fluid.shadowForComponent(component);fluid.recordListener(applier.modelChanged,sourceListener,shadow,listenerId)},fluid.registerRelayTransaction=function(transRec,targetApplier,transId,options,npOptions){var newTrans=targetApplier.initiate("relay",null,transId),transEl=transRec[targetApplier.applierId]={transaction:newTrans,relayCount:0,namespace:npOptions.namespace,priority:npOptions.priority,options:options};return transEl.priority=fluid.parsePriority(transEl.priority,transRec.relays.length,!1,"model relay"),transRec.relays.push(transEl),transEl},fluid.relayRecursionBailout=100,fluid.registerDirectChangeRelay=function(target,targetSegs,source,sourceSegs,linkId,transducer,options,npOptions){var targetApplier=options.targetApplier||target.applier,sourceApplier=options.sourceApplier||source.applier;options.targetApplier||fluid.materialiseModelPath(target,targetSegs),options.sourceApplier||fluid.materialiseModelPath(source,sourceSegs);var applierId=targetApplier.applierId;targetSegs=fluid.makeArray(targetSegs),sourceSegs=fluid.makeArray(sourceSegs);var sourceListener=function(newValue,oldValue,path,changeRequest,trans,applier){var transId=trans.id,transRec=fluid.getModelTransactionRec(target,transId);applier&&trans&&!transRec[applier.applierId]&&(transRec[applier.applierId]={transaction:trans});var transEl=transRec[applierId];transRec[linkId]=transRec[linkId]||0;if(++transRec[linkId],transRec[linkId]>fluid.relayRecursionBailout&&fluid.fail("Error in model relay specification at component ",target," - operated more than "+fluid.relayRecursionBailout+" relays without model value settling - current model contents are ",trans.newHolder.model),transEl||(transEl=fluid.registerRelayTransaction(transRec,targetApplier,transId,options,npOptions)),transducer&&!options.targetApplier)fluid.pushActivity("relayTransducer",'computing modelRelay output for rule with target path "%targetSegs" and namespace "%namespace"',{targetSegs:targetSegs,namespace:npOptions.namespace}),transducer(transEl.transaction,options.sourceApplier?void 0:newValue,source,sourceSegs,targetSegs,changeRequest),fluid.popActivity();else if(changeRequest&&"DELETE"===changeRequest.type){var deleteSegs=targetSegs.concat(changeRequest.segs.slice(sourceSegs.length));transEl.transaction.fireChangeRequest({type:"DELETE",segs:deleteSegs})}else void 0!==newValue&&transEl.transaction.fireChangeRequest({type:"ADD",segs:targetSegs,value:newValue})},spec=sourceApplier.modelChanged.addListener({isRelay:!0,cond:transducer&&transducer.cond,targetId:target.id,targetApplierId:targetApplier.id,segs:sourceSegs,transactional:options.transactional},sourceListener);fluid.passLogLevel(fluid.logLevel.TRACE)&&fluid.log(fluid.logLevel.TRACE,"Adding relay listener with listenerId "+spec.listenerId+" to source applier with id "+sourceApplier.applierId+" from target applier with id "+applierId+" for target component with id "+target.id),source&&(fluid.recordChangeListener(source,sourceApplier,sourceListener,spec.listenerId),target!==source&&fluid.recordChangeListener(target,sourceApplier,sourceListener,spec.listenerId))},fluid.connectModelRelay=function(source,sourceSegs,target,targetSegs,options){var linkId=fluid.allocateGuid();fluid.enlistModelComponent(target),fluid.enlistModelComponent(source);var npOptions=fluid.filterKeys(options,["namespace","priority"]);options.update?options.targetApplier?fluid.registerDirectChangeRelay(source,sourceSegs,target,targetSegs,linkId,null,{transactional:!1,targetApplier:options.targetApplier,refCount:options.refCount,update:options.update},npOptions):fluid.registerDirectChangeRelay(target,targetSegs,source,[],linkId+"-transform",options.forwardAdapter,{transactional:!0,sourceApplier:options.forwardApplier},npOptions):(fluid.registerDirectChangeRelay(target,targetSegs,source,sourceSegs,linkId,options.forwardAdapter,{transactional:!1},npOptions),fluid.registerDirectChangeRelay(source,sourceSegs,target,targetSegs,linkId,options.backwardAdapter,{transactional:!1},npOptions))},fluid.parseSourceExclusionSpec=function(targetSpec,sourceSpec){return targetSpec.excludeSource=fluid.arrayToHash(fluid.makeArray(sourceSpec.excludeSource||(sourceSpec.includeSource?"*":void 0))),targetSpec.includeSource=fluid.arrayToHash(fluid.makeArray(sourceSpec.includeSource)),targetSpec},fluid.isExcludedChangeSource=function(transaction,spec){if(!spec||!spec.excludeSource)return!1;var excluded=spec.excludeSource["*"];for(var source in transaction.fullSources)spec.excludeSource[source]&&(excluded=!0),spec.includeSource[source]&&(excluded=!1);return excluded},fluid.model.guardedAdapter=function(transaction,cond,func,args){fluid.isExcludedChangeSource(transaction,cond)||func===fluid.model.transform.uninvertibleTransform||func.apply(null,args)},fluid.transformToAdapter=function(transform,targetPath){var basedTransform={};return basedTransform[targetPath]=transform,function(trans,newValue,source,sourceSegs,targetSegs,changeRequest){changeRequest&&"DELETE"===changeRequest.type&&trans.fireChangeRequest({type:"DELETE",path:targetPath});var oldTarget=fluid.getImmediate(trans.oldHolder.model,targetSegs),oldSource=fluid.getImmediate(source.model,sourceSegs);fluid.model.transformWithRules(newValue,basedTransform,{finalApplier:trans,oldTarget:oldTarget,oldSource:oldSource})}},fluid.makeTransformPackage=function(componentThat,transform,sourcePath,targetPath,forwardCond,backwardCond,namespace,priority){var that={forwardHolder:{model:transform},backwardHolder:{model:null},generateAdapters:function(trans){if(that.forwardAdapterImpl=fluid.transformToAdapter(trans?trans.newHolder.model:that.forwardHolder.model,targetPath),null!==sourcePath){var inverted=fluid.model.transform.invertConfiguration(transform);inverted!==fluid.model.transform.uninvertibleTransform?(that.backwardHolder.model=inverted,that.backwardAdapterImpl=fluid.transformToAdapter(that.backwardHolder.model,sourcePath)):that.backwardAdapterImpl=inverted}},forwardAdapter:function(transaction,newValue){void 0===newValue&&that.generateAdapters(),fluid.model.guardedAdapter(transaction,forwardCond,that.forwardAdapterImpl,arguments)}};that.forwardAdapter.cond=forwardCond,that.runTransform=function(trans){trans.commit(),trans.reset()},that.forwardApplier=fluid.makeHolderChangeApplier(that.forwardHolder),that.forwardApplier.isRelayApplier=!0,that.invalidator=fluid.makeEventFirer({name:"Invalidator for model relay with applier "+that.forwardApplier.applierId}),null!==sourcePath&&(that.backwardApplier=fluid.makeHolderChangeApplier(that.backwardHolder),that.backwardAdapter=function(transaction){fluid.model.guardedAdapter(transaction,backwardCond,that.backwardAdapterImpl,arguments)},that.backwardAdapter.cond=backwardCond),that.update=that.invalidator.fire;var implicitOptions={targetApplier:that.forwardApplier,update:that.update,namespace:namespace,priority:priority,refCount:0};return that.forwardHolder.model=fluid.parseImplicitRelay(componentThat,transform,[],implicitOptions),that.refCount=implicitOptions.refCount,that.namespace=namespace,that.priority=priority,that.generateAdapters(),that.invalidator.addListener(that.generateAdapters),that.invalidator.addListener(that.runTransform),that},fluid.singleTransformToFull=function(singleTransform){var expanded="string"==typeof singleTransform?{type:singleTransform}:singleTransform;return{"":{transform:$.extend(!0,{inputPath:""},expanded)}}},fluid.funcToSingleTransform=function(that,mrrec){return mrrec.func?((void 0!==mrrec.args)+(void 0!==mrrec.source)+(void 0!==mrrec.value)!==1&&fluid.fail("Error in model relay definition: short-form relay must specify just one out of (args, source, value)"),{type:"fluid.transforms.free",func:mrrec.func,args:mrrec.args?mrrec.args:[fluid.isIoCReference(mrrec.source)?mrrec.source:"{that}.model."+mrrec.source]}):null},fluid.model.relayConditions={initOnly:{includeSource:"init"},liveOnly:{excludeSource:"init"},never:{includeSource:[]},always:{}},fluid.model.expandRelayCondition=function(condition){var exclusionRec;return"initOnly"===condition?fluid.log(fluid.logLevel.WARN,'The relay condition "initOnly" is deprecated: Please use the form \'includeSource: "init"\' instead'):"liveOnly"===condition&&fluid.log(fluid.logLevel.WARN,'The relay condition "liveOnly" is deprecated: Please use the form \'excludeSource: "init"\' instead'),condition?"string"==typeof condition?(exclusionRec=fluid.model.relayConditions[condition])||fluid.fail('Unrecognised model relay condition string "'+condition+'": the supported values are "never" or a record with members "includeSource" and/or "excludeSource"'):exclusionRec=condition:exclusionRec={},exclusionRec},fluid.model.parseRelayConditions=function(conditions){var expanded=conditions.map(fluid.model.expandRelayCondition),mergeArgs=[!0,{}].concat(expanded),merged=fluid.extend.apply(null,mergeArgs);return fluid.parseSourceExclusionSpec({},merged)},fluid.parseModelRelay=function(that,mrrec,key){fluid.pushActivity("parseModelRelay",'parsing modelRelay definition with key "%key" and body "%body" attached to component "%that"',{key:key,body:mrrec,that:that}),"string"==typeof mrrec.target||fluid.isPlainObject(mrrec.target,!0)&&mrrec.target.segs||fluid.fail('Error parsing model relay definition: model reference must be specified for "target"');var parsedSource=void 0!==mrrec.source?fluid.parseValidModelReference(that,'modelRelay record member "source"',mrrec.source,!0):void 0!==mrrec.value?{nonModel:!0}:{path:null,modelSegs:null},parsedTarget=fluid.parseValidModelReference(that,'modelRelay record member "target"',mrrec.target),namespace=mrrec.namespace||key,singleTransform="string"==typeof mrrec.singleTransform?{type:mrrec.singleTransform}:mrrec.singleTransform,shortSingleTransform=fluid.funcToSingleTransform(that,mrrec),transform=mrrec.transform||fluid.singleTransformToFull(singleTransform||shortSingleTransform||{type:"fluid.transforms.identity"}),upDefaults=singleTransform?fluid.defaults(singleTransform.type):null,relayOptions=upDefaults&&upDefaults.relayOptions||{},forwardCond=fluid.model.parseRelayConditions([relayOptions.forward,mrrec.forward]),backwardCond=fluid.model.parseRelayConditions([relayOptions.backward,mrrec.backward]),transformPackage=fluid.makeTransformPackage(that,transform,parsedSource.path,parsedTarget.path,forwardCond,backwardCond,namespace,mrrec.priority);if(parsedSource.nonModel){var transformed,initValue=fluid.parseImplicitRelay(that,fluid.firstDefined(mrrec.source,mrrec.value),parsedTarget.modelSegs);if("fluid.transforms.identity"!==transform[""].transform.type){var localTransform=fluid.copy(transform);localTransform[""].transform.args=[initValue],transformed=fluid.model.transformWithRules(initValue,localTransform)}else transformed=initValue;var enlist=fluid.enlistModelComponent(parsedTarget.that),initModel={};fluid.model.setSimple(initModel,parsedTarget.modelSegs,transformed),enlist.initModels.push(initModel)}else 0===transformPackage.refCount?fluid.connectModelRelay(parsedSource.that||that,parsedSource.modelSegs,parsedTarget.that,parsedTarget.modelSegs,fluid.filterKeys(transformPackage,["forwardAdapter","backwardAdapter","namespace","priority"])):(parsedSource.modelSegs&&!shortSingleTransform&&fluid.fail('Error in model relay definition: If a relay transform has a model dependency, you can not specify a "source" entry - please instead enter this as "input" in the transform specification. Definition was ',mrrec," for component ",that),fluid.connectModelRelay(that,null,parsedTarget.that,parsedTarget.modelSegs,transformPackage));fluid.popActivity()},fluid.parseImplicitRelay=function(that,modelRec,segs,options){var value;if(fluid.isIoCReference(modelRec)){var parsed=fluid.parseValidModelReference(that,"model reference from model (implicit relay)",modelRec,!0);if(parsed.nonModel){if((value=fluid.isComponent(parsed.that)?fluid.possiblyProxyComponent(fluid.getForComponent(parsed.that,parsed.segs)):fluid.getImmediate(parsed.that,parsed.segs))instanceof fluid.fetchResources.FetchOne)return void that.applier.resourceMap.push({segs:fluid.makeArray(segs),fetchOne:value})}else++options.refCount,fluid.connectModelRelay(that,segs,parsed.that,parsed.modelSegs,options)}else fluid.isPrimitive(modelRec)||!fluid.isPlainObject(modelRec)?value=modelRec:modelRec.expander&&fluid.isPlainObject(modelRec.expander)?value=fluid.expandOptions(modelRec,that):(value=fluid.freshContainer(modelRec),fluid.each(modelRec,(function(innerValue,key){segs.push(key);var innerTrans=fluid.parseImplicitRelay(that,innerValue,segs,options);void 0!==innerTrans&&(value[key]=innerTrans),segs.pop()})));return value},fluid.model.notifyExternal=function(transRec){var allChanges=transRec?fluid.values(transRec.externalChanges):[];fluid.sortByPriority(allChanges);for(var i=0;i<allChanges.length;++i){var change=allChanges[i];change.args[5].destroyed||change.listener.apply(null,change.args)}fluid.clearLinkCounts(transRec,!0)},fluid.model.commitRelays=function(instantiator,transactionId){var transRec=instantiator.modelTransactions[transactionId];fluid.each(transRec,(function(transEl){transEl.transaction&&(transEl.transaction.commit("relay"),transEl.transaction.reset())}))},fluid.model.updateRelays=function(instantiator,transactionId){var transRec=instantiator.modelTransactions[transactionId],updates=0;return fluid.sortByPriority(transRec.relays),fluid.each(transRec.relays,(function(transEl){var maxRelay=transEl.options.refCount?4*transEl.options.refCount:4;transEl.transaction.changeRecord.changes>0&&transEl.relayCount<maxRelay&&transEl.options.update&&(transEl.relayCount++,fluid.clearLinkCounts(transRec),transEl.options.update(transEl.transaction,transRec),++updates)})),updates},fluid.concludeModelTransaction=function(transaction){var instantiator=fluid.globalInstantiator;fluid.model.notifyExternal(instantiator.modelTransactions[transaction.id]),delete instantiator.modelTransactions[transaction.id]},fluid.establishModelRelay=function(that,optionsModel,optionsML,optionsMR,applier){var shadow=fluid.shadowForComponent(that);shadow.modelRelayEstablished?fluid.fail("FLUID-5887 failure: Model relay initialised twice on component",that):shadow.modelRelayEstablished=!0;var enlist=fluid.enlistModelComponent(that),initModels=(optionsModel||[]).map((function(modelRec){return fluid.parseImplicitRelay(that,modelRec,[],{refCount:0,priority:"first"})}));Array.prototype.push.apply(enlist.initModels,initModels),fluid.each(optionsMR,(function(mrrec,key){if(""===key)for(var i=0;i<mrrec.length;++i)fluid.parseModelRelay(that,mrrec[i],key);else{var lightMerge=fluid.extend.apply(null,[!0,{}].concat(mrrec));fluid.parseModelRelay(that,lightMerge,key)}}));var instantiator=fluid.getInstantiator(that);return applier.preCommit.addListener((function(transaction){for(;fluid.model.updateRelays(instantiator,transaction.id)>0;);})),applier.preCommit.addListener((function(transaction){fluid.model.commitRelays(instantiator,transaction.id)})),applier.postCommit.addListener(fluid.concludeModelTransaction),applier.postCommit.addListener(fluid.concludeAnyTreeTransaction),null},fluid.destroyLensedComponentSource=function(that,isBoolean){var sourceModelReference=fluid.shadowForComponent(that).localRecord.sourceModelReference;sourceModelReference&&!fluid.isDestroyed(sourceModelReference.that,!0)&&sourceModelReference.that.applier.change(sourceModelReference.modelSegs,!1,isBoolean?"ADD":"DELETE")},fluid.constructLensedComponents=function(shadow,initTransRec,sourcesParsed,dynamicComponentKey){var lightMerge=shadow.lightMergeDynamicComponents[dynamicComponentKey],sources=fluid.getImmediate(shadow.that.model,sourcesParsed.modelSegs),shadowRecord=shadow.modelSourcedDynamicComponents[dynamicComponentKey],localRecordContributor=shadowRecord.localRecordContributor=function(localRecord,source,sourceKey){localRecord.sourceModelReference={that:sourcesParsed.that,modelSegs:sourcesParsed.modelSegs.concat(shadowRecord.isBoolean?[]:[sourceKey])}};fluid.lightMergeRecords.pushRecord(lightMerge,{options:{listeners:{afterDestroy:{funcName:"fluid.destroyLensedComponentSource",args:["{that}",shadowRecord.isBoolean]}}}}),fluid.registerSourcedDynamicComponentsTriage(shadow.potentia,shadow.that,sources,lightMerge,dynamicComponentKey,shadowRecord.isBoolean,localRecordContributor)},fluid.operateInitialTransactionWorkflow=function(shadows,treeTransaction){fluid.tryCatch((function(){var initModelTransaction=treeTransaction.initModelTransaction,transId=treeTransaction.initModelTransactionId;fluid.operateInitialTransaction(initModelTransaction,transId)}),(function(e){throw treeTransaction.initModelTransaction={},treeTransaction.initModelTransactionId=null,fluid.clearTransactions(),e}),fluid.identity)},fluid.enlistModelWorkflow=function(shadows,treeTransaction){var transId=treeTransaction.initModelTransactionId;transId||(transId=fluid.allocateGuid(),treeTransaction.initModelTransactionId=transId),shadows.forEach((function(shadow){fluid.getForComponent(shadow.that,"modelRelay")})),fluid.operateInitialTransactionWorkflow(shadows,treeTransaction)},fluid.notifyInitModelWorkflow=function(shadow,treeTransaction){if(!shadow.modelComplete){var initModelTransaction=treeTransaction.initModelTransaction,transRec=fluid.getModelTransactionRec(fluid.rootComponent,shadow.initTransactionId),trans=fluid.values(initModelTransaction)[0].transaction;treeTransaction.initModelTransaction={},treeTransaction.initModelTransactionId=null,trans.commit(),fluid.each(initModelTransaction,(function(oneRec){var that=oneRec.that,applier=that.applier;trans=transRec[applier.applierId].transaction;var listeners=applier.transListeners.sortedListeners,initShadow=fluid.shadowForComponent(that);initShadow.modelComplete=!0,initShadow.initTransactionId===shadow.initTransactionId&&fluid.notifyModelChanges(listeners,"ADD",trans.oldHolder,fluid.emptyHolder,null,trans,applier,that)})),fluid.concludeModelTransaction(trans)}},fluid.defaults("fluid.modelComponent",{gradeNames:["fluid.component"],workflows:{global:{enlistModel:{funcName:"fluid.enlistModelWorkflow"},resolveResourceModel:{funcName:"fluid.resolveResourceModelWorkflow",priority:"after:enlistModel",waitIO:!0}},local:{notifyInitModelWorkflow:{funcName:"fluid.notifyInitModelWorkflow",priority:"before:concludeComponentInit"}}},members:{model:{expander:{funcName:"fluid.initRelayModel",args:["{that}","{that}.modelRelay"],noproxy:!0}},applier:{expander:{funcName:"fluid.makeHolderChangeApplier",args:["{that}","{that}.options.changeApplierOptions"],noproxy:!0}},modelRelay:{expander:{funcName:"fluid.establishModelRelay",args:["{that}","{that}.options.model","{that}.options.modelListeners","{that}.options.modelRelay","{that}.applier"],noproxy:!0}}},mergePolicy:{model:{noexpand:!0,func:fluid.arrayConcatPolicy},modelListeners:fluid.makeMergeListenersPolicy(fluid.arrayConcatPolicy),modelRelay:fluid.makeMergeListenersPolicy(fluid.arrayConcatPolicy,!0)}}),fluid.modelChangedToChange=function(args){return{value:args[0],oldValue:args[1],path:args[2],transaction:args[4]}},fluid.event.invokeListener=function(listener,args,localRecord,mergeRecord){return"string"==typeof listener&&(listener=fluid.event.resolveListener(listener)),listener.apply(null,args,localRecord,mergeRecord)},fluid.resolveModelListener=function(that,record){var togo=function(){if(!fluid.isDestroyed(that,!0)){var change=fluid.modelChangedToChange(arguments),args=arguments,localRecord={change:change,arguments:args},mergeRecord={source:Object.keys(change.transaction.sources)};record.args&&(args=fluid.expandImmediate(record.args,that,localRecord)),fluid.event.invokeListener(record.listener,fluid.makeArray(args),localRecord,mergeRecord)}};return fluid.event.impersonateListener(record.listener,togo),togo},fluid.registerModelListeners=function(that,record,paths,namespace){var func=fluid.resolveModelListener(that,record);fluid.each(record.byTarget,(function(parsedArray){var parsed=parsedArray[0],spec={listener:func,listenerId:fluid.allocateGuid(),segsArray:fluid.getMembers(parsedArray,"modelSegs"),includeSource:record.includeSource,excludeSource:record.excludeSource,priority:fluid.expandOptions(record.priority,that),transactional:!0};(spec=parsed.applier.modelChanged.addListener(spec,func,namespace,record.softNamespace)).segsArray.forEach((function(segs){fluid.materialiseModelPath(that,segs)})),fluid.recordChangeListener(that,parsed.applier,func,spec.listenerId)}))},fluid.registerMergedModelListeners=function(that,listeners){fluid.each(listeners,(function(value,key){"string"==typeof value&&(value={funcName:value});var records=fluid.event.resolveListenerRecord(value,that,"modelListeners",null,!1).records;fluid.each(records,(function(record){record.byTarget={};var paths=fluid.makeArray(void 0===record.path?key:record.path);fluid.each(paths,(function(path){var parsed=fluid.parseValidModelReference(that,"modelListeners entry",path);fluid.pushArray(record.byTarget,parsed.that.id,parsed)}));var namespace=(record.namespace&&!record.softNamespace?record.namespace:null)||(void 0!==record.path?key:null);fluid.registerModelListeners(that,record,paths,namespace)}))}))},fluid.replaceModelValue=function(applier,path,newValue){var transaction=applier.initiate();return transaction.fireChangeRequest({path:path,type:"DELETE"}),transaction.fireChangeRequest({path:path,value:newValue}),transaction.commit(),applier.holder.model},fluid.fireChanges=function(applier,changes){for(var i=0;i<changes.length;++i)applier.fireChangeRequest(changes[i])},fluid.model.isChangedPath=function(changeMap,segs){for(var i=0;i<=segs.length;++i){if("string"==typeof changeMap)return changeMap;i<segs.length&&changeMap&&(changeMap=changeMap[segs[i]])}return null},fluid.model.setChangedPath=function(options,segs,value){var notePath=function(record){var root=options;segs.unshift(record);for(var i=0;i<segs.length-1;++i){var seg=segs[i];void 0===root[seg]&&(root[seg]={}),root=root[seg]}fluid.isPlainObject(root)&&(root[fluid.peek(segs)]=value),segs.shift()};fluid.model.isChangedPath(options.changeMap,segs)!==value&&(++options.changes,notePath("changeMap")),fluid.model.isChangedPath(options.deltaMap,segs)!==value&&(++options.deltas,notePath("deltaMap"))},fluid.model.fetchChangeChildren=function(target,i,segs,source,options){fluid.each(source,(function(value,key){segs[i]=key,fluid.model.applyChangeStrategy(target,key,i,segs,value,options),segs.length=i}))},fluid.model.isSameValue=function(a,b){return"number"!=typeof a||"number"!=typeof b?a===b:a===b||a!=a&&b!=b||Math.abs((a-b)/b)<1e-12},fluid.model.applyChangeStrategy=function(target,name,i,segs,source,options){var targetSlot=target[name],sourceCode=fluid.typeCode(source),targetCode=fluid.typeCode(targetSlot),changedValue=fluid.NO_VALUE;"primitive"===sourceCode?fluid.model.isSameValue(targetSlot,source)||(changedValue=source,++options.unchanged):(targetCode!==sourceCode||"array"===sourceCode&&source.length!==targetSlot.length)&&(changedValue=fluid.freshContainer(source)),changedValue!==fluid.NO_VALUE&&(target[name]=changedValue,options.changeMap&&fluid.model.setChangedPath(options,segs,options.inverse?"DELETE":"ADD")),"primitive"!==sourceCode&&fluid.model.fetchChangeChildren(target[name],i+1,segs,source,options)},fluid.model.stepTargetAccess=function(target,type,segs,startpos,endpos,options){for(var i=startpos;i<endpos;++i){if(target)target[segs[i]]!==(target=fluid.model.traverseWithStrategy(target,segs,i,options["ADD"===type?"resolverSetConfig":"resolverGetConfig"],segs.length-i-1))&&options.changeMap&&fluid.model.setChangedPath(options,segs.slice(0,i+1),"ADD")}return{root:target,last:segs[endpos]}},fluid.model.defaultAccessorConfig=function(options){return(options=options||{}).resolverSetConfig=options.resolverSetConfig||fluid.model.escapedSetConfig,options.resolverGetConfig=options.resolverGetConfig||fluid.model.escapedGetConfig,options},fluid.model.applyHolderChangeRequest=function(holder,request,options){(options=fluid.model.defaultAccessorConfig(options)).deltaMap=options.changeMap?{}:null,options.deltas=0;var pen,length=request.segs.length,atRoot=0===length;if(atRoot?pen={root:holder,last:"model"}:(holder.model||"DELETE"===request.type||(holder.model={},fluid.model.setChangedPath(options,[],options.inverse?"DELETE":"ADD")),pen=fluid.model.stepTargetAccess(holder.model,request.type,request.segs,0,length-1,options)),"ADD"===request.type){var value=request.value,segs=fluid.makeArray(request.segs);fluid.model.applyChangeStrategy(pen.root,pen.last,length-1,segs,value,options,atRoot)}else"DELETE"===request.type?pen.root&&void 0!==pen.root[pen.last]&&(delete pen.root[pen.last],options.changeMap&&fluid.model.setChangedPath(options,request.segs,"DELETE")):fluid.fail("Unrecognised change type of "+request.type);return options.deltas?options.deltaMap:null},fluid.model.diff=function(modela,modelb,options){options=options||{changes:0,unchanged:0,changeMap:{}};var togo,typea=fluid.typeCode(modela),typeb=fluid.typeCode(modelb);if("primitive"===typea&&"primitive"===typeb)togo=fluid.model.isSameValue(modela,modelb);else if("primitive"===typea^"primitive"===typeb)togo=!1;else{var holderb={model:fluid.copy(modelb)};options.inverse=!0,fluid.model.applyHolderChangeRequest(holderb,{value:modela,segs:[],type:"ADD"},options);var holdera={model:fluid.copy(modela)};options.inverse=!1,fluid.model.applyHolderChangeRequest(holdera,{value:modelb,segs:[],type:"ADD"},options),togo=0===options.changes}return!1===togo&&0===options.changes?(options.changes=1,options.changeMap=void 0===modelb?"DELETE":"ADD"):!0===togo&&0===options.unchanged&&(options.unchanged=1),togo},fluid.outputWildcardMatches=function(matches,outSegs,root){fluid.each(root,(function(value,key){matches.push(outSegs.concat(key))}))},fluid.matchChanges=function(changeMap,specSegs,newHolder,oldHolder){for(var newRoot=newHolder.model,oldRoot=oldHolder.model,map=changeMap,outSegs=["model"],wildcard=!1,togo=[],i=0;i<specSegs.length;++i){var seg=specSegs[i];"*"===seg?i===specSegs.length-1?wildcard=!0:fluid.fail("Wildcard specification in modelChanged listener is only supported for the final path segment: "+specSegs.join(".")):(outSegs.push(seg),map=fluid.isPrimitive(map)?map:map[seg],newRoot=newRoot?newRoot[seg]:void 0,oldRoot=oldRoot?oldRoot[seg]:void 0)}if(map)if(wildcard)if("string"==typeof map){var allKeys=fluid.extend({},oldRoot,newRoot);fluid.outputWildcardMatches(togo,outSegs,allKeys)}else fluid.outputWildcardMatches(togo,outSegs,map);else togo.push(outSegs);return togo},fluid.storeExternalChange=function(transRec,applier,invalidPath,spec,args){var pathString=applier.composeSegments.apply(null,invalidPath),keyString=[applier.holder.id,spec.listenerId,spec.wildcard?pathString:""].join("|");transRec.externalChanges[keyString]={listener:spec.listener,namespace:spec.namespace,priority:spec.priority,args:args}},fluid.notifyModelChanges=function(listeners,changeMap,newHolder,oldHolder,changeRequest,transaction,applier,that){if(listeners)for(var transRec=fluid.getModelTransactionRec(that,transaction.id),i=0;i<listeners.length;++i)for(var spec=listeners[i],multiplePaths=spec.segsArray.length>1,j=0;j<spec.segsArray.length;++j)for(var invalidPaths=fluid.matchChanges(changeMap,spec.segsArray[j],newHolder,oldHolder),k=0;k<invalidPaths.length;++k){if(applier.destroyed)return;var invalidPath=invalidPaths[k];spec.listener=fluid.event.resolveListener(spec.listener);var args=[multiplePaths?newHolder.model:fluid.model.getSimple(newHolder,invalidPath),multiplePaths?oldHolder.model:fluid.model.getSimple(oldHolder,invalidPath),multiplePaths?[]:invalidPath.slice(1),changeRequest,transaction,applier];if(!spec.isRelay){if(fluid.model.diff(args[0],args[1]))continue;if(fluid.isExcludedChangeSource(transaction,spec))continue}transRec&&!spec.isRelay&&spec.transactional?fluid.storeExternalChange(transRec,applier,invalidPath,spec,args):spec.listener.apply(null,args)}},fluid.bindELMethods=function(applier){applier.parseEL=function(EL){return fluid.model.pathToSegments(EL,applier.options.resolverSetConfig)},applier.composeSegments=function(){return applier.options.resolverSetConfig.parser.compose.apply(null,arguments)}},fluid.emptyHolder=fluid.freezeRecursive({model:void 0}),fluid.preFireChangeRequest=function(applier,changeRequest){changeRequest.type||(changeRequest.type="ADD"),changeRequest.segs=changeRequest.segs||applier.parseEL(changeRequest.path)},fluid.bindRequestChange=function(that){that.change=function(path,value,type,source){var changeRequest={path:path,value:value,type:type,source:source};that.fireChangeRequest(changeRequest)}},fluid.mergeChangeSources=function(target,globalSources){fluid.isPlainObject(globalSources,!0)?fluid.extend(target,globalSources):fluid.each(fluid.makeArray(globalSources),(function(globalSource){target[globalSource]=!0}))},fluid.ChangeApplier=function(){},fluid.makeHolderChangeApplier=function(holder,options){options=fluid.model.defaultAccessorConfig(options);var applierId=fluid.allocateGuid(),that=new fluid.ChangeApplier,name=fluid.isComponent(holder)?"ChangeApplier for component "+fluid.dumpThat(holder):"ChangeApplier with id "+applierId;return $.extend(that,{applierId:applierId,holder:holder,listeners:fluid.makeEventFirer({name:"Internal change listeners for "+name}),transListeners:fluid.makeEventFirer({name:"External change listeners for "+name}),options:options,modelChanged:{},resourceMap:[],earlyModelResolved:fluid.makeEventFirer({name:"earlyModelResolved event for "+name}),preCommit:fluid.makeEventFirer({name:"preCommit event for "+name}),postCommit:fluid.makeEventFirer({name:"postCommit event for "+name})}),that.destroy=function(){that.preCommit.destroy(),that.postCommit.destroy(),that.destroyed=!0},that.modelChanged.addListener=function(spec,listener,namespace,softNamespace){return(spec="string"==typeof spec?{path:spec}:fluid.copy(spec)).listenerId=spec.listenerId||fluid.allocateGuid(),spec.namespace=namespace,spec.softNamespace=softNamespace,"string"==typeof listener&&(listener={globalName:listener}),spec.listener=listener,!1!==spec.transactional&&(spec.transactional=!0),spec.segsArray||(void 0!==spec.path&&(spec.segs=spec.segs||that.parseEL(spec.path)),spec.segsArray=[spec.segs]),spec.isRelay||(fluid.parseSourceExclusionSpec(spec,spec),spec.wildcard=fluid.accumulate(fluid.transform(spec.segsArray,(function(segs){return fluid.contains(segs,"*")})),fluid.add,0),spec.wildcard&&spec.segsArray.length>1&&fluid.fail("Error in model listener specification ",spec," - you may not supply a wildcard pattern as one of a set of multiple paths to be matched")),that[spec.transactional?"transListeners":"listeners"].addListener(spec),spec},that.modelChanged.removeListener=function(listener){that.listeners.removeListener(listener),that.transListeners.removeListener(listener)},that.fireChangeRequest=function(changeRequest){var initTransaction=fluid.findInitModelTransaction(holder);if(initTransaction)initTransaction.transaction.fireChangeRequest(changeRequest);else{var ation=that.initiate("local",changeRequest.source);ation.fireChangeRequest(changeRequest),ation.commit()}},that.initiate=function(localSource,globalSources,transactionId){var defeatPost="relay"===(localSource="init"===globalSources?null:localSource||"local")||"init"===globalSources,trans={instanceId:fluid.allocateGuid(),id:transactionId||fluid.allocateGuid(),changeRecord:{resolverSetConfig:options.resolverSetConfig,resolverGetConfig:options.resolverGetConfig},reset:function(){trans.oldHolder=holder,trans.newHolder={model:fluid.copy(holder.model)},trans.changeRecord.changes=0,trans.changeRecord.unchanged=0,trans.changeRecord.changeMap={}},commit:function(code){if("relay"!==code&&that.preCommit.fire(trans,that,code),trans.changeRecord.changes>0){var oldHolder={model:holder.model};holder.model=trans.newHolder.model,fluid.notifyModelChanges(that.transListeners.sortedListeners,trans.changeRecord.changeMap,holder,oldHolder,null,trans,that,holder)}defeatPost||"relay"===code||that.postCommit.fire(trans,that,code)},fireChangeRequest:function(changeRequest){fluid.preFireChangeRequest(that,changeRequest),changeRequest.transactionId=trans.id;var deltaMap=fluid.model.applyHolderChangeRequest(trans.newHolder,changeRequest,trans.changeRecord);fluid.notifyModelChanges(that.listeners.sortedListeners,deltaMap,trans.newHolder,holder,changeRequest,trans,that,holder)},hasChangeSource:function(source){return trans.fullSources[source]}},transRec=fluid.getModelTransactionRec(holder,trans.id);return transRec&&(fluid.mergeChangeSources(transRec.sources,globalSources),trans.sources=transRec.sources,trans.fullSources=Object.create(transRec.sources),localSource&&(trans.fullSources[localSource]=!0)),trans.reset(),fluid.bindRequestChange(trans),trans},fluid.bindRequestChange(that),fluid.bindELMethods(that),that},fluid.modelPairToChanges=function(value,oldValue,changePathPrefix){changePathPrefix=changePathPrefix||"";var diffOptions={changes:0,unchanged:0,changeMap:{}};fluid.model.diff(oldValue,value,diffOptions);var changes=[];return fluid.modelPairToChangesImpl(value,fluid.pathUtil.parseEL(changePathPrefix),diffOptions.changeMap,[],changes),changes},fluid.modelPairToChangesImpl=function(value,changePathPrefixSegs,changeMap,changeSegs,changes){"ADD"===changeMap?changes.push({path:changePathPrefixSegs,value:value,type:"ADD"}):"DELETE"===changeMap?changes.push({path:changePathPrefixSegs,value:null,type:"DELETE"}):fluid.isPlainObject(changeMap,!0)&&fluid.each(changeMap,(function(change,seg){var currentChangeSegs=changeSegs.concat([seg]);"ADD"===change?changes.push({path:changePathPrefixSegs.concat(currentChangeSegs),value:fluid.get(value,currentChangeSegs),type:"ADD"}):"DELETE"===change?changes.push({path:changePathPrefixSegs.concat(currentChangeSegs),value:null,type:"DELETE"}):fluid.isPlainObject(change,!0)&&fluid.modelPairToChangesImpl(value,changePathPrefixSegs,change,currentChangeSegs,changes)}))},fluid.registerNamespace("fluid.model.transform"),fluid.defaults("fluid.transformFunction",{gradeNames:"fluid.function"}),fluid.defaults("fluid.standardInputTransformFunction",{gradeNames:"fluid.transformFunction"}),fluid.defaults("fluid.standardOutputTransformFunction",{gradeNames:"fluid.transformFunction"}),fluid.defaults("fluid.multiInputTransformFunction",{gradeNames:"fluid.transformFunction"}),fluid.defaults("fluid.standardTransformFunction",{gradeNames:["fluid.standardInputTransformFunction","fluid.standardOutputTransformFunction"]}),fluid.defaults("fluid.lens",{gradeNames:"fluid.transformFunction",invertConfiguration:null}),fluid.model.transform.pathToRule=function(inputPath){return{transform:{type:"fluid.transforms.value",inputPath:inputPath}}},fluid.model.transform.literalValueToRule=function(input){return{transform:{type:"fluid.transforms.literalValue",input:input}}},fluid.model.composePaths=function(prefix,suffix){return suffix=0===suffix?"0":suffix||"",(prefix=0===prefix?"0":prefix||"")?suffix?prefix+"."+suffix:prefix:suffix},fluid.model.transform.accumulateInputPath=function(inputPath,transformer,paths){void 0!==inputPath&&paths.push(fluid.model.composePaths(transformer.inputPrefix,inputPath))},fluid.model.transform.accumulateStandardInputPath=function(input,transformSpec,transformer,paths){fluid.model.transform.getValue(void 0,transformSpec[input],transformer),fluid.model.transform.accumulateInputPath(transformSpec[input+"Path"],transformer,paths)},fluid.model.transform.accumulateMultiInputPaths=function(inputVariables,transformSpec,transformer,paths){fluid.each(inputVariables,(function(v,k){fluid.model.transform.accumulateStandardInputPath(k,transformSpec,transformer,paths)}))},fluid.model.transform.getValue=function(inputPath,value,transformer){var togo;return void 0!==inputPath&&(togo=fluid.get(transformer.source,fluid.model.composePaths(transformer.inputPrefix,inputPath),transformer.resolverGetConfig)),void 0===togo&&(togo=fluid.isPrimitive(value)?value:"literalValue"in value?value.literalValue:void 0===value.transform?value:transformer.expand(value)),togo},fluid.model.transform.NONDEFAULT_OUTPUT_PATH_RETURN={},fluid.model.transform.setValue=function(userOutputPath,value,transformer){var toset=fluid.copy(value),outputPath=fluid.model.composePaths(transformer.outputPrefix,userOutputPath);return void 0!==toset&&transformer.applier.change(outputPath,toset),userOutputPath?fluid.model.transform.NONDEFAULT_OUTPUT_PATH_RETURN:toset},fluid.model.transform.resolveParam=function(transformSpec,transformer,key,def){var val=fluid.model.transform.getValue(transformSpec[key+"Path"],transformSpec[key],transformer);return void 0!==val?val:def},fluid.model.transform.matchValue=function(expected,actual,partialMatches){var stats={changes:0,unchanged:0,changeMap:{}};return fluid.model.diff(expected,actual,stats),0===stats.unchanged?0:partialMatches?0xffffff000000-16777216*stats.changes+stats.unchanged:stats.changes?0:0xffffff000000+stats.unchanged},fluid.model.transform.invertPaths=function(transformSpec,transformer){var oldOutput=fluid.model.composePaths(transformer.outputPrefix,transformSpec.outputPath);return transformSpec.outputPath=fluid.model.composePaths(transformer.inputPrefix,transformSpec.inputPath),transformSpec.inputPath=oldOutput,transformSpec},fluid.model.transform.prefixApplier=function(transformSpec,transformer){transformSpec.inputPrefix&&transformer.inputPrefixOp.push(transformSpec.inputPrefix),transformSpec.outputPrefix&&transformer.outputPrefixOp.push(transformSpec.outputPrefix),transformer.expand(transformSpec.input),transformSpec.inputPrefix&&transformer.inputPrefixOp.pop(),transformSpec.outputPrefix&&transformer.outputPrefixOp.pop()},fluid.defaults("fluid.model.transform.prefixApplier",{gradeNames:["fluid.transformFunction"]}),fluid.model.makePathStack=function(transform,prefixName){var stack=transform[prefixName+"Stack"]=[];return transform[prefixName]="",{push:function(prefix){var newPath=fluid.model.composePaths(transform[prefixName],prefix);stack.push(transform[prefixName]),transform[prefixName]=newPath},pop:function(){transform[prefixName]=stack.pop()}}},fluid.model.transform.doTransform=function(transformSpec,transformer,transformOpts){var expdef=transformOpts.defaults,transformFn=fluid.getGlobalValue(transformOpts.typeName);"function"!=typeof transformFn&&fluid.fail("Transformation record specifies transformation function with name "+transformSpec.type+" which is not a function - ",transformFn),fluid.hasGrade(expdef,"fluid.transformFunction")||(expdef=fluid.defaults("fluid.standardTransformFunction"));var transformArgs=[transformSpec,transformer];if(fluid.hasGrade(expdef,"fluid.multiInputTransformFunction")){var inputs={};fluid.each(expdef.inputVariables,(function(v,k){inputs[k]=function(){var input=fluid.model.transform.getValue(transformSpec[k+"Path"],transformSpec[k],transformer);return input=void 0===input&&null!==v?v:input}})),transformArgs.unshift(inputs)}if(fluid.hasGrade(expdef,"fluid.standardInputTransformFunction")){"input"in transformSpec||"inputPath"in transformSpec||fluid.fail('Error in transform specification. Either "input" or "inputPath" must be specified for a standardInputTransformFunction: received ',transformSpec);var expanded=fluid.model.transform.getValue(transformSpec.inputPath,transformSpec.input,transformer);if(transformArgs.unshift(expanded),void 0===expanded)return}var transformed=transformFn.apply(null,transformArgs);fluid.hasGrade(expdef,"fluid.standardOutputTransformFunction")&&(void 0!==(void 0!==transformSpec.outputPath?transformSpec.outputPath:transformOpts.doOutput?"":void 0)&&void 0!==transformed&&(fluid.model.transform.setValue(transformSpec.outputPath,transformed,transformer),transformed=void 0));return transformed};var globalAccept=[];fluid.registerNamespace("fluid.pathUtil"),fluid.pathUtil.getPathSegment=function(path,i){return fluid.pathUtil.getPathSegmentImpl(globalAccept,path,i),globalAccept[0]},fluid.pathUtil.getHeadPath=function(path){return fluid.pathUtil.getPathSegment(path,0)},fluid.pathUtil.getFromHeadPath=function(path){var firstdot=fluid.pathUtil.getPathSegmentImpl(null,path,0);return firstdot===path.length?"":path.substring(firstdot+1)},fluid.pathUtil.matchPath=function(spec,path,exact){for(var togo=[];;){if(""===path^""===spec&&exact)return null;if(!spec||!path)break;var spechead=fluid.pathUtil.getHeadPath(spec),pathhead=fluid.pathUtil.getHeadPath(path);if("*"!==spechead&&spechead!==pathhead)return null;togo.push(pathhead),spec=fluid.pathUtil.getFromHeadPath(spec),path=fluid.pathUtil.getFromHeadPath(path)}return togo},fluid.model.transform.expandWildcards=function(transformer,source){fluid.each(source,(function(value,key){var q=transformer.queuedTransforms;transformer.pathOp.push(fluid.pathUtil.escapeSegment(key.toString()));for(var i=0;i<q.length;++i)if(fluid.pathUtil.matchPath(q[i].matchPath,transformer.path,!0)){var esCopy=fluid.copy(q[i].transformSpec);(void 0===esCopy.inputPath||fluid.model.transform.hasWildcard(esCopy.inputPath))&&(esCopy.inputPath=""),transformer.inputPrefixOp.push(transformer.path),transformer.outputPrefixOp.push(transformer.path);var transformOpts=fluid.model.transform.lookupType(esCopy.type),result=fluid.model.transform.doTransform(esCopy,transformer,transformOpts);void 0!==result&&fluid.model.transform.setValue(null,result,transformer),transformer.outputPrefixOp.pop(),transformer.inputPrefixOp.pop()}fluid.isPrimitive(value)||fluid.model.transform.expandWildcards(transformer,value),transformer.pathOp.pop()}))},fluid.model.transform.hasWildcard=function(path){return"string"==typeof path&&-1!==path.indexOf("*")},fluid.model.transform.maybePushWildcard=function(transformSpec,transformer){var matchPath,hw=fluid.model.transform.hasWildcard;return hw(transformSpec.inputPath)?matchPath=fluid.model.composePaths(transformer.inputPrefix,transformSpec.inputPath):(hw(transformer.outputPrefix)||hw(transformSpec.outputPath))&&(matchPath=fluid.model.composePaths(transformer.outputPrefix,transformSpec.outputPath)),!!matchPath&&(transformer.queuedTransforms.push({transformSpec:transformSpec,outputPrefix:transformer.outputPrefix,inputPrefix:transformer.inputPrefix,matchPath:matchPath}),!0)},fluid.model.sortByKeyLength=function(inObject){return fluid.keys(inObject).sort(fluid.compareStringLength(!0))},fluid.model.transform.handleTransformStrategy=function(transformSpec,transformer,transformOpts){return fluid.model.transform.maybePushWildcard(transformSpec,transformer)?void 0:fluid.model.transform.doTransform(transformSpec,transformer,transformOpts)},fluid.model.transform.handleInvertStrategy=function(transformSpec,transformer,transformOpts){transformSpec=fluid.copy(transformSpec),fluid.hasGrade(transformOpts.defaults,"fluid.standardTransformFunction")&&(transformSpec=fluid.model.transform.invertPaths(transformSpec,transformer));var invertor=transformOpts.defaults&&transformOpts.defaults.invertConfiguration;if(invertor){var inverted=fluid.invokeGlobalFunction(invertor,[transformSpec,transformer]);transformer.inverted.push(inverted)}else transformer.inverted.push(fluid.model.transform.uninvertibleTransform)},fluid.model.transform.handleCollectStrategy=function(transformSpec,transformer,transformOpts){var defaults=transformOpts.defaults,standardInput=fluid.hasGrade(defaults,"fluid.standardInputTransformFunction"),multiInput=fluid.hasGrade(defaults,"fluid.multiInputTransformFunction");standardInput&&fluid.model.transform.accumulateStandardInputPath("input",transformSpec,transformer,transformer.inputPaths),multiInput&&fluid.model.transform.accumulateMultiInputPaths(defaults.inputVariables,transformSpec,transformer,transformer.inputPaths);var collector=defaults.collectInputPaths;if(collector){var collected=fluid.makeArray(fluid.invokeGlobalFunction(collector,[transformSpec,transformer]));Array.prototype.push.apply(transformer.inputPaths,collected)}},fluid.model.transform.lookupType=function(typeName,transformSpec){return typeName||fluid.fail("Transformation record is missing a type name: ",transformSpec),-1===typeName.indexOf(".")&&(typeName="fluid.transforms."+typeName),{defaults:fluid.defaults(typeName),typeName:typeName}},fluid.model.transform.processRule=function(rule,transformer){var togo,transformSpec,transformOpts;if("string"==typeof rule?rule=fluid.model.transform.pathToRule(rule):void 0!==rule.literalValue&&(rule=fluid.model.transform.literalValueToRule(rule.literalValue)),rule.transform)if(fluid.isArrayable(rule.transform)){var transforms=rule.transform;togo=void 0;for(var i=0;i<transforms.length;++i)transformSpec=transforms[i],transformOpts=fluid.model.transform.lookupType(transformSpec.type),transformer.transformHandler(transformSpec,transformer,transformOpts)}else transformSpec=rule.transform,transformOpts=fluid.model.transform.lookupType(transformSpec.type),togo=transformer.transformHandler(transformSpec,transformer,transformOpts);return fluid.isArrayable(rule)&&(transformer.collectedFlatSchemaOpts=transformer.collectedFlatSchemaOpts||{},transformer.collectedFlatSchemaOpts[transformer.outputPrefix]="array"),fluid.each(rule,(function(value,key){if("transform"!==key){transformer.outputPrefixOp.push(key);var togo=transformer.expand(value,transformer);void 0!==togo&&(fluid.model.transform.setValue(null,togo,transformer),togo=void 0),transformer.outputPrefixOp.pop()}})),togo},fluid.model.transform.makeStrategy=function(transformer,handleFn,transformFn){transformFn=transformFn||fluid.model.transform.processRule,transformer.expand=function(rules){return transformFn(rules,transformer)},transformer.outputPrefixOp=fluid.model.makePathStack(transformer,"outputPrefix"),transformer.inputPrefixOp=fluid.model.makePathStack(transformer,"inputPrefix"),transformer.transformHandler=handleFn},fluid.model.transform.uninvertibleTransform=Object.freeze({}),fluid.model.transform.invertConfiguration=function(rules){var transformer={inverted:[]};return fluid.model.transform.makeStrategy(transformer,fluid.model.transform.handleInvertStrategy),transformer.expand(rules),-1===transformer.inverted.indexOf(fluid.model.transform.uninvertibleTransform)?{transform:transformer.inverted}:fluid.model.transform.uninvertibleTransform},fluid.model.transform.collectInputPaths=function(rules){var transformer={inputPaths:[]};fluid.model.transform.makeStrategy(transformer,fluid.model.transform.handleCollectStrategy),transformer.expand(rules);var inputPathHash=fluid.arrayToHash(transformer.inputPaths);return Object.keys(inputPathHash)},fluid.model.transform.flatSchemaStrategy=function(flatSchema,getConfig){var keys=fluid.model.sortByKeyLength(flatSchema);return function(root,segment,index,segs){for(var path=getConfig.parser.compose.apply(null,segs.slice(0,index)),i=0;i<keys.length;++i){var key=keys[i];if(null!==fluid.pathUtil.matchPath(key,path,!0))return flatSchema[key]}}},fluid.model.transform.defaultSchemaValue=function(schemaValue){return"array"===(fluid.isPrimitive(schemaValue)?schemaValue:schemaValue.type)?[]:{}},fluid.model.transform.isomorphicSchemaStrategy=function(source,getConfig){return function(root,segment,index,segs){var existing=fluid.get(source,segs.slice(0,index),getConfig);return fluid.isArrayable(existing)?"array":"object"}},fluid.model.transform.decodeStrategy=function(source,options,getConfig){return options.isomorphic?fluid.model.transform.isomorphicSchemaStrategy(source,getConfig):options.flatSchema?fluid.model.transform.flatSchemaStrategy(options.flatSchema,getConfig):void 0},fluid.model.transform.schemaToCreatorStrategy=function(strategy){return function(root,segment,index,segs){if(void 0===root[segment]){var schemaValue=strategy(root,segment,index,segs);return root[segment]=fluid.model.transform.defaultSchemaValue(schemaValue),root[segment]}}},fluid.model.transform.sequence=function(source,rules,options){for(var i=0;i<rules.length;++i)source=fluid.model.transform(source,rules[i],options);return source},fluid.model.compareByPathLength=function(changea,changeb){var pdiff=changea.path.length-changeb.path.length;return 0===pdiff?changea.sequence-changeb.sequence:pdiff},fluid.model.fireSortedChanges=function(changes,applier){changes.sort(fluid.model.compareByPathLength),fluid.fireChanges(applier,changes)},fluid.model.transformWithRules=function(source,rules,options){options=options||{};var getConfig=fluid.model.escapedGetConfig,setConfig=fluid.model.escapedSetConfig,schemaStrategy=fluid.model.transform.decodeStrategy(source,options,getConfig),transformer={source:source,target:{model:schemaStrategy?fluid.model.transform.defaultSchemaValue(schemaStrategy(null,"",0,[""])):{}},oldSource:options.oldSource,oldTarget:options.oldTarget,resolverGetConfig:getConfig,resolverSetConfig:setConfig,collectedFlatSchemaOpts:void 0,queuedChanges:[],queuedTransforms:[]};fluid.model.transform.makeStrategy(transformer,fluid.model.transform.handleTransformStrategy),transformer.applier={fireChangeRequest:function(changeRequest){changeRequest.sequence=transformer.queuedChanges.length,transformer.queuedChanges.push(changeRequest)}},fluid.bindRequestChange(transformer.applier),transformer.expand(rules);var rootSetConfig=fluid.copy(setConfig);return void 0!==transformer.collectedFlatSchemaOpts&&($.extend(transformer.collectedFlatSchemaOpts,options.flatSchema),schemaStrategy=fluid.model.transform.flatSchemaStrategy(transformer.collectedFlatSchemaOpts,getConfig)),rootSetConfig.strategies=[fluid.model.defaultFetchStrategy,schemaStrategy?fluid.model.transform.schemaToCreatorStrategy(schemaStrategy):fluid.model.defaultCreatorStrategy],transformer.finalApplier=options.finalApplier||fluid.makeHolderChangeApplier(transformer.target,{resolverSetConfig:rootSetConfig}),transformer.queuedTransforms.length>0&&(transformer.typeStack=[],transformer.pathOp=fluid.model.makePathStack(transformer,"path"),fluid.model.transform.expandWildcards(transformer,source)),fluid.model.fireSortedChanges(transformer.queuedChanges,transformer.finalApplier),transformer.target.model},$.extend(fluid.model.transformWithRules,fluid.model.transform),fluid.model.transform=fluid.model.transformWithRules,fluid.transformOne=function(rules){return{transformOptions:{transformer:"fluid.model.transformWithRules",config:rules}}},fluid.transformMany=function(rules){return{transformOptions:{transformer:"fluid.model.transform.sequence",config:rules}}},fluid.registerNamespace("fluid.model.transform"),fluid.registerNamespace("fluid.transforms"),fluid.defaults("fluid.transforms.value",{gradeNames:"fluid.standardTransformFunction",invertConfiguration:"fluid.identity"}),fluid.transforms.value=fluid.identity,fluid.transforms.identity=fluid.transforms.value,fluid.defaults("fluid.transforms.identity",{gradeNames:"fluid.transforms.value"}),fluid.transforms.invertToIdentity=function(transformSpec){return transformSpec.type="fluid.transforms.identity",transformSpec},fluid.defaults("fluid.transforms.literalValue",{gradeNames:"fluid.standardOutputTransformFunction"}),fluid.transforms.literalValue=function(transformSpec){return transformSpec.input},fluid.defaults("fluid.transforms.stringToNumber",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.stringToNumber.invert"}),fluid.transforms.stringToNumber=function(value){var newValue=Number(value);return isNaN(newValue)?void 0:newValue},fluid.transforms.stringToNumber.invert=function(transformSpec){return transformSpec.type="fluid.transforms.numberToString",transformSpec},fluid.defaults("fluid.transforms.numberToString",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.numberToString.invert"}),fluid.transforms.numberToString=function(value,transformSpec){if("number"==typeof value)return"number"!=typeof transformSpec.scale||isNaN(transformSpec.scale)?value.toString():fluid.roundToDecimal(value,transformSpec.scale,transformSpec.method).toString()},fluid.transforms.numberToString.invert=function(transformSpec){return transformSpec.type="fluid.transforms.stringToNumber",transformSpec},fluid.defaults("fluid.transforms.count",{gradeNames:"fluid.standardTransformFunction"}),fluid.transforms.count=function(value){return fluid.makeArray(value).length},fluid.defaults("fluid.transforms.round",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.invertToIdentity"}),fluid.transforms.round=function(value,transformSpec){return fluid.roundToDecimal(value,transformSpec.scale,transformSpec.method)},fluid.defaults("fluid.transforms.delete",{gradeNames:"fluid.transformFunction"}),fluid.transforms.delete=function(transformSpec,transformer){var outputPath=fluid.model.composePaths(transformer.outputPrefix,transformSpec.outputPath);transformer.applier.change(outputPath,null,"DELETE")},fluid.defaults("fluid.transforms.firstValue",{gradeNames:"fluid.standardOutputTransformFunction"}),fluid.transforms.firstValue=function(transformSpec,transformer){transformSpec.values&&transformSpec.values.length||fluid.fail('firstValue transformer requires an array of values at path named "values", supplied',transformSpec);for(var i=0;i<transformSpec.values.length;i++){var value=transformSpec.values[i],expanded=transformer.expand(value);if(void 0!==expanded)return expanded}},fluid.defaults("fluid.transforms.linearScale",{gradeNames:["fluid.multiInputTransformFunction","fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.linearScale.invert",inputVariables:{factor:1,offset:0}}),fluid.transforms.linearScale=function(input,extraInputs){var factor=extraInputs.factor(),offset=extraInputs.offset();if("number"==typeof input&&"number"==typeof factor&&"number"==typeof offset)return input*factor+offset},fluid.transforms.linearScale.invert=function(transformSpec){return delete transformSpec.factorPath,delete transformSpec.offsetPath,void 0!==transformSpec.factor&&(transformSpec.factor=0===transformSpec.factor?0:1/transformSpec.factor),void 0!==transformSpec.offset&&(transformSpec.offset=-transformSpec.offset*(void 0!==transformSpec.factor?transformSpec.factor:1)),transformSpec},fluid.defaults("fluid.transforms.binaryOp",{gradeNames:["fluid.multiInputTransformFunction","fluid.standardOutputTransformFunction"],inputVariables:{left:null,right:null}}),fluid.transforms.binaryLookup={"===":function(a,b){return fluid.model.isSameValue(a,b)},"!==":function(a,b){return!fluid.model.isSameValue(a,b)},"<=":function(a,b){return a<=b},"<":function(a,b){return a<b},">=":function(a,b){return a>=b},">":function(a,b){return a>b},"+":function(a,b){return a+b},"-":function(a,b){return a-b},"*":function(a,b){return a*b},"/":function(a,b){return a/b},"%":function(a,b){return a%b},"&&":function(a,b){return a&&b},"||":function(a,b){return a||b}},fluid.transforms.binaryOp=function(inputs,transformSpec,transformer){var left=inputs.left(),right=inputs.right(),operator=fluid.model.transform.getValue(void 0,transformSpec.operator,transformer),fun=fluid.transforms.binaryLookup[operator];return void 0===fun||void 0===left||void 0===right?void 0:fun(left,right)},fluid.defaults("fluid.transforms.condition",{gradeNames:["fluid.multiInputTransformFunction","fluid.standardOutputTransformFunction"],inputVariables:{true:null,false:null,condition:null}}),fluid.transforms.condition=function(inputs){var condition=inputs.condition();if(null!==condition)return inputs[condition?"true":"false"]()},fluid.defaults("fluid.transforms.valueMapper",{gradeNames:["fluid.lens"],invertConfiguration:"fluid.transforms.valueMapper.invert",collectInputPaths:"fluid.transforms.valueMapper.collect"}),fluid.model.transform.compareMatches=function(speca,specb){var matchDiff=specb.matchValue-speca.matchValue;return 0===matchDiff?speca.index-specb.index:matchDiff},fluid.transforms.valueMapper=function(transformSpec,transformer){transformSpec.match||fluid.fail('valueMapper requires an array or hash of matches at path named "match", supplied ',transformSpec);var value=fluid.model.transform.getValue(transformSpec.defaultInputPath,transformSpec.defaultInput,transformer),matchedEntry=fluid.isArrayable(transformSpec.match)?fluid.transforms.valueMapper.longFormMatch(value,transformSpec,transformer):transformSpec.match[value];if(void 0===matchedEntry&&(matchedEntry=transformSpec.noMatch),void 0!==matchedEntry){var outputValue,outputPath=void 0===matchedEntry.outputPath?transformSpec.defaultOutputPath:matchedEntry.outputPath;return transformer.outputPrefixOp.push(outputPath),outputValue=fluid.isPrimitive(matchedEntry)?matchedEntry:matchedEntry.outputUndefinedValue?void 0:void 0===(outputValue=fluid.model.transform.resolveParam(matchedEntry,transformer,"outputValue",void 0))?transformSpec.defaultOutputValue:outputValue,"string"==typeof outputPath&&void 0!==outputValue&&(fluid.model.transform.setValue(void 0,outputValue,transformer,transformSpec.merge),outputValue=void 0),transformer.outputPrefixOp.pop(),outputValue}},fluid.transforms.valueMapper.longFormMatch=function(valueFromDefaultPath,transformSpec,transformer){var o=transformSpec.match;0===o.length&&fluid.fail("valueMapper supplied empty list of matches: ",transformSpec);for(var matchPower=[],i=0;i<o.length;++i){var option=o[i],value=option.inputPath?fluid.model.transform.getValue(option.inputPath,void 0,transformer):valueFromDefaultPath,matchValue=fluid.model.transform.matchValue(option.inputValue,value,option.partialMatches);matchPower[i]={index:i,matchValue:matchValue}}return matchPower.sort(fluid.model.transform.compareMatches),matchPower[0].matchValue<=0?void 0:o[matchPower[0].index]},fluid.transforms.valueMapper.invert=function(transformSpec,transformer){var match=[],togo={type:"fluid.transforms.valueMapper",match:match},isArray=fluid.isArrayable(transformSpec.match);togo.defaultInputPath=fluid.model.composePaths(transformer.outputPrefix,transformSpec.defaultOutputPath),togo.defaultOutputPath=fluid.model.composePaths(transformer.inputPrefix,transformSpec.defaultInputPath);var def=fluid.firstDefined;return fluid.each(transformSpec.match,(function(option,key){if(!0!==option.outputUndefinedValue){var outOption={},origInputValue=def(isArray?option.inputValue:key,transformSpec.defaultInputValue);void 0===origInputValue&&fluid.fail("Failure inverting configuration for valueMapper - inputValue could not be resolved for record "+key+": ",transformSpec),outOption.outputValue=origInputValue,outOption.inputValue=!isArray&&fluid.isPrimitive(option)?option:def(option.outputValue,transformSpec.defaultOutputValue),option.outputPath&&(outOption.inputPath=fluid.model.composePaths(transformer.outputPrefix,def(option.outputPath,transformSpec.outputPath))),option.inputPath&&(outOption.outputPath=fluid.model.composePaths(transformer.inputPrefix,def(option.inputPath,transformSpec.inputPath))),match.push(outOption)}})),togo},fluid.transforms.valueMapper.collect=function(transformSpec,transformer){var togo=[];return fluid.model.transform.accumulateStandardInputPath("defaultInput",transformSpec,transformer,togo),fluid.each(transformSpec.match,(function(option){fluid.model.transform.accumulateInputPath(option.inputPath,transformer,togo)})),togo},fluid.defaults("fluid.transforms.arrayToSetMembership",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.arrayToSetMembership.invert"}),fluid.transforms.arrayToSetMembership=function(value,transformSpec){value&&fluid.isArrayable(value)||fluid.fail("arrayToSetMembership didn't find array at inputPath nor passed as value.");var output=(transformSpec=transformSpec||{}).arrayValue?[]:{},presentValue=void 0===transformSpec.presentValue||transformSpec.presentValue,missingValue=void 0!==transformSpec.missingValue&&transformSpec.missingValue,options=transformSpec.options;return void 0===options?fluid.each(value,(function(outPath){output[outPath]=presentValue})):fluid.each(options,(function(outPath,key){var outVal=-1!==value.indexOf(key)?presentValue:missingValue;output[outPath]=outVal})),output},fluid.transforms.arrayToSetMembership.invert=function(transformSpec){return fluid.transforms.arrayToSetMembership.invertWithType(transformSpec,"fluid.transforms.setMembershipToArray")},fluid.transforms.arrayToSetMembership.invertWithType=function(transformSpec,newType){transformSpec.type=newType;var newOptions={};return fluid.each(transformSpec.options,(function(path,oldKey){newOptions[path]=oldKey})),$.isEmptyObject(newOptions)||(transformSpec.options=newOptions),transformSpec},fluid.defaults("fluid.transforms.setMembershipToArray",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.setMembershipToArray.invert"}),fluid.transforms.setMembershipToArray=function(input,transformSpec){fluid.isPlainObject(input)||fluid.fail("setMembershipToArray didn't find object at inputPath nor passed as value.");var outputArr=[],presentValue=void 0===(transformSpec=transformSpec||{}).presentValue||transformSpec.presentValue,options=transformSpec.options;return void 0===options?fluid.each(input,(function(keyValue,outputVal){keyValue===presentValue&&outputArr.push(outputVal)})):fluid.each(options,(function(outputVal,key){input[key]===presentValue&&outputArr.push(outputVal)})),outputArr},fluid.transforms.setMembershipToArray.invert=function(transformSpec){return fluid.transforms.arrayToSetMembership.invertWithType(transformSpec,"fluid.transforms.arrayToSetMembership")},fluid.model.transform.applyPaths=function(operation,pathOp,paths){for(var i=0;i<paths.length;++i)"push"===operation?pathOp.push(paths[i]):pathOp.pop()},fluid.model.transform.expandInnerValues=function(inputPath,outputPath,transformer,innerValues){var inputPrefixOp=transformer.inputPrefixOp,outputPrefixOp=transformer.outputPrefixOp,apply=fluid.model.transform.applyPaths;apply("push",inputPrefixOp,inputPath),apply("push",outputPrefixOp,outputPath);var expanded={};return fluid.each(innerValues,(function(innerValue){var expandedInner=transformer.expand(innerValue);fluid.isPrimitive(expandedInner)?expanded=expandedInner:$.extend(!0,expanded,expandedInner)})),apply("pop",outputPrefixOp,outputPath),apply("pop",inputPrefixOp,inputPath),expanded},fluid.defaults("fluid.transforms.indexArrayByKey",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.indexArrayByKey.invert"}),fluid.transforms.indexArrayByKey=function(arr,transformSpec,transformer){void 0===transformSpec.key&&fluid.fail("indexArrayByKey requires a 'key' option.",transformSpec),fluid.isArrayable(arr)||fluid.fail("indexArrayByKey didn't find array at inputPath.",transformSpec);var newHash={},pivot=transformSpec.key;return fluid.each(arr,(function(v,k){var newKey=v[pivot],keyType=typeof newKey;"string"!==keyType&&"boolean"!==keyType&&"number"!==keyType&&fluid.fail("indexArrayByKey encountered untransformable array due to missing or invalid key",v);var content=fluid.copy(v);delete content[pivot],transformSpec.innerValue&&(content=fluid.model.transform.expandInnerValues([transformer.inputPrefix,transformSpec.inputPath,k.toString()],[transformSpec.outputPath,newKey],transformer,transformSpec.innerValue)),newHash[newKey]=content})),newHash},fluid.transforms.indexArrayByKey.invert=function(transformSpec){if(transformSpec.type="fluid.transforms.deindexIntoArrayByKey",transformSpec.innerValue)for(var innerValue=transformSpec.innerValue,i=0;i<innerValue.length;++i){var inverted=fluid.model.transform.invertConfiguration(innerValue[i]);if(inverted===fluid.model.transform.uninvertibleTransform)return inverted;innerValue[i]=inverted}return transformSpec},fluid.defaults("fluid.transforms.deindexIntoArrayByKey",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.deindexIntoArrayByKey.invert"}),fluid.transforms.deindexIntoArrayByKey=function(hash,transformSpec,transformer){void 0===transformSpec.key&&fluid.fail('deindexIntoArrayByKey requires a "key" option.',transformSpec);var newArray=[],pivot=transformSpec.key;return fluid.each(hash,(function(v,k){var content={};content[pivot]=k,transformSpec.innerValue&&(v=fluid.model.transform.expandInnerValues([transformSpec.inputPath,k],[transformSpec.outputPath,newArray.length.toString()],transformer,transformSpec.innerValue)),$.extend(!0,content,v),newArray.push(content)})),newArray},fluid.transforms.deindexIntoArrayByKey.invert=function(transformSpec){if(transformSpec.type="fluid.transforms.indexArrayByKey",transformSpec.innerValue)for(var innerValue=transformSpec.innerValue,i=0;i<innerValue.length;++i)innerValue[i]=fluid.model.transform.invertConfiguration(innerValue[i]);return transformSpec},fluid.defaults("fluid.transforms.limitRange",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.invertToIdentity"}),fluid.transforms.limitRange=function(value,transformSpec){var min=transformSpec.min;void 0!==min&&(value<(min+=transformSpec.excludeMin||0)&&(value=min));var max=transformSpec.max;void 0!==max&&(value>(max-=transformSpec.excludeMax||0)&&(value=max));return value},fluid.defaults("fluid.transforms.indexOf",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.indexOf.invert"}),fluid.transforms.indexOf=function(value,transformSpec){"number"==typeof transformSpec.notFound&&transformSpec.notFound>=0&&fluid.fail("A positive number is not allowed as 'notFound' value for indexOf");var offset=fluid.transforms.parseIndexationOffset(transformSpec.offset,"indexOf"),originalIndex=fluid.makeArray(transformSpec.array).indexOf(value);return-1===originalIndex&&transformSpec.notFound?transformSpec.notFound:originalIndex+offset},fluid.transforms.indexOf.invert=function(transformSpec,transformer){var togo=fluid.transforms.invertArrayIndexation(transformSpec,transformer);return togo.type="fluid.transforms.dereference",togo},fluid.defaults("fluid.transforms.dereference",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.dereference.invert"}),fluid.transforms.dereference=function(value,transformSpec){if("number"==typeof value){var offset=fluid.transforms.parseIndexationOffset(transformSpec.offset,"dereference");return fluid.makeArray(transformSpec.array)[value+offset]}},fluid.transforms.dereference.invert=function(transformSpec,transformer){var togo=fluid.transforms.invertArrayIndexation(transformSpec,transformer);return togo.type="fluid.transforms.indexOf",togo},fluid.transforms.parseIndexationOffset=function(offset,transformName){var parsedOffset=0;return void 0!==offset&&(parsedOffset=fluid.parseInteger(offset),isNaN(parsedOffset)&&fluid.fail(transformName+' requires the value of "offset" to be an integer or a string that can be converted to an integer. '+offset+" is invalid.")),parsedOffset},fluid.transforms.invertArrayIndexation=function(transformSpec){return isNaN(Number(transformSpec.offset))||(transformSpec.offset=-1*Number(transformSpec.offset)),transformSpec},fluid.defaults("fluid.transforms.stringTemplate",{gradeNames:"fluid.standardOutputTransformFunction"}),fluid.transforms.stringTemplate=function(transformSpec){return fluid.stringTemplate(transformSpec.template,transformSpec.terms)},fluid.defaults("fluid.transforms.free",{gradeNames:"fluid.transformFunction"}),fluid.transforms.free=function(transformSpec){var args=fluid.makeArray(transformSpec.args);return transformSpec.func||fluid.fail("Error in transform specification ",transformSpec,' required member "func" was not set'),fluid.event.invokeListener(transformSpec.func,args)},fluid.defaults("fluid.transforms.quantize",{gradeNames:"fluid.standardTransformFunction",collectInputPaths:"fluid.transforms.quantize.collect"}),fluid.transforms.quantize=function(value,transformSpec,transformer){transformSpec.ranges&&transformSpec.ranges.length||fluid.fail("fluid.transforms.quantize should have a key called ranges containing an array defining ranges to quantize");for(var i=0;i<transformSpec.ranges.length;i++){var rangeSpec=transformSpec.ranges[i];if(value<=rangeSpec.upperBound||void 0===rangeSpec.upperBound&&value>=Number.NEGATIVE_INFINITY)return fluid.isPrimitive(rangeSpec.output)?rangeSpec.output:transformer.expand(rangeSpec.output)}},fluid.transforms.quantize.collect=function(transformSpec,transformer){transformSpec.ranges.forEach((function(rangeSpec){fluid.isPrimitive(rangeSpec.output)||transformer.expand(rangeSpec.output)}))},fluid.defaults("fluid.transforms.inRange",{gradeNames:"fluid.standardTransformFunction"}),fluid.transforms.inRange=function(value,transformSpec){return(void 0===transformSpec.min||transformSpec.min<=value)&&(void 0===transformSpec.max||transformSpec.max>=value)},fluid.defaults("fluid.transforms.toggle",{gradeNames:["fluid.standardTransformFunction"],invertConfiguration:"fluid.transforms.toggle.invert",relayOptions:{forward:{excludeSource:"init"},backward:{includeSource:"init"}}}),fluid.transforms.toggle=function(source,transformSpec,transformer){var oldSource=transformer.oldSource,oldTarget=transformer.oldTarget,phase=(oldSource||0)-fluid.transforms.inverseToggle.base(oldTarget);return fluid.transforms.toggle.base(source+phase)},fluid.transforms.toggle.base=function(source){return(source||0)%2==1},fluid.transforms.toggle.invert=function(transformSpec){return transformSpec.type="fluid.transforms.inverseToggle",transformSpec},fluid.defaults("fluid.transforms.inverseToggle",{gradeNames:["fluid.standardTransformFunction"]}),fluid.transforms.inverseToggle=function(source,transformSpec,transformer){return transformer.originalTarget||void 0},fluid.transforms.inverseToggle.base=function(source){return source?1:0},fluid.transforms.parseClasses=function(classes){var classList=classes.match(fluid.transforms.parseClasses.rnothtmlwhite)||[];return fluid.arrayToHash(classList)},fluid.transforms.parseClasses.rnothtmlwhite=/[^\x20\t\r\n\f]+/g,fluid.transforms.stringToBoolean=function(value){return!!value&&!("0"===value||"false"===value)},fluid.transforms.stringToBoolean.invert=function(transformSpec){return transformSpec.type="fluid.transforms.booleanToString",transformSpec},fluid.defaults("fluid.transforms.stringToBoolean",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.stringToBoolean.invert"}),fluid.transforms.booleanToString=function(value){return value?"true":"false"},fluid.transforms.booleanToString.invert=function(transformSpec){return transformSpec.type="fluid.transforms.stringToBoolean",transformSpec},fluid.defaults("fluid.transforms.booleanToString",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.booleanToString.invert"}),fluid.transforms.JSONstringToObject=function(value){try{return JSON.parse(value)}catch(e){return}},fluid.transforms.JSONstringToObject.invert=function(transformSpec){return transformSpec.type="fluid.transforms.objectToJSONString",transformSpec},fluid.defaults("fluid.transforms.JSONstringToObject",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.JSONstringToObject.invert"}),fluid.transforms.objectToJSONString=function(value,transformSpec){var space=transformSpec.space||0;return JSON.stringify(value,null,space)},fluid.transforms.objectToJSONString.invert=function(transformSpec){return transformSpec.type="fluid.transforms.JSONstringToObject",transformSpec},fluid.defaults("fluid.transforms.objectToJSONString",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.objectToJSONString.invert"}),fluid.transforms.stringToDate=function(value){var date=new Date(value);return isNaN(date.getTime())?void 0:date},fluid.transforms.stringToDate.invert=function(transformSpec){return transformSpec.type="fluid.transforms.dateToString",transformSpec},fluid.defaults("fluid.transforms.stringToDate",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.stringToDate.invert"}),fluid.transforms.dateToString=function(value){if(value instanceof Date){var isoString=value.toISOString();return isoString.substring(0,isoString.indexOf("T"))}},fluid.transforms.dateToString.invert=function(transformSpec){return transformSpec.type="fluid.transforms.stringToDate",transformSpec},fluid.defaults("fluid.transforms.dateToString",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.dateToString.invert"}),fluid.transforms.dateTimeToString=function(value){return value instanceof Date?value.toISOString():void 0},fluid.defaults("fluid.transforms.dateTimeToString",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.dateToString.invert"}),fluid.registerNamespace("fluid.contextAware"),fluid.defaults("fluid.contextAware.marker",{gradeNames:["fluid.component"]}),fluid.contextAware.makeCheckMarkers=function(checks,path,instantiator){fluid.each(checks,(function(value,markerTypeName){fluid.constructSingle(path,{type:markerTypeName,gradeNames:"fluid.contextAware.marker",value:value},instantiator)}))},fluid.contextAware.performChecks=function(checkHash){return fluid.transform(checkHash,(function(checkRecord){return"function"==typeof checkRecord?checkRecord={func:checkRecord}:"string"==typeof checkRecord&&(checkRecord={funcName:checkRecord}),fluid.isPrimitive(checkRecord)?checkRecord:"value"in checkRecord?checkRecord.value:"func"in checkRecord?checkRecord.func():"funcName"in checkRecord?fluid.invokeGlobalFunction(checkRecord.funcName):void fluid.fail("Error in contextAwareness check record ",checkRecord," - must contain an entry with name value, func, or funcName")}))},fluid.contextAware.makeChecks=function(checkHash,path,instantiator){var checkOptions=fluid.contextAware.performChecks(checkHash);fluid.contextAware.makeCheckMarkers(checkOptions,path,instantiator)},fluid.contextAware.forgetChecks=function(markerNames,path,instantiator){instantiator=instantiator||fluid.globalInstantiator,path=path||[];var markerArray=fluid.makeArray(markerNames);fluid.each(markerArray,(function(markerName){var memberName=fluid.typeNameToMemberName(markerName),segs=fluid.model.parseToSegments(path,instantiator.parseEL,!0);segs.push(memberName),fluid.destroy(segs,instantiator)}))},fluid.defaults("fluid.contextAware",{mergePolicy:{contextAwareness:"noexpand"},contextAwareness:{}}),fluid.contextAware.getCheckValue=function(that,reference){var targetRef=fluid.parseContextReference(reference),targetComponent=fluid.resolveContext(targetRef.context,that),path=targetRef.path||(fluid.isComponent(targetComponent)&&fluid.componentHasGrade(targetComponent,"fluid.contextAware.marker")?["options","value"]:[]);return fluid.getForComponent(targetComponent,path)},fluid.contextAware.checkOne=function(that,contextAwareRecord){contextAwareRecord.checks&&contextAwareRecord.checks.contextValue&&fluid.fail("Nesting error in contextAwareness record ",contextAwareRecord,' - the "checks" entry must contain a hash and not a contextValue/gradeNames record at top level');var checkList=fluid.parsePriorityRecords(contextAwareRecord.checks,"contextAwareness checkRecord");return fluid.find(checkList,(function(check){check.contextValue||fluid.fail("Cannot perform check for contextAwareness record ",check,' without a valid field named "contextValue"');var value=fluid.contextAware.getCheckValue(that,check.contextValue);if(void 0===check.equals?value:value===check.equals)return check.gradeNames}),contextAwareRecord.defaultGradeNames)},fluid.contextAware.check=function(that,contextAwarenessOptions){var gradeNames=[],contextAwareList=fluid.parsePriorityRecords(contextAwarenessOptions,"contextAwareness adaptationRecord");return fluid.each(contextAwareList,(function(record){var matched=fluid.contextAware.checkOne(that,record);gradeNames=gradeNames.concat(fluid.makeArray(matched))})),gradeNames},fluid.contextAware.makeAdaptation=function(options){fluid.expect("fluid.contextAware.makeAdaptation",options,["distributionName","targetName","adaptationName","checkName","record"]),fluid.defaults(options.distributionName,{gradeNames:["fluid.component"],distributeOptions:{target:"{/ "+options.targetName+"}.options.contextAwareness."+options.adaptationName+".checks."+options.checkName,record:options.record}}),fluid.constructSingle([],options.distributionName)},fluid.contextAware.isBrowser=function(){return"undefined"!=typeof window&&!!window.document},fluid.contextAware.isNode=function(){return"undefined"!=typeof process&&process.versions&&process.versions.node},fluid.contextAware.makeChecks({"fluid.browser":{funcName:"fluid.contextAware.isBrowser"},"fluid.node":{funcName:"fluid.contextAware.isNode"}}),fluid.registerNamespace("fluid.contextAware.browser"),fluid.contextAware.browser.getPlatformName=function(){return"undefined"!=typeof navigator&&navigator.platform?navigator.platform:void 0},fluid.contextAware.browser.getUserAgent=function(){return"undefined"!=typeof navigator&&navigator.userAgent?navigator.userAgent:void 0},fluid.contextAware.makeChecks({"fluid.browser.platformName":{funcName:"fluid.contextAware.browser.getPlatformName"},"fluid.browser.userAgent":{funcName:"fluid.contextAware.browser.getUserAgent"}}),fluid.contextAware.isBrowser()&&$.fn&&$("head").append("<style type='text/css'>.fl-progEnhance-basic, .fl-ProgEnhance-basic { display: none; } .fl-progEnhance-enhanced, .fl-ProgEnhance-enhanced { display: block; }</style>"),fluid.apply=function(options){return options.func.apply(null,options.args)},fluid.defaults("fluid.baseViewComponent",{gradeNames:"fluid.component",argumentMap:{container:0,options:1},events:{onDomBind:"promise"},listeners:{"onCreate.onDomBind":"{that}.events.onDomBind"},selectors:{},members:{dom:"@expand:fluid.createDomBinder({that}.container, {that}.options.selectors)",locate:"{that}.dom.locate"},mergePolicy:{"members.dom":"replace","members.container":"replace"}}),fluid.defaults("fluid.viewComponent",{gradeNames:["fluid.modelComponent","fluid.baseViewComponent"],members:{container:"@expand:fluid.containerForViewComponent({that}, {that}.options.container)"}}),fluid.dumpSelector=function(selectable){return"string"==typeof selectable?selectable:selectable.selector?selectable.selector:""},fluid.checkTryCatchParameter=function(){var GETparams=(window.location||{search:"",protocol:"file:"}).search.slice(1).split("&");return!0===fluid.find(GETparams,(function(param){if(0===param.indexOf("notrycatch"))return!0}))},fluid.notrycatch=fluid.checkTryCatchParameter(),fluid.wrap=function(obj,userJQuery){return userJQuery=userJQuery||$,!obj||obj.jquery?obj:userJQuery(obj)},fluid.unwrap=function(obj){return obj&&obj.jquery?obj[0]:obj},fluid.container=function(containerSpec,fallible,userJQuery){containerSpec||fluid.fail("fluid.container argument is empty");var selector=containerSpec.selector||containerSpec;userJQuery&&(containerSpec=fluid.unwrap(containerSpec));var container=fluid.wrap(containerSpec,userJQuery);if(fallible&&(!container||0===container.length))return null;if(!container||!container.jquery||1!==container.length){"string"!=typeof containerSpec&&(containerSpec=container.selector);var count=void 0!==container.length?container.length:0,extraMessage=container.selectorName?" with selector name "+container.selectorName+" in context "+fluid.dumpEl(containerSpec.context):"";fluid.fail((count>1?"More than one ("+count+") container elements were":"No container element was")+" found for selector "+containerSpec+extraMessage)}return fluid.isDOMNode(container[0])||fluid.fail("fluid.container was supplied a non-jQueryable element"),container.selector=selector,container.context=container.context||containerSpec.ownerDocument||document,container},fluid.createDomBinder=function(container,selectors){var userJQuery=container.constructor,that={container:container,id:fluid.allocateGuid(),doQuery:function(selector){return userJQuery(selector,that.container)},cache:{},locate:function(selectorName){var togo,selector="container"===selectorName?"":selectors[selectorName];return void 0===selector&&fluid.fail("DOM binder request for selector "+selectorName+" which is not registered"),(togo=""===selector?that.container:that.doQuery(selector,selectorName)).selector=selector,togo.context=that.container,togo.selectorName=selectorName,that.cache[selectorName]=togo,togo},fastLocate:function(selectorName){return that.cache[selectorName]||that.locate(selectorName)},resetContainer:function(container){that.container=container,that.clear()},clear:function(){that.cache={}}};return that.resolvePathSegment=that.locate,that},fluid.createLocalContainerDomBinder=function(container,selectors){var that={container:container,id:fluid.allocateGuid(),cache:{}},userJQuery=container.constructor;function cacheKey(name,thisContainer){return fluid.allocateSimpleId(thisContainer)+"-"+name}return that.locate=function(name,localContainer){var selector,thisContainer,togo;return void 0===(selector=selectors[name])&&("container"===name?selector="":fluid.fail("DOM binder request for selector "+name+" which is not registered")),(thisContainer=localContainer||that.container)||fluid.fail("DOM binder invoked for selector "+name+" without container"),(togo=""===selector?userJQuery(thisContainer):"function"==typeof selector?userJQuery(selector.call(null,fluid.unwrap(thisContainer))):userJQuery(selector,thisContainer)).selector||(togo.selector=selector,togo.context=thisContainer),togo.selectorName=name,function(name,thisContainer,result){that.cache[cacheKey(name,thisContainer)]=result}(name,thisContainer,togo),togo},that.fastLocate=function(name,localContainer){var key=cacheKey(name,localContainer||that.container),togo=that.cache[key];return togo||that.locate(name,localContainer)},that.resetContainer=function(container){that.container=container,that.clear()},that.clear=function(){that.cache={}},that.refresh=function(names,localContainer){var thisContainer=localContainer||that.container;"string"==typeof names&&(names=[names]),void 0===thisContainer.length&&(thisContainer=[thisContainer]);for(var i=0;i<names.length;++i)for(var j=0;j<thisContainer.length;++j)that.locate(names[i],thisContainer[j])},that.resolvePathSegment=that.locate,that},fluid.expectFilledSelector=function(result,message){result&&0===result.length&&result.jquery&&fluid.fail(message+': selector "'+result.selector+'" with name '+result.selectorName+" returned no results in context "+fluid.dumpEl(result.context))},fluid.containerForViewComponent=function(that,containerSpec){var container=fluid.container(containerSpec);return fluid.expectFilledSelector(container,'Error instantiating viewComponent at path "'+fluid.pathForComponent(that)),container},fluid.getId=function(element){return fluid.unwrap(element).id},fluid.allocateSimpleId=function(element){if(!(element=fluid.unwrap(element))||fluid.isPrimitive(element))return null;if(!element.id){var simpleId="fluid-id-"+fluid.allocateGuid();element.id=simpleId}return element.id},fluid.registerNamespace("fluid.materialisers"),fluid.makeDomMaterialiserManager=function(){return{idToModelListeners:{}}},fluid.checkMaterialisedElement=function(element,selectorName,that){element&&element.length||fluid.fail("Could not locate element for selector "+selectorName+" for component "+fluid.dumpComponentAndPath(that))},fluid.domMaterialiserManager=fluid.makeDomMaterialiserManager(),fluid.materialisers.domOutput=function(that,segs,type,options){fluid.freezeRecursive(segs);var selectorName=segs[1],listener=function(value){if(that.dom){var element=that.dom.locate(selectorName);if(fluid.checkMaterialisedElement(element,selectorName,that),"jQuery"===type){var model={value:value,segs:segs},args=options.makeArgs?options.makeArgs(model):[model.value];element[options.method].apply(element,args)}else if("booleanAttr"===type)if(void 0===value){var markupValue=!!element.attr(options.attr);that.applier.change(segs,options.negate?!markupValue:markupValue)}else{(options.negate?!value:value)?element.attr(options.attr,options.attr):element.removeAttr(options.attr)}}};that.applier.modelChanged.addListener({segs:segs},listener),that.events.onDomBind.addListener((function(){var modelValue=fluid.getImmediate(that.model,segs);listener(modelValue)}))},fluid.incrementModel=function(that,segs){var oldValue=fluid.getImmediate(that.model,segs)||0;that.applier.change(segs,oldValue+1)},fluid.materialisers.domClick=function(that,segs){var listener=function(){fluid.incrementModel(that,segs)};that.events.onDomBind.addListener((function(){that.dom.locate(segs[1]).click(listener)}))},fluid.materialisers.hover=function(that,segs){var makeListener=function(state){return function(){that.applier.change(segs,state)}};that.events.onDomBind.addListener((function(){that.dom.locate(segs[1]).hover(makeListener(!0),makeListener(!1))}))},fluid.materialisers.focusin=function(that,segs){var makeListener=function(state){return function(){that.applier.change(segs,state)}};that.events.onDomBind.addListener((function(){that.dom.locate(segs[1]).focusin(makeListener(!0)).focusout(makeListener(!1))}))},fluid.materialisers.id=function(that,segs){that.events.onDomBind.addListener((function(){var element=that.dom.locate(segs[1])[0],modelValue=fluid.getImmediate(that.model,segs);if(void 0===modelValue){var id=fluid.allocateSimpleId(element);that.applier.change(segs,id,"ADD","DOM")}else element.id=modelValue;that.applier.modelChanged.addListener({segs:segs},(function(value){void 0!==value&&(element.id=value)}))}))},fluid.materialisers.domValue=function(that,segs){that.events.onDomBind.addListener((function(){var element=that.dom.locate(segs[1]),modelListener=function(value){void 0!==value&&fluid.value(element,value)};that.applier.modelChanged.addListener({segs:segs},modelListener);var options=fluid.getImmediate(that,["options","bindingOptions",fluid.model.composeSegments.apply(null,segs)]),changeEvent=options&&options.changeEvent||"change";element.on(changeEvent,(function(){var val=fluid.value(element);that.applier.change(segs,val,"ADD","DOM")})),modelListener(fluid.getImmediate(that.model,segs))}))},fluid.materialisers.style=function(that,segs){var selectorName=segs[1];that.events.onDomBind.addListener((function(){var element=that.dom.locate(selectorName);fluid.checkMaterialisedElement(element,selectorName,that);var modelValue=fluid.getImmediate(that.model,segs);element[0].style[segs[3]]=modelValue}))},fluid.registerNamespace("fluid.materialiserRegistry"),fluid.materialiserRegistry["fluid.viewComponent"]={dom:{"*":{text:{materialiser:"fluid.materialisers.domOutput",args:["jQuery",{method:"text"}]},attr:{materialiser:"fluid.materialisers.domOutput",args:["jQuery",{method:"attr",makeArgs:function(model){return[model.segs[3],model.value]}}]},visible:{materialiser:"fluid.materialisers.domOutput",args:["jQuery",{method:"toggle"}]},enabled:{materialiser:"fluid.materialisers.domOutput",args:["booleanAttr",{attr:"disabled",negate:!0}]},click:{materialiser:"fluid.materialisers.domClick"},hover:{materialiser:"fluid.materialisers.hover"},focusin:{materialiser:"fluid.materialisers.focusin"},value:{materialiser:"fluid.materialisers.domValue"},class:{materialiser:"fluid.materialisers.domOutput",args:["jQuery",{method:"toggleClass",makeArgs:function(model){return[model.segs[3],!!model.value]}}]},style:{materialiser:"fluid.materialisers.style"},id:{materialiser:"fluid.materialisers.id"}}}},fluid.value=function(nodeIn,newValue){var node=fluid.unwrap(nodeIn),isMultiple=!1;if(void 0===node.nodeType&&node.length>1&&(node=node[0],isMultiple=!0),"input"!==node.nodeName.toLowerCase()||!/radio|checkbox/.test(node.type))return void 0===newValue?$(node).val():$(node).val(newValue);var elements,name=node.name;if(isMultiple||""===name)elements=nodeIn;else{elements=node.ownerDocument.getElementsByName(name);var scope=fluid.findForm(node);isMultiple=(elements=$.grep(elements,(function(element){return element.name===name&&(!scope||scope.contains(element))}))).length>1}if(void 0===newValue){var checked=$.map(elements,(function(element){return element.checked?element.value:null}));return"radio"===node.type?checked[0]:isMultiple?checked:!!checked[0]}"boolean"==typeof newValue&&(newValue=newValue?"true":"false"),$.each(elements,(function(){this.checked=newValue instanceof Array?-1!==newValue.indexOf(this.value):newValue===this.value}))},fluid.defaults("fluid.ariaLabeller",{gradeNames:"fluid.viewComponent"}),fluid.changeElementValue=function(node,value){node=$(node),fluid.value(node,value),node.change()},fluid.findAncestor=function(element,test){for(element=fluid.unwrap(element);element;){if(test(element))return element;element=element.parentNode}},fluid.findForm=function(node){return fluid.findAncestor(node,(function(element){return"form"===element.nodeName.toLowerCase()}))},fluid.each(["text","html"],(function(method){fluid[method]=function(node,newValue){return node=$(node),void 0===newValue?node[method]():node[method](newValue)}})),fluid.BINDING_ROOT_KEY="fluid-binding-root",fluid.findData=function(elem,name){for(;elem;){var data=$.data(elem,name);if(data)return data;elem=elem.parentNode}},fluid.bindFossils=function(node,data,fossils){$.data(node,fluid.BINDING_ROOT_KEY,{data:data,fossils:fossils})},fluid.boundPathForNode=function(node,fossils){var record=fossils[(node=fluid.unwrap(node)).name||node.id];return record?record.EL:null},fluid.applyBoundChange=function(node,newValue,applier){node=fluid.unwrap(node),void 0===newValue&&(newValue=fluid.value(node)),void 0===node.nodeType&&node.length>0&&(node=node[0]);var root=fluid.findData(node,fluid.BINDING_ROOT_KEY);root||fluid.fail("Bound data could not be discovered in any node above "+fluid.dumpEl(node));var name=node.name;root.fossils[name]||fluid.fail("No fossil discovered for name "+name+" in fossil record above "+fluid.dumpEl(node));var EL=root.fossils[name].EL;applier?applier.fireChangeRequest({path:EL,value:newValue,source:"DOM:"+node.id}):fluid.set(root.data,EL,newValue)},fluid.jById=function(id,dokkument){dokkument=dokkument&&9===dokkument.nodeType?dokkument:document;var element=fluid.byId(id,dokkument),togo=element?$(element):[];return togo.selector="#"+id,togo.context=dokkument,togo},fluid.byId=function(id,dokkument){var el=(dokkument=dokkument&&9===dokkument.nodeType?dokkument:document).getElementById(id);return el?(el.id!==id&&fluid.fail("Problem in document structure - picked up element "+fluid.dumpEl(el)+" for id "+id+" without this id - most likely the element has a name which conflicts with this id"),el):null},fluid.getDocument=function(element){var node=fluid.unwrap(element);return 9===node.nodeType?node:node.ownerDocument},fluid.defaults("fluid.ariaLabeller",{gradeNames:["fluid.viewComponent"],labelAttribute:"aria-label",liveRegionMarkup:'<div class="liveRegion fl-hidden-accessible" aria-live="polite"></div>',liveRegionId:"fluid-ariaLabeller-liveRegion",invokers:{generateLiveElement:{funcName:"fluid.ariaLabeller.generateLiveElement",args:"{that}"},update:{funcName:"fluid.ariaLabeller.update",args:["{that}","{arguments}.0"]}},listeners:{onCreate:{func:"{that}.update",args:[null]}}}),fluid.ariaLabeller.update=function(that,newOptions){if(newOptions=newOptions||that.options,that.container.attr(that.options.labelAttribute,newOptions.text),newOptions.dynamicLabel){var live=fluid.jById(that.options.liveRegionId);0===live.length&&(live=that.generateLiveElement()),live.text(newOptions.text)}},fluid.ariaLabeller.generateLiveElement=function(that){var liveEl=$(that.options.liveRegionMarkup);return liveEl.prop("id",that.options.liveRegionId),$("body").append(liveEl),liveEl};var LABEL_KEY="aria-labelling";fluid.getAriaLabeller=function(element){return element=$(element),fluid.getScopedData(element,LABEL_KEY)},fluid.updateAriaLabel=function(element,text,options){options=$.extend({},options||{},{text:text});var that=fluid.getAriaLabeller(element);return that?that.update(options):(that=fluid.ariaLabeller(element,options),fluid.setScopedData(element,LABEL_KEY,that)),that},fluid.dismissList={},$(document).click((function(event){for(var target=fluid.resolveEventTarget(event);target;){if(fluid.dismissList[target.id])return;target=target.parentNode}fluid.each(fluid.dismissList,(function(dismissFunc,key){dismissFunc(event),delete fluid.dismissList[key]}))})),fluid.globalDismissal=function(nodes,dismissFunc){fluid.each(nodes,(function(node){var id=fluid.unwrap(node).ownerDocument===document?fluid.allocateSimpleId(node):fluid.allocateGuid();dismissFunc?fluid.dismissList[id]=dismissFunc:delete fluid.dismissList[id]}))},fluid.deadMansBlur=function(control,options){var that={options:$.extend(!0,{},fluid.defaults("fluid.deadMansBlur"),options),blurPending:!1,lastCancel:0,canceller:function(event){fluid.log("Cancellation through "+event.type+" on "+fluid.dumpEl(event.target)),that.lastCancel=Date.now(),that.blurPending=!1},noteProceeded:function(){fluid.globalDismissal(that.options.exclusions)},reArm:function(){fluid.globalDismissal(that.options.exclusions,that.proceed)},addExclusion:function(exclusions){fluid.globalDismissal(exclusions,that.proceed)},proceed:function(event){fluid.log("Direct proceed through "+event.type+" on "+fluid.dumpEl(event.target)),that.blurPending=!1,that.options.handler(control)}};return fluid.each(that.options.exclusions,(function(exclusion){exclusion=$(exclusion),fluid.each(exclusion,(function(excludeEl){$(excludeEl).on("focusin",that.canceller).on("fluid-focus",that.canceller).click(that.canceller).mousedown(that.canceller)}))})),that.options.cancelByDefault?that.reArm():$(control).on("focusout",(function(event){fluid.log("Starting blur timer for element "+fluid.dumpEl(event.target));var now=Date.now();fluid.log("back delay: "+(now-that.lastCancel)),now-that.lastCancel>that.options.backDelay&&(that.blurPending=!0),setTimeout((function(){that.blurPending&&that.options.handler(control)}),that.options.delay)})),that},fluid.defaults("fluid.deadMansBlur",{gradeNames:"fluid.function",delay:150,backDelay:100}),fluid.defaults("fluid.newViewComponent",{gradeNames:"fluid.viewComponent",listeners:{"onCreate.onDomBind":null}}),fluid.defaults("fluid.containerRenderingView",{gradeNames:["fluid.newViewComponent"],members:{container:"@expand:{that}.renderContainer()"},parentContainer:"{that}.options.container",injectionType:"append",invokers:{renderMarkup:"fluid.identity({that}.options.markup.container)",renderContainer:"fluid.containerRenderingView.renderContainer({that}, {that}.renderMarkup, {that}.addToParent)",addToParent:{funcName:"fluid.containerRenderingView.addToParent",args:["{that}.options.parentContainer","{arguments}.0","{that}.options.injectionType"]}},workflows:{global:{evaluateContainers:{funcName:"fluid.renderer.evaluateContainers",priority:"last",waitIO:!0}}},listeners:{"onDestroy.clearInjectedMarkup":{this:"{that}.container",method:"remove",args:[]}}}),fluid.registerNamespace("fluid.renderer"),fluid.defaults("fluid.templateResourceFetcher",{gradeNames:"fluid.resourceLoader",rendererTemplateResources:{template:!0},skipTemplateFetch:!1,workflows:{global:{fetchTemplates:{funcName:"fluid.renderer.fetchTemplates",priority:"after:resolveResourceModel"}}}}),fluid.renderer.fetchTemplates=function(shadows){shadows.forEach((function(shadow){var that=shadow.that;if(fluid.componentHasGrade(that,"fluid.templateResourceFetcher")&&!fluid.getForComponent(that,["options","skipTemplateFetch"])){var rendererTemplateResources=fluid.getForComponent(that,["options","rendererTemplateResources"]);fluid.each(rendererTemplateResources,(function(value,key){value&&fluid.getForComponent(that,["resources",key])}))}}))},fluid.containerRenderingView.addToParent=function(parentContainer,elm,method){parentContainer||fluid.fail('fluid.containerRenderingView needs to have "parentContainer" or "container" option supplied'),method=method||"append",$(parentContainer)[method](elm)},fluid.renderer.evaluateContainers=function(shadows){shadows.forEach((function(shadow){fluid.getForComponent(shadow.that,"container")})),shadows.forEach((function(shadow){shadow.that.events.onDomBind.fire(shadow.that)}))},fluid.containerRenderingView.renderContainer=function(that,renderMarkup,addToParent){fluid.log("Rendering container for "+that.id);var containerMarkup=renderMarkup(),container=$(containerMarkup);return addToParent(container),container},fluid.defaults("fluid.templateRenderingView",{gradeNames:["fluid.containerRenderingView","fluid.templateResourceFetcher"],invokers:{renderMarkup:"fluid.identity({that}.resources.template.parsed)"},distributeOptions:{mapTemplateUrl:{source:"{that}.options.templateUrl",target:"{that}.options.resources.template.url"}}}),fluid.defaults("fluid.dataSource.encoding.JSON",{gradeNames:"fluid.component",invokers:{parse:"fluid.dataSource.parseJSON",render:"fluid.dataSource.stringifyJSON"},contentType:"application/json"}),fluid.defaults("fluid.dataSource.encoding.none",{gradeNames:"fluid.component",invokers:{parse:"fluid.identity",render:"fluid.identity"},contentType:"text/plain"}),fluid.dataSource.parseJSON=function(string){var togo=fluid.promise();if(string)try{togo.resolve(JSON.parse(string))}catch(err){togo.reject(err)}else togo.resolve(void 0);return togo},fluid.dataSource.stringifyJSON=function(obj){return void 0===obj?"":JSON.stringify(obj,null,4)},fluid.defaults("fluid.dataSource",{gradeNames:["fluid.component","fluid.contextAware"],contextAwareness:{writable:{checks:{writableValue:{contextValue:"{fluid.dataSource}.options.writable",gradeNames:"{fluid.dataSource}.options.writableGrade"}}}},writable:!1,events:{onRead:null,onError:null},components:{encoding:{type:"fluid.dataSource.encoding.JSON"}},listeners:{"onRead.impl":{func:"fluid.notImplemented",priority:"first"},"onRead.encoding":{func:"{encoding}.parse",priority:"after:impl"}},invokers:{get:{funcName:"fluid.dataSource.get",args:["{that}","{arguments}.0","{arguments}.1"]}}}),fluid.defaults("fluid.dataSource.writable",{gradeNames:["fluid.component"],events:{onWrite:null,onWriteResponse:null},listeners:{"onWrite.encoding":{func:"{encoding}.render"},"onWrite.impl":{func:"fluid.notImplemented",priority:"after:encoding"},"onWriteResponse.encoding":{func:"{encoding}.parse"}},invokers:{set:{funcName:"fluid.dataSource.set",args:["{that}","{arguments}.0","{arguments}.1","{arguments}.2"]}}}),fluid.dataSource.registerStandardPromiseHandlers=function(that,promise,requestOptions){promise.then(requestOptions.callback,requestOptions.onError?requestOptions.onError:that.events.onError.fire)},fluid.dataSource.defaultiseOptions=function(componentOptions,directOptions,directModel,isSet){var options="function"==typeof directOptions?{callback:directOptions}:fluid.copy(directOptions)||{};return options.directModel=directModel,options.operation=isSet?"set":"get",options.notFoundIsEmpty=options.notFoundIsEmpty||componentOptions.notFoundIsEmpty,options},fluid.dataSource.get=function(that,directModel,directOptions){var requestOptions=fluid.dataSource.defaultiseOptions(that.options,directOptions,directModel),promise=fluid.promise.fireTransformEvent(that.events.onRead,void 0,requestOptions);return fluid.dataSource.registerStandardPromiseHandlers(that,promise,requestOptions),promise},fluid.dataSource.set=function(that,directModel,model,directOptions){var requestOptions=fluid.dataSource.defaultiseOptions(that.options,directOptions,directModel,!0),transformPromise=fluid.promise.fireTransformEvent(that.events.onWrite,model,requestOptions),togo=fluid.promise();return transformPromise.then((function(setResponse){var options2=fluid.dataSource.defaultiseOptions(that.options,fluid.copy(requestOptions),directModel),retransformed=fluid.promise.fireTransformEvent(that.events.onWriteResponse,setResponse,options2);fluid.promise.follow(retransformed,togo)}),(function(error){togo.reject(error)})),fluid.dataSource.registerStandardPromiseHandlers(that,togo,requestOptions),togo},fluid.defaults("fluid.dataSource.URL",{gradeNames:["fluid.dataSource"],writableGrade:"fluid.dataSource.URL.writable",invokers:{resolveUrl:"fluid.dataSource.URL.resolveUrl",handleHttp:"fluid.dataSource.URL.handleHttp"},listeners:{"onRead.impl":{funcName:"fluid.dataSource.URL.handle",args:["{that}","{that}.options.permittedRequestOptions","{arguments}.0","{arguments}.1"]}},permittedRequestOptions:"fluid.dataSource.URL.requestOptions",components:{cookieJar:"{cookieJar}"},termMap:{}}),fluid.defaults("fluid.dataSource.URL.writable",{gradeNames:["fluid.dataSource.writable"],listeners:{"onWrite.impl":{funcName:"fluid.dataSource.URL.handle",args:["{that}","{that}.options.permittedRequestOptions","{arguments}.0","{arguments}.1"]}}}),fluid.dataSource.URL.resolveUrl=function(url,termMap,directModel,noencode){var map=fluid.transform(termMap,(function(entry){entry=String(entry);var encode=!noencode;0===entry.indexOf("noencode:")&&(encode=!1,entry=entry.substring("noencode:".length));var value="%"===entry.charAt(0)?fluid.get(directModel,entry.substring(1)):entry;return encode&&(value=encodeURIComponent(value)),value}));return fluid.stringTemplate(url,map)},fluid.dataSource.URL.urlFields=fluid.freezeRecursive(["protocol","username","password","hostname","port","pathname","search"]),fluid.dataSource.URL.condenseUrl=function(requestOptions){var togo=new fluid.resourceLoader.UrlClass("http://localhost/");return fluid.dataSource.URL.urlFields.forEach((function(field){requestOptions[field]&&(togo[field]=requestOptions[field])})),togo},fluid.dataSource.URL.requestOptions=fluid.dataSource.URL.urlFields.concat(["url","method","headers","termMap"]),fluid.dataSource.URL.prepareRequestOptions=function(componentOptions,cookieJar,userOptions,permittedOptions,directModel,userStaticOptions){var staticOptions=fluid.filterKeys(componentOptions,permittedOptions),requestOptions=fluid.extend(!0,{headers:{}},userStaticOptions,staticOptions,userOptions);return fluid.contextAware.isNode()&&"localhost"===requestOptions.hostname&&(requestOptions.hostname="127.0.0.1"),requestOptions.writeMethod=requestOptions.writeMethod||componentOptions.writeMethod||"PUT",requestOptions.pathname=fluid.dataSource.URL.resolveUrl(requestOptions.pathname,requestOptions.termMap,directModel),cookieJar&&cookieJar.cookie&&componentOptions.storeCookies&&(requestOptions.headers.Cookie=cookieJar.cookie),requestOptions},fluid.dataSource.URL.parse=function(url,permittedOptions){var parsed=fluid.filterKeys(new fluid.resourceLoader.UrlClass(url,"undefined"!=typeof window&&window.location||void 0),fluid.dataSource.URL.urlFields);return permittedOptions.forEach((function(oneOption){parsed[oneOption]||delete parsed[oneOption]})),parsed},fluid.dataSource.URL.isErrorStatus=function(statusCode){return statusCode<200||statusCode>=300},fluid.dataSource.URL.handle=function(that,permittedRequestOptions,model,userOptions){var permittedOptions=fluid.getGlobalValue(permittedRequestOptions);permittedOptions.forEach((function(oneOption){fluid.getForComponent(that,["options",oneOption])}));var directModel=userOptions.directModel,url=that.resolveUrl(that.options.url,that.options.termMap,directModel),parsed=fluid.dataSource.URL.parse(url,permittedOptions),finalRequestOptions=fluid.dataSource.URL.prepareRequestOptions(that.options,that.cookieJar,userOptions,permittedOptions,directModel,parsed);return that.handleHttp(that,finalRequestOptions,model)},fluid.extractHtmlError=function(received){var matches=/<pre>(.*)<\/pre>/gm.exec(received);return matches?matches[1]:received},fluid.dataSource.URL.relayError=function(statusCode,received,whileMsg){var rejectPayload;try{rejectPayload=JSON.parse(received)}catch(e){rejectPayload={message:"string"==typeof received&&-1!==received.indexOf("<html")?fluid.extractHtmlError(received):received}}return rejectPayload.message=rejectPayload.message||rejectPayload.error,delete rejectPayload.error,rejectPayload.isError=!0,rejectPayload.statusCode=statusCode,fluid.upgradeError(rejectPayload,whileMsg)},fluid.explodeLocalisedName=function(fileName,locale,defaultLocale){var lastDot=fileName.lastIndexOf(".");-1!==lastDot&&0!==lastDot||(lastDot=fileName.length);var baseName=fileName.substring(0,lastDot),extension=fileName.substring(lastDot),segs=locale.split("_"),exploded=fluid.transform(segs,(function(seg,index){var shortSegs=segs.slice(0,index+1);return baseName+"_"+shortSegs.join("_")+extension}));return defaultLocale&&exploded.unshift(baseName+"_"+defaultLocale+extension),exploded.unshift(fileName),exploded},fluid.fetchResources=function(resourceSpecs,callback,options){var that=fluid.makeResourceFetcher(resourceSpecs,callback,options,fluid.identity);return that.optionsReady.resolve(),that.fetchAll(),that},fluid.fetchResources.explodeForLocales=function(resourceFetcher){fluid.each(resourceFetcher.resourceSpecs,(function(resourceSpec){if(!resourceSpec.launched&&(resourceFetcher.options.defaultLocale&&void 0===resourceSpec.defaultLocale&&(resourceSpec.defaultLocale=resourceFetcher.options.defaultLocale),void 0===resourceSpec.locale&&(resourceSpec.locale=resourceFetcher.options.locale||resourceSpec.defaultLocale),resourceSpec.dataType=resourceSpec.dataType||resourceFetcher.options.dataType,resourceSpec.loader=fluid.resourceLoader.resolveResourceLoader(resourceSpec),!resourceSpec.loader.loader.noPath)){var pathKey=resourceSpec.loader.pathKey,path=resourceSpec[pathKey],resolvedPath=resourceSpec[pathKey]=resourceFetcher.transformResourceURL(path);resourceSpec.locale&&(resourceSpec.localeExploded=fluid.explodeLocalisedName(resolvedPath,resourceSpec.locale,resourceSpec.defaultLocale),resourceSpec.localeExplodedSpecs=fluid.transform(resourceSpec.localeExploded,(function(oneExploded){var togo={loader:resourceSpec.loader};return togo[pathKey]=oneExploded,togo}),fluid.fetchResources.prepareRequestOptions))}}))},fluid.fetchResources.launchExplodedLocales=function(localeExplodedSpecs,loader){var promiseArray=fluid.transform(localeExplodedSpecs,loader,(function(promise){var promiseToGo=fluid.promise();return promise.then((function(resolve){promiseToGo.resolve({resolved:resolve})}),(function(error){promiseToGo.resolve({rejected:error})})),promiseToGo}));return fluid.promise.sequence(promiseArray)},fluid.fetchResources.condenseExplodedLocales=function(resourceSpec,settledArray){var togo=fluid.promise();settledArray.reverse();var lastNonError=fluid.find(settledArray,(function(settled){return settled.resolved}));return lastNonError?togo.resolve(lastNonError):togo.reject({isError:!0,message:"No localised variants of the resource could be found at any of the paths "+resourceSpec.localeExploded.join(", ")}),togo},fluid.fetchResources.resolveLoaderTask=function(resourceSpec,loader){return resourceSpec.localeExplodedSpecs?function(){var togo=fluid.promise();return fluid.fetchResources.launchExplodedLocales(resourceSpec.localeExplodedSpecs,loader).then((function(settledArray){var condensed=fluid.fetchResources.condenseExplodedLocales(resourceSpec,settledArray);fluid.promise.follow(condensed,togo)})),togo}:function(){return loader(resourceSpec)}},fluid.fetchResources.checkCompletion=function(resourceSpecs,resourceFetcher){if(!fluid.find_if(resourceSpecs,(function(resourceSpec){return!resourceSpec.promise.disposition}))){var completionPromise=resourceFetcher.completionPromise;fluid.invokeLater((function(){completionPromise.disposition||completionPromise.resolve(resourceSpecs)}))}},fluid.fetchResources.noteResourceText=function(resourceText,options){return options.resourceSpec.resourceText=resourceText,resourceText},fluid.fetchResources.noteParsed=function(parsed,options){return options.resourceSpec.parsed=parsed,parsed},fluid.fetchResources.fireFetched=function(parsed,options){return options.resourceSpec.onFetched.fire(parsed),parsed},fluid.fetchResources.prepareRequestOptions=function(resourceSpec){var pathKey=resourceSpec.loader.pathKey,requestOptions={};return requestOptions[pathKey]=resourceSpec[pathKey],resourceSpec.options=$.extend(!0,{},resourceSpec.options,requestOptions),resourceSpec},fluid.fetchResources.initOneResource=function(resourceSpec){resourceSpec.promise=fluid.promise(),resourceSpec.launched=!1},fluid.fetchResources.subscribeOneResource=function(resourceSpec,key,ownerComponentId){resourceSpec.transformEvent&&fluid.fail("Cannot subscribe resource ",resourceSpec," which has already been subscribed for I/O"),resourceSpec.key=key,resourceSpec.transformEvent=fluid.makeEventFirer({name:'Transform chain for resource "'+key+'"',ownerId:ownerComponentId}),resourceSpec.transformEvent.addListener(fluid.fetchResources.noteParsed,"noteParsed","last");var parser=fluid.resourceLoader.resolveResourceParser(resourceSpec);resourceSpec.transformEvent.addListener(parser,"parser","before:noteParsed"),resourceSpec.transformEvent.addListener((function(parsed){return fluid.resourceLoader.renderImmutable(parsed,resourceSpec)}),"renderImmutable","after:parser"),resourceSpec.transformEvent.addListener(fluid.fetchResources.noteResourceText,"resourceText","before:parser"),resourceSpec.transformEvent.addListener(fluid.fetchResources.resolveLoaderTask(resourceSpec,resourceSpec.loader.loader),"loader","before:resourceText"),resourceSpec.onFetched=fluid.makeEventFirer({name:'onFetched event for resources "'+key+'"',ownerId:ownerComponentId}),resourceSpec.onError=fluid.makeEventFirer({name:'onError event for resources "'+key+'"',ownerId:ownerComponentId}),resourceSpec.transformEvent.addListener(fluid.fetchResources.fireFetched,"fireFetched","last"),fluid.fetchResources.prepareRequestOptions(resourceSpec),fluid.fetchResources.initOneResource(resourceSpec)},fluid.fetchResources.FetchOne=function(resourceSpec,resourceFetcher,segs){var FetchOne=this;FetchOne.resourceFetcher=resourceFetcher,FetchOne.resourceSpec=resourceSpec,FetchOne.segs=segs||[];var thisPromise=FetchOne.promise=fluid.promise();fluid.fetchResources.fetchOneResource(resourceSpec,resourceFetcher).then((function(){thisPromise.resolve(fluid.fetchResources.resolveFetchOne(FetchOne))}))},fluid.fetchResources.resolveFetchOne=function(FetchOne){return fluid.getImmediate(FetchOne.resourceSpec,FetchOne.segs)},fluid.fetchResources.FetchOne.prototype.resolvePathSegment=function(seg){return new fluid.fetchResources.FetchOne(this.resourceSpec,this.resourceFetcher,this.segs.concat(fluid.makeArray(seg)))},fluid.initResourceFetcher=function(resourceFetcher){resourceFetcher.completionPromise=fluid.promise(),fluid.fetchResources.explodeForLocales(resourceFetcher),resourceFetcher.onInit.fire(resourceFetcher.completionPromise)},fluid.resourceFetcher=function(){},fluid.makeResourceFetcher=function(sourceResourceSpecs,callback,options,transformResourceURL){options=options||{};var that=Object.create(fluid.resourceFetcher.prototype);return fluid.extend(that,{sourceResourceSpecs:sourceResourceSpecs,options:fluid.copy(options),optionsReady:fluid.promise(),onInit:fluid.makeEventFirer({name:"onInit for resourceFetcher",ownerId:options.ownerComponentId}),transformResourceURL:transformResourceURL}),that.fetchAll=function(){return fluid.fetchResources.fetchAll(that)},that.refetchAll=function(){return fluid.fetchResources.refetchAll(that)},that.fetchOneResource=function(key){return fluid.fetchResources.fetchOneResource(that.resourceSpecs[key],that)},that.refetchOneResource=function(key){return fluid.fetchResources.refetchOneResource(that.resourceSpecs[key],that)},that.resourceSpecs=fluid.copy(that.sourceResourceSpecs),that.onInit.addListener((function(completionPromise){completionPromise.then(callback,callback)})),fluid.each(options.onInitListeners,(function(args){that.onInit.addListener.apply(null,args)})),fluid.initResourceFetcher(that),fluid.each(that.resourceSpecs,(function(resourceSpec,key){fluid.fetchResources.subscribeOneResource(resourceSpec,key,that.options.ownerComponentId)})),that},fluid.fetchResources.fetchAll=function(resourceFetcher){return fluid.each(resourceFetcher.resourceSpecs,(function(resourceSpec){fluid.fetchResources.fetchOneResource(resourceSpec,resourceFetcher)})),fluid.fetchResources.checkCompletion(resourceFetcher.resourceSpecs,resourceFetcher),resourceFetcher.completionPromise},fluid.fetchResources.mutableResourceSpecFields=["promise","resourceText","parsed","locale","defaultLocale"],fluid.fetchResources.refetchOneResource=function(resourceSpec,resourceFetcher,defeatInitiate){return resourceSpec.promise.cancel(),fluid.fetchResources.mutableResourceSpecFields.forEach((function(field){delete resourceSpec[field]})),fluid.fetchResources.initOneResource(resourceSpec),defeatInitiate||fluid.fetchResources.initiateRefetch(resourceFetcher),resourceSpec.promise},fluid.fetchResources.initiateRefetch=function(resourceFetcher){resourceFetcher.completionPromise.cancel(),delete resourceFetcher.completionPromise,fluid.initResourceFetcher(resourceFetcher),fluid.fetchResources.fetchAll(resourceFetcher),resourceFetcher.fetchAll()},fluid.fetchResources.refetchAll=function(resourceFetcher,withoutLocales){var anyLaunched=!1;return fluid.each(resourceFetcher.resourceSpecs,(function(resourceSpec){(resourceSpec.locale||withoutLocales)&&(anyLaunched=!0,fluid.fetchResources.refetchOneResource(resourceSpec,resourceFetcher,!0))})),anyLaunched&&fluid.fetchResources.initiateRefetch(resourceFetcher),resourceFetcher.completionPromise},fluid.fetchResources.fireTransformEvent=function(resourceSpec,resourceFetcher){return fluid.promise.fireTransformEvent(resourceSpec.transformEvent,null,{resourceSpec:resourceSpec,resourceFetcher:resourceFetcher})},fluid.fetchResources.fetchOneResource=function(resourceSpec,resourceFetcher){return resourceSpec.launched||(resourceSpec.launched=!0,resourceFetcher.optionsReady.then((function(){var transformPromise=fluid.fetchResources.fireTransformEvent(resourceSpec,resourceFetcher);fluid.promise.follow(transformPromise,resourceSpec.promise),resourceSpec.promise.then((function(){fluid.fetchResources.checkCompletion(resourceFetcher.resourceSpecs,resourceFetcher)}),(function(error){resourceSpec.fetchError=error,resourceSpec.onError.fire(error),resourceFetcher.completionPromise.reject(error)}))}))),resourceSpec.promise},fluid.registerNamespace("fluid.resourceLoader.loaders"),fluid.resourceLoader.modelUpdated=function(resourceFetcher,modelOptions,early){resourceFetcher.options=$.extend(!0,{},resourceFetcher.options,modelOptions),early?resourceFetcher.optionsReady.resolve():resourceFetcher.refetchAll()},fluid.resourceLoader.sanitizeResourceSpec=function(resourceSpec){return fluid.transform(resourceSpec,(function(value){return fluid.isPrimitive(value)||fluid.isPlainObject(value)&&!fluid.isPromise(value)?value:fluid.NO_VALUE}))},fluid.ImmutableArray=function(){},fluid.ImmutableArray.prototype=[],fluid.ImmutableObject=function(){},fluid.copyImmutableResource=function(tocopy){var newContainer=fluid.isArrayable(tocopy)?new fluid.ImmutableArray:new fluid.ImmutableObject;return fluid.each(tocopy,(function(value,key){newContainer[key]=value})),newContainer},fluid.resourceLoader.renderImmutable=function(parsed,resourceSpec){return resourceSpec.immutableModelResource?fluid.copyImmutableResource(parsed):parsed},fluid.resourceLoader.resolveResourceLoader=function(resourceSpec){var loaders=[];return fluid.each(fluid.resourceLoader.loaders,(function(loader,key){fluid.isValue(resourceSpec[key])&&loaders.push({loader:loader,pathKey:key})})),0===loaders.length?loaders.push({loader:fluid.resourceLoader.loaders.noLoader}):loaders.length>1&&fluid.fail("Resource spec ",fluid.resourceLoader.sanitizeResourceSpec(resourceSpec)," is ambiguous because it has fields for multiple resource loaders filled out: at most one of the fields ",fluid.getMembers(loaders,"pathKey")," can be used"),loaders[0]},fluid.resourceLoader.loaders.resourceText=function(resourceSpec){return resourceSpec.resourceText},fluid.resourceLoader.loaders.resourceText.noPath=!0,fluid.resourceLoader.loaders.promiseFunc=function(resourceSpec){return fluid.event.resolveListener(resourceSpec.promiseFunc).apply(null,fluid.makeArray(resourceSpec.promiseArgs))},fluid.resourceLoader.loaders.promiseFunc.noPath=!0,fluid.resourceLoader.loaders.dataSource=function(resourceSpec){return fluid.getForComponent(resourceSpec.dataSource,"get"),resourceSpec.dataSource.get(resourceSpec.directModel,resourceSpec.options)},fluid.resourceLoader.loaders.dataSource.noPath=!0,fluid.resourceLoader.loaders.dataSource.parsed=!0,fluid.resourceLoader.loaders.noLoader=function(resourceSpec){return fluid.promise().resolve({noResource:!0,message:["No resource was configured for resource spec ",fluid.resourceLoader.sanitizeResourceSpec(resourceSpec),"; since it had none of the fields fields ",Object.keys(fluid.resourceLoader.loaders)+" filled out"]})},fluid.resourceLoader.loaders.noLoader.noPath=!0,fluid.resourceLoader.loaders.noLoader.parsed=!0,fluid.registerNamespace("fluid.resourceLoader.parsers"),fluid.resourceLoader.resolveResourceParser=function(resourceSpec){return!resourceSpec.loader.loader.parsed&&fluid.resourceLoader.parsers[resourceSpec.dataType]||fluid.identity},fluid.resourceLoader.parsers.json=function(resourceText){return fluid.dataSource.parseJSON(resourceText)},fluid.resourcesMergePolicy=function(target,source){return target=target||{},fluid.each(source,(function(oneResource,name){if(oneResource){fluid.isPrimitive(oneResource)&&(oneResource={url:oneResource});var oneR=target[name];for(var key in oneR||(oneR=target[name]={}),fluid.resourceLoader.loaders)if(key in oneResource)for(var key2 in fluid.resourceLoader.loaders)delete oneR[key2];$.extend(oneR,oneResource)}else target[name]=oneResource})),target},fluid.defaults("fluid.resourceLoader",{gradeNames:["fluid.modelComponent"],listeners:{"onCreate.loadResources":"{that}.resourceFetcher.fetchAll","onDestroy.destroyResourceEvents":"fluid.resourceLoader.destroyResourceEvents({that}.resourceFetcher)","{that}.resourceFetcher.onInit":{namespace:"resourceLoaderCompletion",funcName:"fluid.resourceLoader.subscribeCompletion",args:["{arguments}.0","{that}"]},"{that}.applier.earlyModelResolved":{funcName:"fluid.resourceLoader.modelUpdated",args:["{that}.resourceFetcher","{arguments}.0.resourceLoader",!0]}},modelListeners:{resourceLoader:{namespace:"resourceLoader",funcName:"fluid.resourceLoader.modelUpdated",excludeSource:"init",args:["{that}.resourceFetcher","{change}.value"]}},mergePolicy:{resources:fluid.resourcesMergePolicy},members:{resourceFetcher:{expander:{funcName:"fluid.resourceLoader.makeResourceFetcher",args:["{that}","{that}.options.resources","{that}.options.resourceOptions","{that}.transformResourceURL"]}}},resourceOptions:{terms:{}},resources:{},invokers:{transformResourceURL:{funcName:"fluid.stringTemplate",args:["{arguments}.0","{that}.options.resourceOptions.terms"]}},events:{onResourcesLoaded:null,onResourceError:null}}),fluid.resourceLoader.makeResourceFetcher=function(that,resourceSpecs,userResourceOptions,transformResourceURL){var resourceOptions=$.extend({ownerComponentId:that.id,ownerComponentPath:fluid.pathForComponent(that),onInitListeners:[[function(completionPromise){fluid.resourceLoader.subscribeCompletion(completionPromise,that)},"resourceLoaderCompletion"]]},userResourceOptions),fetcher=fluid.makeResourceFetcher(resourceSpecs,null,resourceOptions,transformResourceURL);return fluid.each(fetcher.resourceSpecs,(function(resourceSpec,key){resourceSpec.transformEvent.addListener((function(parsed){return that.resources[key]=resourceSpec,parsed}),"noteComponentResource","after:parsed"),resourceSpec.onError.addListener(that.events.onResourceError.fire)})),fetcher},fluid.resourceLoader.subscribeCompletion=function(completionPromise,resourceLoader){var fire=function(){resourceLoader.events.onResourcesLoaded.fire(resourceLoader.resourceFetcher.resourceSpecs)};completionPromise.then((function(){"constructed"===resourceLoader.lifecycleStatus||"treeConstructed"===resourceLoader.lifecycleStatus?fire():"destroyed"!==resourceLoader.lifecycleStatus&&resourceLoader.events.onCreate.addListener(fire,"fireOnResourcesLoaded")}),(function(error){fluid.log("Failure loading resources for component at path "+fluid.dumpComponentPath(resourceLoader)+": ",error)}))},fluid.resourceLoader.destroyResourceEvents=function(resourceFetcher){fluid.each(resourceFetcher.resourceSpecs,(function(resourceSpec){resourceSpec.transformEvent.destroy(),resourceSpec.onFetched.destroy()}))},fluid.resourceLoader.UrlClass=URL,fluid.resourceLoader.configureXHR=function(xhr,options){fluid.resourceLoader.loaders.XHR.copyProps.forEach((function(prop){fluid.isValue(options[prop])&&(xhr[prop]=options[prop])})),fluid.each(options.headers,(function(value,key){fluid.makeArray(value).forEach((function(oneValue){xhr.setRequestHeader(key,oneValue)}))}))},fluid.resourceLoader.loaders.XHR=function(resourceSpec){var togo=fluid.promise(),xhr=resourceSpec.xhr=new XMLHttpRequest;togo.then(null,null,(function(){xhr.abort()}));var sendError=function(){fluid.invokeLater((function(){togo.reject({isError:!0,status:xhr.status,textStatus:xhr.statusText})}))};xhr.addEventListener("load",(function(){fluid.dataSource.URL.isErrorStatus(xhr.status)?sendError():fluid.invokeLater((function(){var response=xhr.responseType&&"text"!==xhr.responseType?xhr.response:xhr.responseText;togo.resolve(response)}))})),xhr.addEventListener("error",sendError);var options=$.extend({async:!0},resourceSpec.options);return xhr.open(options.method||"GET",resourceSpec.url,options.async,options.username,options.password),fluid.resourceLoader.configureXHR(xhr,options),xhr.send(),togo},fluid.resourceLoader.loaders.XHR.copyProps=["contentType","responseType","timeout"],fluid.resourceLoader.loaders.url=fluid.resourceLoader.loaders.XHR,fluid.dataSource.URL.handleHttp=function(that,baseOptions,data){var promise=fluid.promise(),defaultOptions={method:"GET",async:!0};"set"===baseOptions.operation&&(defaultOptions.headers={"Content-Type":that.encoding.options.contentType},defaultOptions.method=baseOptions.writeMethod);var requestOptions=fluid.extend(!0,defaultOptions,baseOptions),whileMsg=" while executing HTTP "+requestOptions.method+" on url "+requestOptions.url;promise.accumulateRejectionReason=function(originError){return fluid.upgradeError(originError,whileMsg)};var xhr=promise.xhr=new XMLHttpRequest,sendError=function(){var relayed=fluid.dataSource.URL.relayError(xhr.status,xhr.statusText,whileMsg);requestOptions.notFoundIsEmpty&&404===relayed.statusCode?promise.resolve(void 0):promise.reject(relayed)};xhr.addEventListener("load",(function(){if(fluid.dataSource.URL.isErrorStatus(xhr.status))sendError();else{var response=xhr.responseType&&"text"!==xhr.responseType?xhr.response:xhr.responseText;promise.resolve(response)}})),xhr.addEventListener("error",sendError);var url=fluid.dataSource.URL.condenseUrl(requestOptions);return requestOptions.url=url,fluid.log("DataSource Issuing "+requestOptions.protocol.toUpperCase().slice(0,-1)+" request with options ",requestOptions),xhr.open(requestOptions.method||"GET",url.toString(),requestOptions.async),fluid.resourceLoader.configureXHR(xhr,requestOptions),xhr.send(data),promise},function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.accessibleAutocomplete=t():e.accessibleAutocomplete=t()}(window,(function(){return function(n){var r={};function o(e){if(r[e])return r[e].exports;var t=r[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,o),t.l=!0,t.exports}return o.m=n,o.c=r,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(t,e){if(1&e&&(t=o(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)o.d(n,r,function(e){return t[e]}.bind(null,r));return n},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="/",o(o.s=37)}([function(e,t,n){var m=n(1),v=n(6),y=n(7),g=n(16),_=n(18),b="prototype",w=function(e,t,n){var r,o,i,u,a=e&w.F,s=e&w.G,l=e&w.S,c=e&w.P,p=e&w.B,f=s?m:l?m[t]||(m[t]={}):(m[t]||{})[b],d=s?v:v[t]||(v[t]={}),h=d[b]||(d[b]={});for(r in s&&(n=t),n)i=((o=!a&&f&&void 0!==f[r])?f:n)[r],u=p&&o?_(i,m):c&&"function"==typeof i?_(Function.call,i):i,f&&g(f,r,i,e&w.U),d[r]!=i&&y(d,r,u),c&&h[r]!=i&&(h[r]=i)};m.core=v,w.F=1,w.G=2,w.S=4,w.P=8,w.B=16,w.W=32,w.U=64,w.R=128,e.exports=w},function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t,n){e.exports=!n(4)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},function(e,t){e.exports=function(e){try{return!!e()}catch(t){return!0}}},function(e,t,n){n.r(t),n.d(t,"h",(function(){return r})),n.d(t,"createElement",(function(){return r})),n.d(t,"cloneElement",(function(){return i})),n.d(t,"Component",(function(){return g})),n.d(t,"render",(function(){return _})),n.d(t,"rerender",(function(){return f})),n.d(t,"options",(function(){return E}));var s=function(){},E={},l=[],c=[];function r(e,t){var n,r,o,i,u=c;for(i=arguments.length;2<i--;)l.push(arguments[i]);for(t&&null!=t.children&&(l.length||l.push(t.children),delete t.children);l.length;)if((r=l.pop())&&void 0!==r.pop)for(i=r.length;i--;)l.push(r[i]);else"boolean"==typeof r&&(r=null),(o="function"!=typeof e)&&(null==r?r="":"number"==typeof r?r=String(r):"string"!=typeof r&&(o=!1)),o&&n?u[u.length-1]+=r:u===c?u=[r]:u.push(r),n=o;var a=new s;return a.nodeName=e,a.children=u,a.attributes=null==t?void 0:t,a.key=null==t?void 0:t.key,void 0!==E.vnode&&E.vnode(a),a}function M(e,t){for(var n in t)e[n]=t[n];return e}var o="function"==typeof Promise?Promise.resolve().then.bind(Promise.resolve()):setTimeout;function i(e,t){return r(e.nodeName,M(M({},e.attributes),t),2<arguments.length?[].slice.call(arguments,2):e.children)}var p=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,u=[];function a(e){!e._dirty&&(e._dirty=!0)&&1==u.push(e)&&(E.debounceRendering||o)(f)}function f(){var e,t=u;for(u=[];e=t.pop();)e._dirty&&V(e)}function N(e,t){return e.normalizedNodeName===t||e.nodeName.toLowerCase()===t.toLowerCase()}function I(e){var t=M({},e.attributes);t.children=e.children;var n=e.nodeName.defaultProps;if(void 0!==n)for(var r in n)void 0===t[r]&&(t[r]=n[r]);return t}function k(e){var t=e.parentNode;t&&t.removeChild(e)}function v(e,t,n,r,o){if("className"===t&&(t="class"),"key"===t);else if("ref"===t)n&&n(null),r&&r(e);else if("class"!==t||o)if("style"===t){if(r&&"string"!=typeof r&&"string"!=typeof n||(e.style.cssText=r||""),r&&"object"==typeof r){if("string"!=typeof n)for(var i in n)i in r||(e.style[i]="");for(var i in r)e.style[i]="number"==typeof r[i]&&!1===p.test(i)?r[i]+"px":r[i]}}else if("dangerouslySetInnerHTML"===t)r&&(e.innerHTML=r.__html||"");else if("o"==t[0]&&"n"==t[1]){var u=t!==(t=t.replace(/Capture$/,""));t=t.toLowerCase().substring(2),r?n||e.addEventListener(t,d,u):e.removeEventListener(t,d,u),(e._listeners||(e._listeners={}))[t]=r}else if("list"!==t&&"type"!==t&&!o&&t in e){try{e[t]=null==r?"":r}catch(s){}null!=r&&!1!==r||"spellcheck"==t||e.removeAttribute(t)}else{var a=o&&t!==(t=t.replace(/^xlink:?/,""));null==r||!1===r?a?e.removeAttributeNS("http://www.w3.org/1999/xlink",t.toLowerCase()):e.removeAttribute(t):"function"!=typeof r&&(a?e.setAttributeNS("http://www.w3.org/1999/xlink",t.toLowerCase(),r):e.setAttribute(t,r))}else e.className=r||""}function d(e){return this._listeners[e.type](E.event&&E.event(e)||e)}var A=[],P=0,j=!1,L=!1;function T(){for(var e;e=A.pop();)E.afterMount&&E.afterMount(e),e.componentDidMount&&e.componentDidMount()}function D(e,t,n,r,o){var i=e,u=j;if(null!=t&&"boolean"!=typeof t||(t=""),"string"==typeof t||"number"==typeof t)return e&&void 0!==e.splitText&&e.parentNode&&(!e._component||o)?e.nodeValue!=t&&(e.nodeValue=t):(i=document.createTextNode(t),e&&(e.parentNode&&e.parentNode.replaceChild(i,e),F(e,!0))),i.__preactattr_=!0,i;var a=t.nodeName;if("function"==typeof a)return function(e,t,n,r){for(var o=e&&e._component,i=o,u=e,a=o&&e._componentConstructor===t.nodeName,s=a,l=I(t);o&&!s&&(o=o._parentComponent);)s=o.constructor===t.nodeName;return o&&s&&(!r||o._component)?(U(o,l,3,n,r),e=o.base):(i&&!a&&(q(i),e=u=null),o=R(t.nodeName,l,n),e&&!o.nextBase&&(o.nextBase=e,u=null),U(o,l,1,n,r),e=o.base,u&&e!==u&&(u._component=null,F(u,!1))),e}(e,t,n,r);if(j="svg"===a||"foreignObject"!==a&&j,a=String(a),(!e||!N(e,a))&&(i=function(e,t){var n=t?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e);return n.normalizedNodeName=e,n}(a,j),e)){for(;e.firstChild;)i.appendChild(e.firstChild);e.parentNode&&e.parentNode.replaceChild(i,e),F(e,!0)}var s=i.firstChild,l=i.__preactattr_,c=t.children;if(null==l){l=i.__preactattr_={};for(var p=i.attributes,f=p.length;f--;)l[p[f].name]=p[f].value}return!L&&c&&1===c.length&&"string"==typeof c[0]&&null!=s&&void 0!==s.splitText&&null==s.nextSibling?s.nodeValue!=c[0]&&(s.nodeValue=c[0]):(c&&c.length||null!=s)&&function(e,t,n,r,o){var i,u,a,s,l,x,O,C,c=e.childNodes,p=[],f={},d=0,h=0,m=c.length,v=0,y=t?t.length:0;if(0!==m)for(var g=0;g<m;g++){var _=c[g],b=_.__preactattr_;null!=(w=y&&b?_._component?_._component.__key:b.key:null)?(d++,f[w]=_):(b||(void 0!==_.splitText?!o||_.nodeValue.trim():o))&&(p[v++]=_)}if(0!==y)for(g=0;g<y;g++){var w;if(l=null,null!=(w=(s=t[g]).key))d&&void 0!==f[w]&&(l=f[w],f[w]=void 0,d--);else if(h<v)for(i=h;i<v;i++)if(void 0!==p[i]&&(x=u=p[i],C=o,"string"==typeof(O=s)||"number"==typeof O?void 0!==x.splitText:"string"==typeof O.nodeName?!x._componentConstructor&&N(x,O.nodeName):C||x._componentConstructor===O.nodeName)){l=u,p[i]=void 0,i===v-1&&v--,i===h&&h++;break}l=D(l,s,n,r),a=c[g],l&&l!==e&&l!==a&&(null==a?e.appendChild(l):l===a.nextSibling?k(a):e.insertBefore(l,a))}if(d)for(var g in f)void 0!==f[g]&&F(f[g],!1);for(;h<=v;)void 0!==(l=p[v--])&&F(l,!1)}(i,c,n,r,L||null!=l.dangerouslySetInnerHTML),function(e,t,n){var r;for(r in n)t&&null!=t[r]||null==n[r]||v(e,r,n[r],n[r]=void 0,j);for(r in t)"children"===r||"innerHTML"===r||r in n&&t[r]===("value"===r||"checked"===r?e[r]:n[r])||v(e,r,n[r],n[r]=t[r],j)}(i,t.attributes,l),j=u,i}function F(e,t){var n=e._component;n?q(n):(null!=e.__preactattr_&&e.__preactattr_.ref&&e.__preactattr_.ref(null),!1!==t&&null!=e.__preactattr_||k(e),h(e))}function h(e){for(e=e.lastChild;e;){var t=e.previousSibling;F(e,!0),e=t}}var m=[];function R(e,t,n){var r,o=m.length;for(e.prototype&&e.prototype.render?(r=new e(t,n),g.call(r,t,n)):((r=new g(t,n)).constructor=e,r.render=y);o--;)if(m[o].constructor===e)return r.nextBase=m[o].nextBase,m.splice(o,1),r;return r}function y(e,t,n){return this.constructor(e,n)}function U(e,t,n,r,o){e._disable||(e._disable=!0,e.__ref=t.ref,e.__key=t.key,delete t.ref,delete t.key,void 0===e.constructor.getDerivedStateFromProps&&(!e.base||o?e.componentWillMount&&e.componentWillMount():e.componentWillReceiveProps&&e.componentWillReceiveProps(t,r)),r&&r!==e.context&&(e.prevContext||(e.prevContext=e.context),e.context=r),e.prevProps||(e.prevProps=e.props),e.props=t,e._disable=!1,0!==n&&(1!==n&&!1===E.syncComponentUpdates&&e.base?a(e):V(e,1,o)),e.__ref&&e.__ref(e))}function V(e,t,n,r){if(!e._disable){var o,i,u,a=e.props,s=e.state,l=e.context,c=e.prevProps||a,p=e.prevState||s,f=e.prevContext||l,d=e.base,h=e.nextBase,m=d||h,v=e._component,y=!1,g=f;if(e.constructor.getDerivedStateFromProps&&(s=M(M({},s),e.constructor.getDerivedStateFromProps(a,s)),e.state=s),d&&(e.props=c,e.state=p,e.context=f,2!==t&&e.shouldComponentUpdate&&!1===e.shouldComponentUpdate(a,s,l)?y=!0:e.componentWillUpdate&&e.componentWillUpdate(a,s,l),e.props=a,e.state=s,e.context=l),e.prevProps=e.prevState=e.prevContext=e.nextBase=null,e._dirty=!1,!y){o=e.render(a,s,l),e.getChildContext&&(l=M(M({},l),e.getChildContext())),d&&e.getSnapshotBeforeUpdate&&(g=e.getSnapshotBeforeUpdate(c,p));var _,b,w=o&&o.nodeName;if("function"==typeof w){var x=I(o);(i=v)&&i.constructor===w&&x.key==i.__key?U(i,x,1,l,!1):(_=i,e._component=i=R(w,x,l),i.nextBase=i.nextBase||h,i._parentComponent=e,U(i,x,0,l,!1),V(i,1,n,!0)),b=i.base}else u=m,(_=v)&&(u=e._component=null),(m||1===t)&&(u&&(u._component=null),b=function(t,n,r,o,i,u){P++||(j=null!=i&&void 0!==i.ownerSVGElement,L=null!=t&&!("__preactattr_"in t));var a=D(t,n,r,o,u);return i&&a.parentNode!==i&&i.appendChild(a),--P||(L=!1,u||T()),a}(u,o,l,n||!d,m&&m.parentNode,!0));if(m&&b!==m&&i!==v){var O=m.parentNode;O&&b!==O&&(O.replaceChild(b,m),_||(m._component=null,F(m,!1)))}if(_&&q(_),(e.base=b)&&!r){for(var C=e,S=e;S=S._parentComponent;)(C=S).base=b;b._component=C,b._componentConstructor=C.constructor}}for(!d||n?A.unshift(e):y||(e.componentDidUpdate&&e.componentDidUpdate(c,p,g),E.afterUpdate&&E.afterUpdate(e));e._renderCallbacks.length;)e._renderCallbacks.pop().call(e);P||r||T()}}function q(e){E.beforeUnmount&&E.beforeUnmount(e);var t=e.base;e._disable=!0,e.componentWillUnmount&&e.componentWillUnmount(),e.base=null;var n=e._component;n?q(n):t&&(t.__preactattr_&&t.__preactattr_.ref&&t.__preactattr_.ref(null),k(e.nextBase=t),m.push(e),h(t)),e.__ref&&e.__ref(null)}function g(e,t){this._dirty=!0,this.context=t,this.props=e,this.state=this.state||{},this._renderCallbacks=[]}function _(e,t,n){return function(e,t,n,r,o,i){P++||(j=null!=o&&void 0!==o.ownerSVGElement,L=null!=e&&!("__preactattr_"in e));var u=D(e,t,n,r,i);return o&&u.parentNode!==o&&o.appendChild(u),--P||(L=!1,i||T()),u}(n,e,{},!1,t,!1)}M(g.prototype,{setState:function(e,t){this.prevState||(this.prevState=this.state),this.state=M(M({},this.state),"function"==typeof e?e(this.state,this.props):e),t&&this._renderCallbacks.push(t),a(this)},forceUpdate:function(e){e&&this._renderCallbacks.push(e),V(this,2)},render:function(){}});var b={h:r,createElement:r,cloneElement:i,Component:g,render:_,rerender:f,options:E};t.default=b},function(e,t){var n=e.exports={version:"2.5.7"};"number"==typeof __e&&(__e=n)},function(e,t,n){var r=n(8),o=n(40);e.exports=n(3)?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){var o=n(9),i=n(38),u=n(39),a=Object.defineProperty;t.f=n(3)?Object.defineProperty:function(e,t,n){if(o(e),t=u(t,!0),o(n),i)try{return a(e,t,n)}catch(r){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){var r=n(2);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,t){var n=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+r).toString(36))}},function(e,t,n){var r=n(22);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},function(e,t){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){var r=n(4);e.exports=function(e,t){return!!e&&r((function(){t?e.call(null,(function(){}),1):e.call(null)}))}},function(e,t,n){var r=n(0);r(r.S+r.F,"Object",{assign:n(41)})},function(e,t,n){var r=n(2),o=n(1).document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},function(e,t,n){var i=n(1),u=n(7),a=n(17),s=n(10)("src"),r="toString",o=Function[r],l=(""+o).split(r);n(6).inspectSource=function(e){return o.call(e)},(e.exports=function(e,t,n,r){var o="function"==typeof n;o&&(a(n,"name")||u(n,"name",t)),e[t]!==n&&(o&&(a(n,s)||u(n,s,e[t]?""+e[t]:l.join(String(t)))),e===i?e[t]=n:r?e[t]?e[t]=n:u(e,t,n):(delete e[t],u(e,t,n)))})(Function.prototype,r,(function(){return"function"==typeof this&&this[s]||o.call(this)}))},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t,n){var i=n(19);e.exports=function(r,o,e){if(i(r),void 0===o)return r;switch(e){case 1:return function(e){return r.call(o,e)};case 2:return function(e,t){return r.call(o,e,t)};case 3:return function(e,t,n){return r.call(o,e,t,n)}}return function(){return r.apply(o,arguments)}}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t,n){var r=n(42),o=n(28);e.exports=Object.keys||function(e){return r(e,o)}},function(e,t,n){var r=n(11),o=n(12);e.exports=function(e){return r(o(e))}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var s=n(21),l=n(24),c=n(43);e.exports=function(a){return function(e,t,n){var r,o=s(e),i=l(o.length),u=c(n,i);if(a&&t!=t){for(;u<i;)if((r=o[u++])!=r)return!0}else for(;u<i;u++)if((a||u in o)&&o[u]===t)return a||u||0;return!a&&-1}}},function(e,t,n){var r=n(25),o=Math.min;e.exports=function(e){return 0<e?o(r(e),9007199254740991):0}},function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(0<e?r:n)(e)}},function(e,t,n){var r=n(27)("keys"),o=n(10);e.exports=function(e){return r[e]||(r[e]=o(e))}},function(e,t,n){var r=n(6),o=n(1),i="__core-js_shared__",u=o[i]||(o[i]={});(e.exports=function(e,t){return u[e]||(u[e]=void 0!==t?t:{})})("versions",[]).push({version:r.version,mode:n(44)?"pure":"global",copyright:"© 2018 Denis Pushkarev (zloirock.ru)"})},function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,t,n){var r=n(12);e.exports=function(e){return Object(r(e))}},function(e,t,n){var r=n(8).f,o=Function.prototype,i=/^\s*function ([^ (]*)/;"name"in o||n(3)&&r(o,"name",{configurable:!0,get:function(){try{return(""+this).match(i)[1]}catch(e){return""}}})},function(e,t,n){var r=n(0),o=n(32)(1);r(r.P+r.F*!n(13)([].map,!0),"Array",{map:function(e){return o(this,e,arguments[1])}})},function(e,t,n){var _=n(18),b=n(11),w=n(29),x=n(24),r=n(47);e.exports=function(p,e){var f=1==p,d=2==p,h=3==p,m=4==p,v=6==p,y=5==p||v,g=e||r;return function(e,t,n){for(var r,o,i=w(e),u=b(i),a=_(t,n,3),s=x(u.length),l=0,c=f?g(e,s):d?g(e,0):void 0;l<s;l++)if((y||l in u)&&(o=a(r=u[l],l,i),p))if(f)c[l]=o;else if(o)switch(p){case 3:return!0;case 5:return r;case 6:return l;case 2:c.push(r)}else if(m)return!1;return v?-1:h||m?m:c}}},function(e,t,n){var r=n(22);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,t,n){var r=n(27)("wks"),o=n(10),i=n(1).Symbol,u="function"==typeof i;(e.exports=function(e){return r[e]||(r[e]=u&&i[e]||(u?i:o)("Symbol."+e))}).store=r},function(e,t,n){var r=n(0),o=n(23)(!1),i=[].indexOf,u=!!i&&1/[1].indexOf(1,-0)<0;r(r.P+r.F*(u||!n(13)(i)),"Array",{indexOf:function(e){return u?i.apply(this,arguments)||0:o(this,e,arguments[1])}})},function(e,t,n){var r=n(0);r(r.S,"Object",{create:n(52)})},function(e,t,n){t.__esModule=!0,t.default=void 0,n(14),n(30),n(31),n(35),n(49),n(50);var r=n(5),o=function(e){return e&&e.__esModule?e:{default:e}}(n(51));function i(e){if(!e.element)throw new Error("element is not defined");if(!e.id)throw new Error("id is not defined");if(!e.source)throw new Error("source is not defined");Array.isArray(e.source)&&(e.source=u(e.source)),(0,r.render)((0,r.createElement)(o.default,e),e.element)}var u=function(n){return function(t,e){e(n.filter((function(e){return-1!==e.toLowerCase().indexOf(t.toLowerCase())})))}};i.enhanceSelectElement=function(n){if(!n.selectElement)throw new Error("selectElement is not defined");if(!n.source){var e=[].filter.call(n.selectElement.options,(function(e){return e.value||n.preserveNullOptions}));n.source=e.map((function(e){return e.textContent||e.innerText}))}if(n.onConfirm=n.onConfirm||function(t){var e=[].filter.call(n.selectElement.options,(function(e){return(e.textContent||e.innerText)===t}))[0];e&&(e.selected=!0)},n.selectElement.value||void 0===n.defaultValue){var t=n.selectElement.options[n.selectElement.options.selectedIndex];n.defaultValue=t.textContent||t.innerText}void 0===n.name&&(n.name=""),void 0===n.id&&(void 0===n.selectElement.id?n.id="":n.id=n.selectElement.id),void 0===n.autoselect&&(n.autoselect=!0);var r=document.createElement("div");n.selectElement.parentNode.insertBefore(r,n.selectElement),i(Object.assign({},n,{element:r})),n.selectElement.style.display="none",n.selectElement.id=n.selectElement.id+"-select"};var a=i;t.default=a},function(e,t,n){e.exports=!n(3)&&!n(4)((function(){return 7!=Object.defineProperty(n(15)("div"),"a",{get:function(){return 7}}).a}))},function(e,t,n){var o=n(2);e.exports=function(e,t){if(!o(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!o(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!o(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!o(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){var f=n(20),d=n(45),h=n(46),m=n(29),v=n(11),o=Object.assign;e.exports=!o||n(4)((function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach((function(e){t[e]=e})),7!=o({},e)[n]||Object.keys(o({},t)).join("")!=r}))?function(e,t){for(var n=m(e),r=arguments.length,o=1,i=d.f,u=h.f;o<r;)for(var a,s=v(arguments[o++]),l=i?f(s).concat(i(s)):f(s),c=l.length,p=0;p<c;)u.call(s,a=l[p++])&&(n[a]=s[a]);return n}:o},function(e,t,n){var u=n(17),a=n(21),s=n(23)(!1),l=n(26)("IE_PROTO");e.exports=function(e,t){var n,r=a(e),o=0,i=[];for(n in r)n!=l&&u(r,n)&&i.push(n);for(;t.length>o;)u(r,n=t[o++])&&(~s(i,n)||i.push(n));return i}},function(e,t,n){var r=n(25),o=Math.max,i=Math.min;e.exports=function(e,t){return(e=r(e))<0?o(e+t,0):i(e,t)}},function(e,t){e.exports=!1},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t){t.f={}.propertyIsEnumerable},function(e,t,n){var r=n(48);e.exports=function(e,t){return new(r(e))(t)}},function(e,t,n){var r=n(2),o=n(33),i=n(34)("species");e.exports=function(e){var t;return o(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!o(t.prototype)||(t=void 0),r(t)&&null===(t=t[i])&&(t=void 0)),void 0===t?Array:t}},function(e,t,n){var r=n(0),o=n(32)(2);r(r.P+r.F*!n(13)([].filter,!0),"Array",{filter:function(e){return o(this,e,arguments[1])}})},function(e,t,n){var r=n(0);r(r.S,"Array",{isArray:n(33)})},function(e,t,n){t.__esModule=!0,t.default=void 0,n(14),n(36),n(30),n(31),n(35),n(55),n(58);var $=n(5),J=o(n(60)),r=o(n(61));function o(e){return e&&e.__esModule?e:{default:e}}function X(){return(X=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function i(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}var u={13:"enter",27:"escape",32:"space",38:"up",40:"down"};function Y(){return"undefined"!=typeof navigator&&!(!navigator.userAgent.match(/(iPod|iPhone|iPad)/g)||!navigator.userAgent.match(/AppleWebKit/g))}var a=function(n){function e(e){var t;return(t=n.call(this,e)||this).elementReferences={},t.state={focused:null,hovered:null,menuOpen:!1,options:e.defaultValue?[e.defaultValue]:[],query:e.defaultValue,validChoiceMade:!1,selected:null,ariaHint:!0},t.handleComponentBlur=t.handleComponentBlur.bind(i(i(t))),t.handleKeyDown=t.handleKeyDown.bind(i(i(t))),t.handleUpArrow=t.handleUpArrow.bind(i(i(t))),t.handleDownArrow=t.handleDownArrow.bind(i(i(t))),t.handleEnter=t.handleEnter.bind(i(i(t))),t.handlePrintableKey=t.handlePrintableKey.bind(i(i(t))),t.handleListMouseLeave=t.handleListMouseLeave.bind(i(i(t))),t.handleOptionBlur=t.handleOptionBlur.bind(i(i(t))),t.handleOptionClick=t.handleOptionClick.bind(i(i(t))),t.handleOptionFocus=t.handleOptionFocus.bind(i(i(t))),t.handleOptionMouseDown=t.handleOptionMouseDown.bind(i(i(t))),t.handleOptionMouseEnter=t.handleOptionMouseEnter.bind(i(i(t))),t.handleInputBlur=t.handleInputBlur.bind(i(i(t))),t.handleInputChange=t.handleInputChange.bind(i(i(t))),t.handleInputFocus=t.handleInputFocus.bind(i(i(t))),t.pollInputElement=t.pollInputElement.bind(i(i(t))),t.getDirectInputChanges=t.getDirectInputChanges.bind(i(i(t))),t}!function(e,t){e.prototype=Object.create(t.prototype),(e.prototype.constructor=e).__proto__=t}(e,n);var t=e.prototype;return t.isQueryAnOption=function(e,t){var n=this;return-1!==t.map((function(e){return n.templateInputValue(e).toLowerCase()})).indexOf(e.toLowerCase())},t.componentDidMount=function(){this.pollInputElement()},t.componentWillUnmount=function(){clearTimeout(this.$pollInput)},t.pollInputElement=function(){var e=this;this.getDirectInputChanges(),this.$pollInput=setTimeout((function(){e.pollInputElement()}),100)},t.getDirectInputChanges=function(){var e=this.elementReferences[-1];e&&e.value!==this.state.query&&this.handleInputChange({target:{value:e.value}})},t.componentDidUpdate=function(e,t){var n=this.state.focused,r=null===n,o=t.focused!==n;o&&!r&&this.elementReferences[n].focus();var i=-1===n,u=o&&null===t.focused;if(i&&u){var a=this.elementReferences[n];a.setSelectionRange(0,a.value.length)}},t.hasAutoselect=function(){return!Y()&&this.props.autoselect},t.templateInputValue=function(e){var t=this.props.templates&&this.props.templates.inputValue;return t?t(e):e},t.templateSuggestion=function(e){var t=this.props.templates&&this.props.templates.suggestion;return t?t(e):e},t.handleComponentBlur=function(e){var t,n=this.state,r=n.options,o=n.query,i=n.selected;this.props.confirmOnBlur?(t=e.query||o,this.props.onConfirm(r[i])):t=o,this.setState({focused:null,menuOpen:e.menuOpen||!1,query:t,selected:null,validChoiceMade:this.isQueryAnOption(t,r)})},t.handleListMouseLeave=function(e){this.setState({hovered:null})},t.handleOptionBlur=function(e,t){var n=this.state,r=n.focused,o=n.menuOpen,i=n.options,u=n.selected,a=null===e.relatedTarget,s=e.relatedTarget===this.elementReferences[-1],l=r!==t&&-1!==r;if(!l&&a||!l&&!s){var c=o&&Y();this.handleComponentBlur({menuOpen:c,query:this.templateInputValue(i[u])})}},t.handleInputBlur=function(e){var t=this.state,n=t.focused,r=t.menuOpen,o=t.options,i=t.query,u=t.selected;if(-1===n){var a=r&&Y(),s=Y()?i:this.templateInputValue(o[u]);this.handleComponentBlur({menuOpen:a,query:s})}},t.handleInputChange=function(e){var n=this,t=this.props,r=t.minLength,o=t.source,i=t.showAllValues,u=this.hasAutoselect(),a=e.target.value,s=0===a.length,l=this.state.query.length!==a.length,c=a.length>=r;this.setState({query:a,ariaHint:s}),i||!s&&l&&c?o(a,(function(e){var t=0<e.length;n.setState({menuOpen:t,options:e,selected:u&&t?0:-1,validChoiceMade:!1})})):!s&&c||this.setState({menuOpen:!1,options:[]})},t.handleInputClick=function(e){this.handleInputChange(e)},t.handleInputFocus=function(e){var t=this.state,n=t.query,r=t.validChoiceMade,o=t.options,i=this.props.minLength,u=!r&&n.length>=i&&0<o.length;u?this.setState((function(e){var t=e.menuOpen;return{focused:-1,menuOpen:u||t,selected:-1}})):this.setState({focused:-1})},t.handleOptionFocus=function(e){this.setState({focused:e,hovered:null,selected:e})},t.handleOptionMouseEnter=function(e,t){Y()||this.setState({hovered:t})},t.handleOptionClick=function(e,t){var n=this.state.options[t],r=this.templateInputValue(n);this.props.onConfirm(n),this.setState({focused:-1,hovered:null,menuOpen:!1,query:r,selected:-1,validChoiceMade:!0}),this.forceUpdate()},t.handleOptionMouseDown=function(e){e.preventDefault()},t.handleUpArrow=function(e){e.preventDefault();var t=this.state,n=t.menuOpen,r=t.selected;-1!==r&&n&&this.handleOptionFocus(r-1)},t.handleDownArrow=function(e){var t=this;if(e.preventDefault(),this.props.showAllValues&&!1===this.state.menuOpen)e.preventDefault(),this.props.source("",(function(e){t.setState({menuOpen:!0,options:e,selected:0,focused:0,hovered:null})}));else if(!0===this.state.menuOpen){var n=this.state,r=n.menuOpen,o=n.options,i=n.selected;i!==o.length-1&&r&&this.handleOptionFocus(i+1)}},t.handleSpace=function(e){var t=this;this.props.showAllValues&&!1===this.state.menuOpen&&""===this.state.query&&(e.preventDefault(),this.props.source("",(function(e){t.setState({menuOpen:!0,options:e})}))),-1!==this.state.focused&&(e.preventDefault(),this.handleOptionClick(e,this.state.focused))},t.handleEnter=function(e){this.state.menuOpen&&(e.preventDefault(),0<=this.state.selected&&this.handleOptionClick(e,this.state.selected))},t.handlePrintableKey=function(e){var t=this.elementReferences[-1];e.target===t||t.focus()},t.handleKeyDown=function(e){switch(u[e.keyCode]){case"up":this.handleUpArrow(e);break;case"down":this.handleDownArrow(e);break;case"space":this.handleSpace(e);break;case"enter":this.handleEnter(e);break;case"escape":this.handleComponentBlur({query:this.state.query});break;default:(function(e){return 47<e&&e<58||32===e||8===e||64<e&&e<91||95<e&&e<112||185<e&&e<193||218<e&&e<223})(e.keyCode)&&this.handlePrintableKey(e)}},t.render=function(){var e,i=this,t=this.props,n=t.cssNamespace,r=t.displayMenu,u=t.id,o=t.minLength,a=t.name,s=t.placeholder,l=t.required,c=t.showAllValues,p=t.tNoResults,f=t.tStatusQueryTooShort,d=t.tStatusNoResults,h=t.tStatusSelectedOption,m=t.tStatusResults,v=t.tAssistiveHint,y=t.dropdownArrow,g=this.state,_=g.focused,b=g.hovered,w=g.menuOpen,x=g.options,O=g.query,C=g.selected,S=g.ariaHint,E=g.validChoiceMade,M=this.hasAutoselect(),N=-1===_,I=0===x.length,k=0!==O.length,A=O.length>=o,P=this.props.showNoOptionsFound&&N&&I&&k&&A,j=n+"__wrapper",L=n+"__input",T=null!==_?" "+L+"--focused":"",B=this.props.showAllValues?" "+L+"--show-all-values":" "+L+"--default",D=n+"__dropdown-arrow-down",F=-1!==_&&null!==_,R=n+"__menu",U=R+"--"+r,V=R+"--"+(w||P?"visible":"hidden"),q=n+"__option",W=n+"__hint",H=this.templateInputValue(x[C]),K=H&&0===H.toLowerCase().indexOf(O.toLowerCase())&&M?O+H.substr(O.length):"",Q=u+"__assistiveHint",z=S?{"aria-describedby":Q}:null;return c&&"string"==typeof(e=y({className:D}))&&(e=(0,$.createElement)("div",{className:n+"__dropdown-arrow-down-wrapper",dangerouslySetInnerHTML:{__html:e}})),(0,$.createElement)("div",{className:j,onKeyDown:this.handleKeyDown},(0,$.createElement)(J.default,{id:u,length:x.length,queryLength:O.length,minQueryLength:o,selectedOption:this.templateInputValue(x[C]),selectedOptionIndex:C,validChoiceMade:E,isInFocus:null!==this.state.focused,tQueryTooShort:f,tNoResults:d,tSelectedOption:h,tResults:m}),K&&(0,$.createElement)("span",null,(0,$.createElement)("input",{className:W,readonly:!0,tabIndex:"-1",value:K})),(0,$.createElement)("input",X({"aria-expanded":w?"true":"false","aria-activedescendant":!!F&&u+"__option--"+_,"aria-owns":u+"__listbox","aria-autocomplete":this.hasAutoselect()?"both":"list"},z,{autoComplete:"off",className:""+L+T+B,id:u,onClick:function(e){return i.handleInputClick(e)},onBlur:this.handleInputBlur},function(e){return{onInput:e}}(this.handleInputChange),{onFocus:this.handleInputFocus,name:a,placeholder:s,ref:function(e){i.elementReferences[-1]=e},type:"text",role:"combobox",required:l,value:O})),e,(0,$.createElement)("ul",{className:R+" "+U+" "+V,onMouseLeave:function(e){return i.handleListMouseLeave(e)},id:u+"__listbox",role:"listbox"},x.map((function(e,t){var n=(-1===_?C===t:_===t)&&null===b?" "+q+"--focused":"",r=t%2?" "+q+"--odd":"",o=Y()?"<span id="+u+"__option-suffix--"+t+' style="border:0;clip:rect(0 0 0 0);height:1px;marginBottom:-1px;marginRight:-1px;overflow:hidden;padding:0;position:absolute;whiteSpace:nowrap;width:1px"> '+(t+1)+" of "+x.length+"</span>":"";return(0,$.createElement)("li",{"aria-selected":_===t?"true":"false",className:""+q+n+r,dangerouslySetInnerHTML:{__html:i.templateSuggestion(e)+o},id:u+"__option--"+t,key:t,onBlur:function(e){return i.handleOptionBlur(e,t)},onClick:function(e){return i.handleOptionClick(e,t)},onMouseDown:i.handleOptionMouseDown,onMouseEnter:function(e){return i.handleOptionMouseEnter(e,t)},ref:function(e){i.elementReferences[t]=e},role:"option",tabIndex:"-1","aria-posinset":t+1,"aria-setsize":x.length})})),P&&(0,$.createElement)("li",{className:q+" "+q+"--no-results"},p())),(0,$.createElement)("span",{id:Q,style:{display:"none"}},v()))},e}($.Component);(t.default=a).defaultProps={autoselect:!1,cssNamespace:"autocomplete",defaultValue:"",displayMenu:"inline",minLength:0,name:"input-autocomplete",placeholder:"",onConfirm:function(){},confirmOnBlur:!0,showNoOptionsFound:!0,showAllValues:!1,required:!1,tNoResults:function(){return"No results found"},tAssistiveHint:function(){return"When autocomplete results are available use up and down arrows to review and enter to select. Touch device users, explore by touch or with swipe gestures."},dropdownArrow:r.default}},function(e,t,r){var o=r(9),i=r(53),u=r(28),a=r(26)("IE_PROTO"),s=function(){},l="prototype",c=function(){var e,t=r(15)("iframe"),n=u.length;for(t.style.display="none",r(54).appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),c=e.F;n--;)delete c[l][u[n]];return c()};e.exports=Object.create||function(e,t){var n;return null!==e?(s[l]=o(e),n=new s,s[l]=null,n[a]=e):n=c(),void 0===t?n:i(n,t)}},function(e,t,n){var u=n(8),a=n(9),s=n(20);e.exports=n(3)?Object.defineProperties:function(e,t){a(e);for(var n,r=s(t),o=r.length,i=0;i<o;)u.f(e,n=r[i++],t[n]);return e}},function(e,t,n){var r=n(1).document;e.exports=r&&r.documentElement},function(e,t,n){var r=n(0);r(r.P,"Function",{bind:n(56)})},function(e,t,n){var i=n(19),u=n(2),a=n(57),s=[].slice,l={};e.exports=Function.bind||function(t){var n=i(this),r=s.call(arguments,1),o=function(){var e=r.concat(s.call(arguments));return this instanceof o?function(e,t,n){if(!(t in l)){for(var r=[],o=0;o<t;o++)r[o]="a["+o+"]";l[t]=Function("F,a","return new F("+r.join(",")+")")}return l[t](e,n)}(n,e.length,e):a(n,e,t)};return u(n.prototype)&&(o.prototype=n.prototype),o}},function(e,t){e.exports=function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)}},function(e,t,n){n(59)("match",1,(function(r,o,e){return[function(e){var t=r(this),n=null==e?void 0:e[o];return void 0!==n?n.call(e,t):new RegExp(e)[o](String(t))},e]}))},function(e,t,n){var a=n(7),s=n(16),l=n(4),c=n(12),p=n(34);e.exports=function(t,e,n){var r=p(t),o=n(c,r,""[t]),i=o[0],u=o[1];l((function(){var e={};return e[r]=function(){return 7},7!=""[t](e)}))&&(s(String.prototype,t,i),a(RegExp.prototype,r,2==e?function(e,t){return u.call(e,this,t)}:function(e){return u.call(e,this)}))}},function(e,t,n){t.__esModule=!0,t.default=void 0,n(36);var _=n(5),o=function(o){function e(){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=o.call.apply(o,[this].concat(n))||this).state={bump:!1,debounced:!1},e}!function(e,t){e.prototype=Object.create(t.prototype),(e.prototype.constructor=e).__proto__=t}(e,o);var t=e.prototype;return t.componentWillMount=function(){var e=this;this.debounceStatusUpdate=function(o,i,u){var a;return function(){var e=this,t=arguments,n=function(){a=null,u||o.apply(e,t)},r=u&&!a;clearTimeout(a),a=setTimeout(n,i),r&&o.apply(e,t)}}((function(){if(!e.state.debounced){var t=!e.props.isInFocus||e.props.validChoiceMade;e.setState((function(e){return{bump:!e.bump,debounced:!0,silenced:t}}))}}),1400)},t.componentWillReceiveProps=function(e){e.queryLength,this.setState({debounced:!1})},t.render=function(){var g,e=this.props,t=e.id,n=e.length,r=e.queryLength,o=e.minQueryLength,i=e.selectedOption,u=e.selectedOptionIndex,a=e.tQueryTooShort,s=e.tNoResults,l=e.tSelectedOption,c=e.tResults,p=this.state,f=p.bump,d=p.debounced,h=p.silenced,m=r<o,v=0===n,y=i?l(i,n,u):"";return g=m?a(o):v?s():c(n,y),this.debounceStatusUpdate(),(0,_.createElement)("div",{style:{border:"0",clip:"rect(0 0 0 0)",height:"1px",marginBottom:"-1px",marginRight:"-1px",overflow:"hidden",padding:"0",position:"absolute",whiteSpace:"nowrap",width:"1px"}},(0,_.createElement)("div",{id:t+"__status--A",role:"status","aria-atomic":"true","aria-live":"polite"},!h&&d&&f?g:""),(0,_.createElement)("div",{id:t+"__status--B",role:"status","aria-atomic":"true","aria-live":"polite"},h||!d||f?"":g))},e}(_.Component);(t.default=o).defaultProps={tQueryTooShort:function(e){return"Type in "+e+" or more characters for results"},tNoResults:function(){return"No search results"},tSelectedOption:function(e,t,n){return e+" "+(n+1)+" of "+t+" is highlighted"},tResults:function(e,t){return e+" "+(1===e?"result":"results")+" "+(1===e?"is":"are")+" available. "+t}}},function(e,t,n){t.__esModule=!0,t.default=void 0;var r=n(5);t.default=function(e){var t=e.className;return(0,r.createElement)("svg",{version:"1.1",xmlns:"http://www.w3.org/2000/svg",className:t,focusable:"false"},(0,r.createElement)("g",{stroke:"none",fill:"none","fill-rule":"evenodd"},(0,r.createElement)("polygon",{fill:"#000000",points:"0 0 22 0 11 17"})))}}]).default})),window.$=jQuery;/*! lz4.js v0.3.3 Released under the MIT license. https://github.com/ukyo/lz4.js/LICENSE */var lz4={};(function(){var c;c||(c=eval("(function() { try { return Module || {} } catch(e) { return {} } })()"));var l={},n;for(n in c)c.hasOwnProperty(n)&&(l[n]=c[n]);var q="object"==typeof window,v="function"==typeof importScripts,w="object"==typeof process&&"function"==typeof require&&!q&&!v,aa=!q&&!w&&!v;if(w){c.print||(c.print=function(a){process.stdout.write(a+"\n")}),c.printErr||(c.printErr=function(a){process.stderr.write(a+"\n")});var ba=require("fs"),ca=require("path");c.read=function(a,b){a=ca.normalize(a);var d=ba.readFileSync(a);return d||a==ca.resolve(a)||(a=path.join(__dirname,"..","src",a),d=ba.readFileSync(a)),d&&!b&&(d=d.toString()),d},c.readBinary=function(a){return(a=c.read(a,!0)).buffer||(a=new Uint8Array(a)),assert(a.buffer),a},c.load=function(a){da(read(a))},c.thisProgram||(c.thisProgram=1<process.argv.length?process.argv[1].replace(/\\/g,"/"):"unknown-program"),c.arguments=process.argv.slice(2),"undefined"!=typeof module&&(module.exports=c),process.on("uncaughtException",(function(a){if(!(a instanceof x))throw a})),c.inspect=function(){return"[Emscripten Module object]"}}else if(aa)c.print||(c.print=print),"undefined"!=typeof printErr&&(c.printErr=printErr),c.read="undefined"!=typeof read?read:function(){throw"no read() available (jsc?)"},c.readBinary=function(a){return"function"==typeof readbuffer?new Uint8Array(readbuffer(a)):(assert("object"==typeof(a=read(a,"binary"))),a)},"undefined"!=typeof scriptArgs?c.arguments=scriptArgs:void 0!==arguments&&(c.arguments=arguments),eval("if (typeof gc === 'function' && gc.toString().indexOf('[native code]') > 0) var gc = undefined");else{if(!q&&!v)throw"Unknown runtime environment. Where are we?";c.read=function(a){var b=new XMLHttpRequest;return b.open("GET",a,!1),b.send(null),b.responseText},void 0!==arguments&&(c.arguments=arguments),"undefined"!=typeof console?(c.print||(c.print=function(a){console.log(a)}),c.printErr||(c.printErr=function(a){console.log(a)})):c.print||(c.print=function(){}),v&&(c.load=importScripts),void 0===c.setWindowTitle&&(c.setWindowTitle=function(a){document.title=a})}function da(a){eval.call(null,a)}for(n in!c.load&&c.read&&(c.load=function(a){da(c.read(a))}),c.print||(c.print=function(){}),c.printErr||(c.printErr=c.print),c.arguments||(c.arguments=[]),c.thisProgram||(c.thisProgram="./this.program"),c.print=c.print,c.K=c.printErr,c.preRun=[],c.postRun=[],l)l.hasOwnProperty(n)&&(c[n]=l[n]);var z={ja:function(a){ea=a},ha:function(){return ea},T:function(){return y},S:function(a){y=a},Q:function(a){switch(a){case"i1":case"i8":return 1;case"i16":return 2;case"i32":case"float":return 4;case"i64":case"double":return 8;default:return"*"===a[a.length-1]?z.F:"i"===a[0]?(assert(0==(a=parseInt(a.substr(1)))%8),a/8):0}},ga:function(a){return Math.max(z.Q(a),z.F)},la:16,xa:function(a,b){return"double"===b||"i64"===b?7&a&&(assert(4==(7&a)),a+=4):assert(0==(3&a)),a},ra:function(a,b,d){return d||"i64"!=a&&"double"!=a?a?Math.min(b||(a?z.ga(a):0),z.F):Math.min(b,8):8},I:function(a,b,d){return d&&d.length?(d.splice||(d=Array.prototype.slice.call(d)),d.splice(0,0,b),c["dynCall_"+a].apply(null,d)):c["dynCall_"+a].call(null,b)},C:[],V:function(a){for(var b=0;b<z.C.length;b++)if(!z.C[b])return z.C[b]=a,2*(1+b);throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."},ia:function(a){z.C[(a-2)/2]=null},r:function(a){z.r.L||(z.r.L={}),z.r.L[a]||(z.r.L[a]=1,c.K(a))},J:{},ta:function(a,b){assert(b),z.J[b]||(z.J[b]={});var d=z.J[b];return d[a]||(d[a]=function(){return z.I(b,a,arguments)}),d[a]},sa:function(){throw"You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work"},D:function(a){var b=y;return y=(y=y+a|0)+15&-16,b},ka:function(a){var b=A;return A=(A=A+a|0)+15&-16,b},B:function(a){var b=C;return(a=(C=(C=C+a|0)+15&-16)>=D)&&(E("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+D+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which adjusts the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 "),a=!0),a?(C=b,0):b},G:function(a,b){return Math.ceil(a/(b||16))*(b||16)},wa:function(a,b,d){return d?+(a>>>0)+4294967296*+(b>>>0):+(a>>>0)+4294967296*+(0|b)},U:8,F:4,ma:0};z.addFunction=z.V,z.removeFunction=z.ia;var F=!1,G,H,ea,buffer;function assert(a,b){a||E("Assertion failed: "+b)}function ga(a){var b;switch("*"===(b="i32").charAt(b.length-1)&&(b="i32"),b){case"i1":case"i8":return I[a>>0];case"i16":return J[a>>1];case"i32":case"i64":return K[a>>2];case"float":return L[a>>2];case"double":return M[a>>3];default:E("invalid type for setValue: "+b)}return null}function N(a,b,d,e){var g,k;"number"==typeof a?(g=!0,k=a):(g=!1,k=a.length);var f,u,h="string"==typeof b?b:null;if(d=4==d?e:[O,z.D,z.ka,z.B][void 0===d?2:d](Math.max(k,h?1:b.length)),g){for(e=d,assert(0==(3&d)),a=d+(-4&k);e<a;e+=4)K[e>>2]=0;for(a=d+k;e<a;)I[e++>>0]=0;return d}if("i8"===h)return a.subarray||a.slice?P.set(a,d):P.set(new Uint8Array(a),d),d;for(e=0;e<k;){var m=a[e];if("function"==typeof m&&(m=z.ua(m)),0===(g=h||b[e]))e++;else{"i64"==g&&(g="i32");var t,p=d+e;switch("*"===(t=(t=g)||"i8").charAt(t.length-1)&&(t="i32"),t){case"i1":case"i8":I[p>>0]=m;break;case"i16":J[p>>1]=m;break;case"i32":K[p>>2]=m;break;case"i64":H=[m>>>0,(G=m,1<=+ha(G)?0<G?(0|ja(+ka(G/4294967296),4294967295))>>>0:~~+la((G-+(~~G>>>0))/4294967296)>>>0:0)],K[p>>2]=H[0],K[p+4>>2]=H[1];break;case"float":L[p>>2]=m;break;case"double":M[p>>3]=m;break;default:E("invalid type for setValue: "+t)}u!==g&&(f=z.Q(g),u=g),e+=f}}return d}function ma(a){var b;if(0===b||!a)return"";for(var e,d=0,g=0;(d|=e=P[a+g>>0],0!=e||b)&&(g++,!b||g!=b););if(b||(b=g),e="",128>d){for(;0<b;)d=String.fromCharCode.apply(String,P.subarray(a,a+Math.min(b,1024))),e=e?e+d:d,a+=1024,b-=1024;return e}return c.UTF8ToString(a)}function na(a){var d=!!c.___cxa_demangle;if(d)try{var e=O(a.length);fa(a.substr(1),e);var g=O(4),k=c.___cxa_demangle(e,0,0,g);if(0===ga(g)&&k)return ma(k)}catch(h){}finally{e&&Q(e),g&&Q(g),k&&Q(k)}var f=3,u={v:"void",b:"bool",c:"char",s:"short",i:"int",l:"long",f:"float",d:"double",w:"wchar_t",a:"signed char",h:"unsigned char",t:"unsigned short",j:"unsigned int",m:"unsigned long",x:"long long",y:"unsigned long long",z:"..."},m=[],p=!0;e=a;try{if("Object._main"==a||"_main"==a)return"main()";if("number"==typeof a&&(a=ma(a)),"_"!==a[0]||"_"!==a[1]||"Z"!==a[2])return a;switch(a[3]){case"n":return"operator new()";case"d":return"operator delete()"}e=function b(d,e,g){e=e||1/0;var h,t="",k=[];if("N"===a[f]){for(f++,"K"===a[f]&&f++,h=[];"E"!==a[f];)if("S"===a[f]){f++;var r=a.indexOf("_",f);h.push(m[a.substring(f,r)||0]||"?"),f=r+1}else if("C"===a[f])h.push(h[h.length-1]),f+=2;else{var B=(r=parseInt(a.substr(f))).toString().length;if(!r||!B){f--;break}var ia=a.substr(f+B,r);h.push(ia),m.push(ia),f+=B+r}if(f++,h=h.join("::"),0==--e)return d?[h]:h}else("K"===a[f]||p&&"L"===a[f])&&f++,(r=parseInt(a.substr(f)))&&(B=r.toString().length,h=a.substr(f+B,r),f+=B+r);p=!1,"I"===a[f]?(f++,r=b(!0),t+=(B=b(!0,1,!0))[0]+" "+h+"<"+r.join(", ")+">"):t=h;a:for(;f<a.length&&0<e--;)if(h=a[f++],h in u)k.push(u[h]);else switch(h){case"P":k.push(b(!0,1,!0)[0]+"*");break;case"R":k.push(b(!0,1,!0)[0]+"&");break;case"L":f++,r=a.indexOf("E",f)-f,k.push(a.substr(f,r)),f+=r+2;break;case"A":if(r=parseInt(a.substr(f)),f+=r.toString().length,"_"!==a[f])throw"?";f++,k.push(b(!0,1,!0)[0]+" ["+r+"]");break;case"E":break a;default:t+="?"+h;break a}return g||1!==k.length||"void"!==k[0]||(k=[]),d?(t&&k.push(t+"?"),k):t+"("+k.join(", ")+")"}()}catch(t){e+="?"}return 0<=e.indexOf("?")&&!d&&z.r("warning: a problem occurred in builtin C++ name demangling; build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),e}function oa(){return pa().replace(/__Z[\w\d_]+/g,(function(a){var b=na(a);return a===b?a:a+" ["+b+"]"}))}function pa(){var a=Error();if(!a.stack){try{throw Error(0)}catch(b){a=b}if(!a.stack)return"(no stack trace available)"}return a.stack.toString()}function qa(){var a=C;return 0<a%4096&&(a+=4096-a%4096),a}!function(){var d,a={stackSave:function(){z.T()},stackRestore:function(){z.S()},arrayToC:function(a){for(var b=z.D(a.length),d=b,h=0;h<a.length;h++)I[d++>>0]=a[h];return b},stringToC:function(a){var b=0;return null!=a&&0!==a&&fa(a,b=z.D(1+(a.length<<2))),b}},b=/^function\s*\(([^)]*)\)\s*{\s*([^*]*?)[\s;]*(?:return\s*(.*?)[;\s]*)?}$/;for(d in a)a.hasOwnProperty(d)&&a[d].toString().match(b).slice(1)}();for(var I,P,J,ra,K,sa,L,M,ta=0,A=0,ua=0,y=0,R=0,va=0,C=0,wa=c.TOTAL_STACK||5242880,D=c.TOTAL_MEMORY||33554432,S=65536;S<D||S<2*wa;)S=16777216>S?2*S:S+16777216;function T(a){for(;0<a.length;){var b=a.shift();if("function"==typeof b)b();else{var d=b.qa;"number"==typeof d?void 0===b.H?z.I("v",d):z.I("vi",d,[b.H]):d(void 0===b.H?null:b.H)}}}S!==D&&(D=S),assert("undefined"!=typeof Int32Array&&"undefined"!=typeof Float64Array&&!!new Int32Array(1).subarray&&!!new Int32Array(1).set,"JS engine does not provide full typed array support"),buffer=new ArrayBuffer(D),I=new Int8Array(buffer),J=new Int16Array(buffer),K=new Int32Array(buffer),P=new Uint8Array(buffer),ra=new Uint16Array(buffer),sa=new Uint32Array(buffer),L=new Float32Array(buffer),M=new Float64Array(buffer),K[0]=255,assert(255===P[0]&&0===P[3],"Typed arrays 2 must be run on a little-endian system"),c.HEAP=void 0,c.buffer=buffer,c.HEAP8=I,c.HEAP16=J,c.HEAP32=K,c.HEAPU8=P,c.HEAPU16=ra,c.HEAPU32=sa,c.HEAPF32=L,c.HEAPF64=M;var U=[],V=[],xa=[],ya=[],za=[],W=!1;function Aa(){var a=c.preRun.shift();U.unshift(a)}function Ba(a,b){for(var d=0,e=0;e<a.length;++e){55296<=(g=a.charCodeAt(e))&&57343>=g&&(g=65536+((1023&g)<<10)|1023&a.charCodeAt(++e)),127>=g?++d:d=2047>=g?d+2:65535>=g?d+3:2097151>=g?d+4:67108863>=g?d+5:d+6}e=0;if(0<(k=(d=Array(d+1)).length)){for(var g=e,k=e+k-1,h=0;h<a.length;++h){var f=a.charCodeAt(h);if(55296<=f&&57343>=f&&(f=65536+((1023&f)<<10)|1023&a.charCodeAt(++h)),127>=f){if(e>=k)break;d[e++]=f}else{if(2047>=f){if(e+1>=k)break;d[e++]=192|f>>6}else{if(65535>=f){if(e+2>=k)break;d[e++]=224|f>>12}else{if(2097151>=f){if(e+3>=k)break;d[e++]=240|f>>18}else{if(67108863>=f){if(e+4>=k)break;d[e++]=248|f>>24}else{if(e+5>=k)break;d[e++]=252|f>>30,d[e++]=128|f>>24&63}d[e++]=128|f>>18&63}d[e++]=128|f>>12&63}d[e++]=128|f>>6&63}d[e++]=128|63&f}}d[e]=0,e-=g}else e=0;return b&&(d.length=e),d}function fa(a,b){for(var d=Ba(a,void 0),e=0;e<d.length;)I[b+e>>0]=d[e],e+=1}Math.imul&&-5===Math.imul(4294967295,5)||(Math.imul=function(a,b){var d=65535&a,e=65535&b;return d*e+((a>>>16)*e+d*(b>>>16)<<16)|0}),Math.va=Math.imul,Math.clz32||(Math.clz32=function(a){a>>>=0;for(var b=0;32>b;b++)if(a&1<<31-b)return b;return 32}),Math.oa=Math.clz32;var ha=Math.abs,la=Math.ceil,ka=Math.floor,ja=Math.min;c.preloadedImages={},c.preloadedAudios={};var Ca=[function(a,b){a:for(var g,k,h,f,u,d=b,e=P,p="";g=e[d++];)128&g?(k=63&e[d++],192==(224&g)?p+=String.fromCharCode((31&g)<<6|k):(h=63&e[d++],224==(240&g)?g=(15&g)<<12|k<<6|h:(f=63&e[d++],240==(248&g)?g=(7&g)<<18|k<<12|h<<6|f:(u=63&e[d++],248==(252&g)?g=(3&g)<<24|k<<18|h<<12|f<<6|u:g=(1&g)<<30|k<<24|h<<18|f<<12|u<<6|63&e[d++])),65536>g?p+=String.fromCharCode(g):(g-=65536,p+=String.fromCharCode(55296|g>>10,56320|1023&g)))):p+=String.fromCharCode(g);X[a].n=Error(p)},function(a,b,d){X[a].A(b,d)},function(a,b,d){return X[a].u(b,d)}],ta=8,A=ta+1296;V.push(),N([0,32,0,0,0,0,0,0,0,0,0,0,36,3,0,0,47,3,0,0,61,3,0,0,88,3,0,0,112,3,0,0,146,3,0,0,177,3,0,0,203,3,0,0,235,3,0,0,2,4,0,0,26,4,0,0,49,4,0,0,75,4,0,0,104,4,0,0,128,4,0,0,150,4,0,0,169,4,0,0,195,4,0,0,224,4,0,0,254,4,0,0,0,0,1,0,0,0,4,0,0,0,16,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,123,114,101,116,117,114,110,32,76,90,52,74,83,95,114,101,97,100,40,36,48,44,32,36,49,44,32,36,50,41,125,0,123,76,90,52,74,83,95,119,114,105,116,101,40,36,48,44,32,36,49,44,32,36,50,41,125,0,123,76,90,52,74,83,95,101,114,114,111,114,40,36,48,44,32,36,49,41,125,0,79,75,95,78,111,69,114,114,111,114,0,69,82,82,79,82,95,71,69,78,69,82,73,67,0,69,82,82,79,82,95,109,97,120,66,108,111,99,107,83,105,122,101,95,105,110,118,97,108,105,100,0,69,82,82,79,82,95,98,108,111,99,107,77,111,100,101,95,105,110,118,97,108,105,100,0,69,82,82,79,82,95,99,111,110,116,101,110,116,67,104,101,99,107,115,117,109,70,108,97,103,95,105,110,118,97,108,105,100,0,69,82,82,79,82,95,99,111,109,112,114,101,115,115,105,111,110,76,101,118,101,108,95,105,110,118,97,108,105,100,0,69,82,82,79,82,95,104,101,97,100,101,114,86,101,114,115,105,111,110,95,119,114,111,110,103,0,69,82,82,79,82,95,98,108,111,99,107,67,104,101,99,107,115,117,109,95,117,110,115,117,112,112,111,114,116,101,100,0,69,82,82,79,82,95,114,101,115,101,114,118,101,100,70,108,97,103,95,115,101,116,0,69,82,82,79,82,95,97,108,108,111,99,97,116,105,111,110,95,102,97,105,108,101,100,0,69,82,82,79,82,95,115,114,99,83,105,122,101,95,116,111,111,76,97,114,103,101,0,69,82,82,79,82,95,100,115,116,77,97,120,83,105,122,101,95,116,111,111,83,109,97,108,108,0,69,82,82,79,82,95,102,114,97,109,101,72,101,97,100,101,114,95,105,110,99,111,109,112,108,101,116,101,0,69,82,82,79,82,95,102,114,97,109,101,84,121,112,101,95,117,110,107,110,111,119,110,0,69,82,82,79,82,95,102,114,97,109,101,83,105,122,101,95,119,114,111,110,103,0,69,82,82,79,82,95,115,114,99,80,116,114,95,119,114,111,110,103,0,69,82,82,79,82,95,100,101,99,111,109,112,114,101,115,115,105,111,110,70,97,105,108,101,100,0,69,82,82,79,82,95,104,101,97,100,101,114,67,104,101,99,107,115,117,109,95,105,110,118,97,108,105,100,0,69,82,82,79,82,95,99,111,110,116,101,110,116,67,104,101,99,107,115,117,109,95,105,110,118,97,108,105,100,0,69,82,82,79,82,95,109,97,120,67,111,100,101,0],"i8",4,z.U);var Da=z.G(N(12,"i8",2),8);function Ka(a){return c.___errno_location&&(K[c.___errno_location()>>2]=a),a}function Y(a){Y.fa||(C=qa(),Y.fa=!0,assert(z.B),Y.ea=z.B,z.B=function(){E("cannot dynamically allocate, sbrk now has control")});var b=C;return 0==a||Y.ea(a)?b:4294967295}assert(0==Da%8),c._i64Subtract=Ea,c._i64Add=Fa,c._memset=Ga,c._bitshift64Lshr=Ha,c._bitshift64Shl=Ia,c._memcpy=Ja,c._memmove=La;var Ma=N([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",2);c._llvm_cttz_i32=Na,ua=y=z.G(A),R=ua+wa,va=C=z.G(R),assert(va<D,"TOTAL_MEMORY not big enough for stack"),c.W={Math:Math,Int8Array:Int8Array,Int16Array:Int16Array,Int32Array:Int32Array,Uint8Array:Uint8Array,Uint16Array:Uint16Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array,NaN:NaN,Infinity:1/0},c.X={abort:E,assert:assert,invoke_iiiiiii:function(a,b,d,e,g,k,h){try{return c.dynCall_iiiiiii(a,b,d,e,g,k,h)}catch(f){if("number"!=typeof f&&"longjmp"!==f)throw f;Z.setThrew(1,0)}},_sysconf:function(a){switch(a){case 30:return 4096;case 85:return S/4096;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"==typeof navigator&&navigator.hardwareConcurrency||1}return Ka(22),-1},_pthread_self:function(){return 0},_abort:function(){c.abort()},___setErrNo:Ka,_sbrk:Y,_time:function(a){var b=Date.now()/1e3|0;return a&&(K[a>>2]=b),b},_emscripten_memcpy_big:function(a,b,d){return P.set(P.subarray(b,b+d),a),a},_emscripten_asm_const_3:function(a,b,d,e){return Ca[a](b,d,e)},_emscripten_asm_const_2:function(a,b,d){return Ca[a](b,d)},STACKTOP:y,STACK_MAX:R,tempDoublePtr:Da,ABORT:F,cttz_i8:Ma};var Z=function(global,env,buffer){"use asm";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buffer);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=new global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.STACKTOP|0;var j=env.STACK_MAX|0;var k=env.tempDoublePtr|0;var l=env.ABORT|0;var m=env.cttz_i8|0;var n=0;var o=0;var p=0;var q=0;var r=global.NaN,s=global.Infinity;var t=0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0.0;var C=0;var D=0;var E=0;var F=0;var G=0;var H=0;var I=0;var J=0;var K=0;var L=0;var M=global.Math.floor;var N=global.Math.abs;var O=global.Math.sqrt;var P=global.Math.pow;var Q=global.Math.cos;var R=global.Math.sin;var S=global.Math.tan;var T=global.Math.acos;var U=global.Math.asin;var V=global.Math.atan;var W=global.Math.atan2;var X=global.Math.exp;var Y=global.Math.log;var Z=global.Math.ceil;var _=global.Math.imul;var $=global.Math.min;var aa=global.Math.clz32;var ba=env.abort;var ca=env.assert;var da=env.invoke_iiiiiii;var ea=env._sysconf;var fa=env._pthread_self;var ga=env._abort;var ha=env.___setErrNo;var ia=env._sbrk;var ja=env._time;var ka=env._emscripten_memcpy_big;var la=env._emscripten_asm_const_3;var ma=env._emscripten_asm_const_2;var na=0.0;function pa(a){a=a|0;var b=0;b=i;i=i+a|0;i=i+15&-16;return b|0}function qa(){return i|0}function ra(a){a=a|0;i=a}function sa(a,b){a=a|0;b=b|0;i=a;j=b}function ta(a,b){a=a|0;b=b|0;if(!n){n=a;o=b}}function ua(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0]}function va(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0];a[k+4>>0]=a[b+4>>0];a[k+5>>0]=a[b+5>>0];a[k+6>>0]=a[b+6>>0];a[k+7>>0]=a[b+7>>0]}function wa(a){a=a|0;C=a}function xa(){return C|0}function ya(){c[3]=_a(8192)|0;c[4]=_a(8192)|0;return}function za(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=_a(64)|0;f=_a(152)|0;if(!f){$a(g);g=0;return g|0}if(c[f+-4>>2]&3)db(f|0,0,152)|0;c[f+56>>2]=100;c[f+60>>2]=0;c[g+4>>2]=f;f=g+8|0;c[f>>2]=a;c[g+12>>2]=b;c[g+16>>2]=d;d=g+20|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[g+40>>2]=e;d=g+44|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;f=Ha(8192,f)|0;if(f>>>0<=(c[2]|0)>>>0)return g|0;$a(c[4]|0);c[2]=f;c[4]=_a(f)|0;return g|0}function Aa(a){a=a|0;var b=0;b=c[a+4>>2]|0;if(!b){$a(a);return}$a(c[b+144>>2]|0);$a(c[b+72>>2]|0);$a(b);$a(a);return}function Ba(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=c[b+4>>2]|0;l=c[4]|0;d=b+8|0;do{if((c[2]|0)>>>0>=15){m=k+60|0;if(!(c[m>>2]|0)){f=k;e=f+56|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(e|0));j=k+32|0;d=(c[j>>2]|0)<3?1:2;e=k+148|0;if((c[e>>2]|0)>>>0<d>>>0){f=k+144|0;$a(c[f>>2]|0);if((c[j>>2]|0)<3){g=_a(16416)|0;if((g|0)!=0?(c[g+-4>>2]&3|0)!=0:0)db(g|0,0,16416)|0;db(g|0,0,16416)|0;c[f>>2]=g}else c[f>>2]=_a(262192)|0;c[e>>2]=d}d=c[k>>2]|0;if(d){d=d+-4|0;if(d>>>0>3)d=-2;else h=14}else{c[k>>2]=4;d=0;h=14}if((h|0)==14)d=c[100+(d<<2)>>2]|0;c[k+64>>2]=d;i=k+4|0;f=(c[i>>2]|0)==0&1;f=(c[b+44>>2]|0)==0?d+(f<<17)|0:f<<16;d=k+68|0;if((c[d>>2]|0)>>>0<f>>>0){c[d>>2]=f;e=k+72|0;$a(c[e>>2]|0);d=_a(f)|0;if(!d){c[e>>2]=d;d=-9;break}if(c[d+-4>>2]&3)db(d|0,0,f|0)|0;c[e>>2]=d}else d=c[k+72>>2]|0;c[k+76>>2]=d;c[k+80>>2]=0;d=k+96|0;c[k+104>>2]=0;c[d+12>>2]=606290984;c[k+112>>2]=-2048144777;c[d+20>>2]=0;c[k+120>>2]=1640531535;e=d;c[e>>2]=0;c[e+4>>2]=0;c[d+44>>2]=0;d=c[j>>2]|0;e=k+144|0;if((d|0)<3)db(c[e>>2]|0,0,16416)|0;else{j=c[e>>2]|0;c[j+262148>>2]=0;c[j+262172>>2]=d}g=l;a[g>>0]=4;a[g+1>>0]=34;a[g+2>>0]=77;a[g+3>>0]=24;h=g+4|0;f=k+16|0;d=f;a[h>>0]=c[i>>2]<<5&32|c[k+8>>2]<<2&4|(((c[d>>2]|0)!=0|(c[d+4>>2]|0)!=0)&1)<<3|64;d=g+6|0;a[g+5>>0]=c[k>>2]<<4&112;e=c[f>>2]|0;f=c[f+4>>2]|0;if((e|0)==0&(f|0)==0)e=7;else{a[d>>0]=e;d=eb(e|0,f|0,8)|0;a[g+7>>0]=d;d=eb(e|0,f|0,16)|0;a[g+8>>0]=d;d=eb(e|0,f|0,24)|0;a[g+9>>0]=d;a[g+10>>0]=f;d=eb(e|0,f|0,40)|0;a[g+11>>0]=d;d=eb(e|0,f|0,48)|0;a[g+12>>0]=d;e=eb(e|0,f|0,56)|0;a[g+13>>0]=e;e=k+88|0;c[e>>2]=0;c[e+4>>2]=0;e=15;d=g+14|0}a[d>>0]=Ia(h,d-h|0)|0;c[m>>2]=1;d=g+e-l|0;if(d>>>0<=4294967277){la(1,b|0,c[4]|0,d|0)|0;b=1;return b|0}}else d=-1}else d=-11}while(0);ma(0,b|0,c[20+(0-d<<2)>>2]|0)|0;b=0;return b|0}function Ca(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=i;i=i+16|0;p=y;s=c[a+4>>2]|0;t=c[4]|0;b=c[2]|0;u=c[3]|0;v=la(2,a|0,u|0,8192)|0;d=u;q=c[s+64>>2]|0;w=u+v|0;m=w;a:do{if((c[s+60>>2]|0)==1)if(b>>>0>=(Ha(v,s)|0)>>>0){c[p>>2]=0;n=s+4|0;l=s+32|0;g=(c[n>>2]|0)==1;g=(c[l>>2]|0)<3?g?1:2:g?3:4;r=s+80|0;b=c[r>>2]|0;do{if(!b){b=t;f=0}else{e=q-b|0;d=s+76|0;b=(c[d>>2]|0)+b|0;if(e>>>0>v>>>0){gb(b|0,u|0,v|0)|0;c[r>>2]=(c[r>>2]|0)+v;b=t;f=0;d=m;break}gb(b|0,u|0,e|0)|0;b=t;b=b+(Ja(b,c[d>>2]|0,q,g,c[s+144>>2]|0,c[l>>2]|0)|0)|0;if(!(c[n>>2]|0))c[d>>2]=(c[d>>2]|0)+q;c[r>>2]=0;f=1;d=u+e|0}}while(0);o=w;j=s+144|0;h=f;while(1){e=d;f=o-d|0;if(f>>>0<q>>>0)break;h=b;b=h+(Ja(h,e,q,g,c[j>>2]|0,c[l>>2]|0)|0)|0;h=2;d=e+q|0}k=s+36|0;if((c[k>>2]|0)!=0&e>>>0<w>>>0){g=b+(Ja(b,e,f,g,c[j>>2]|0,c[l>>2]|0)|0)|0;b=2;f=m}else{g=b;b=h;f=d}do{if((c[n>>2]|0)==0&(b|0)==2){if(c[p>>2]|0){c[s+76>>2]=c[s+72>>2];break}b=Ka(s)|0;if(!b){b=-1;x=26;break a}c[s+76>>2]=(c[s+72>>2]|0)+b}}while(0);d=s+76|0;b=c[d>>2]|0;e=s+72|0;if((b+q|0)>>>0>((c[e>>2]|0)+(c[s+68>>2]|0)|0)>>>0?(c[k>>2]|0)==0:0){b=Ka(s)|0;b=(c[e>>2]|0)+b|0;c[d>>2]=b}d=f;if(d>>>0<w>>>0){w=o-f|0;gb(b|0,d|0,w|0)|0;c[r>>2]=w}if((c[s+8>>2]|0)==1)Ra(s+96|0,u,v);b=s+88|0;w=b;w=cb(c[w>>2]|0,c[w+4>>2]|0,v|0,0)|0;c[b>>2]=w;c[b+4>>2]=C;b=g-t|0;if(b>>>0<=4294967277){la(1,a|0,c[4]|0,b|0)|0;x=1;i=y;return x|0}}else{b=-11;x=26}else{b=-1;x=26}}while(0);ma(0,a|0,c[20+(0-b<<2)>>2]|0)|0;x=0;i=y;return x|0}function Da(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=c[b+4>>2]|0;k=c[4]|0;d=c[2]|0;if(c[j+80>>2]|0)if((c[j+60>>2]|0)==1){g=j+80|0;e=c[g>>2]|0;if(d>>>0>=(e+8|0)>>>0){f=j+4|0;d=c[j+32>>2]|0;l=(c[f>>2]|0)==1;m=k;h=j+76|0;e=m+(Ja(m,c[h>>2]|0,e,(d|0)<3?l?1:2:l?3:4,c[j+144>>2]|0,d)|0)|0;if(!(c[f>>2]|0)){f=(c[h>>2]|0)+(c[g>>2]|0)|0;c[h>>2]=f}else f=c[h>>2]|0;c[g>>2]=0;d=j+72|0;if((f+(c[j+64>>2]|0)|0)>>>0>((c[d>>2]|0)+(c[j+68>>2]|0)|0)>>>0){m=Ka(j)|0;c[h>>2]=(c[d>>2]|0)+m}d=e-k|0;if(d>>>0<=4294967277)i=10}else d=-11}else d=-1;else{d=0;i=10}do{if((i|0)==10){e=k;a[e+d>>0]=0;a[e+(d+1)>>0]=0;a[e+(d+2)>>0]=0;a[e+(d+3)>>0]=0;f=e+(d+4)|0;if((c[j+8>>2]|0)==1){m=Sa(j+96|0)|0;a[f>>0]=m;a[e+(d+5)>>0]=m>>>8;a[e+(d+6)>>0]=m>>>16;a[e+(d+7)>>0]=m>>>24;d=e+(d+8)|0}else d=f;c[j+60>>2]=0;f=j+16|0;e=c[f>>2]|0;f=c[f+4>>2]|0;if(!((e|0)==0&(f|0)==0)?(m=j+88|0,!((e|0)==(c[m>>2]|0)?(f|0)==(c[m+4>>2]|0):0)):0){d=-14;break}d=d-k|0;if(d>>>0<=4294967277){la(1,b|0,c[4]|0,d|0)|0;m=1;return m|0}}}while(0);ma(0,b|0,c[20+(0-d<<2)>>2]|0)|0;m=0;return m|0}function Ea(){var a=0,b=0;a=_a(4)|0;b=_a(160)|0;if(!b){b=0;return b|0}if(c[b+-4>>2]&3)db(b|0,0,160)|0;c[b+32>>2]=100;c[a>>2]=b;if((c[2]|0)>>>0>=8192){b=a;return b|0}$a(c[4]|0);c[2]=8192;c[4]=_a(8192)|0;b=a;return b|0}function Fa(a){a=a|0;a=c[a>>2]|0;if(!a)return;$a(c[a+60>>2]|0);$a(c[a+72>>2]|0);$a(a);return}function Ga(b){b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;X=i;i=i+16|0;V=X;N=la(2,b|0,c[3]|0,8192)|0;e=8192;U=0;a:while(1){D=c[b>>2]|0;O=c[4]|0;T=c[3]|0;S=T+U|0;T=T+N|0;F=O;B=F+e|0;c[V>>2]=0;I=D+56|0;M=c[I>>2]|0;if(!((M|0)==0|(S|0)==(M|0))){e=-15;W=99;break}m=D+36|0;n=T;o=D+64|0;p=D+68|0;q=D+60|0;r=D+48|0;s=B;t=D+8|0;u=D+16|0;v=D+4|0;w=D+40|0;x=D+96|0;G=D+88|0;J=D+92|0;y=D+84|0;z=D+144|0;K=D+76|0;L=D+80|0;M=D+72|0;A=D+148|0;E=1;l=O;H=1;k=0;j=S;b:while(1){if(!E)break;c:do{switch(c[m>>2]|0){case 0:{h=j;e=n-j|0;if(e>>>0<=14){c[o>>2]=0;c[p>>2]=7;c[m>>2]=1;f=7;g=0;W=11;break c}e=La(D,h,e)|0;if(e>>>0>4294967277){W=99;break a}Z=k;Y=H;f=l;g=E;j=h+e|0;k=Z;H=Y;l=f;E=g;continue b}case 1:{e=n-j|0;h=j;f=c[p>>2]|0;g=c[o>>2]|0;W=11;break}case 2:if((n-j|0)>>>0>3){h=j;f=j+4|0;W=20;break c}else{c[o>>2]=0;c[m>>2]=3;W=17;break c}case 3:{W=17;break}case 4:{h=c[p>>2]|0;e=j;f=n-j|0;h=f>>>0<h>>>0?f:h;f=l;Z=s-l|0;h=Z>>>0<h>>>0?Z:h;gb(f|0,e|0,h|0)|0;if(c[t>>2]|0)Ra(x,e,h);Z=u;if(!((c[Z>>2]|0)==0&(c[Z+4>>2]|0)==0)){Y=w;Y=bb(c[Y>>2]|0,c[Y+4>>2]|0,h|0,0)|0;Z=w;c[Z>>2]=Y;c[Z+4>>2]=C}if(!(c[v>>2]|0))Ma(D,f,h,F,0);g=e+h|0;e=f+h|0;f=c[p>>2]|0;if((f|0)==(h|0)){c[m>>2]=2;h=k;Y=H;Z=E;l=e;j=g;k=h;H=Y;E=Z;continue b}else{H=f-h|0;c[p>>2]=H;Z=k;E=0;l=e;H=H+4|0;j=g;k=Z;continue b}}case 5:{e=c[p>>2]|0;if((n-j|0)>>>0<e>>>0){c[o>>2]=0;c[m>>2]=6;f=j;g=k;h=H;Y=l;Z=E;j=f;k=g;H=h;l=Y;E=Z;continue b}else{c[m>>2]=7;k=j;h=H;Y=l;Z=E;j=j+e|0;H=h;l=Y;E=Z;continue b}}case 6:{e=c[o>>2]|0;f=(c[p>>2]|0)-e|0;g=j;Z=n-j|0;f=f>>>0>Z>>>0?Z:f;gb((c[q>>2]|0)+e|0,g|0,f|0)|0;e=(c[o>>2]|0)+f|0;c[o>>2]=e;f=g+f|0;g=c[p>>2]|0;if(g>>>0>e>>>0){Y=k;Z=l;E=0;H=g-e+4|0;j=f;k=Y;l=Z;continue b}else{k=c[q>>2]|0;c[m>>2]=7;h=H;Y=l;Z=E;j=f;H=h;l=Y;E=Z;continue b}}case 7:if((s-l|0)>>>0<(c[r>>2]|0)>>>0){c[m>>2]=9;f=j;g=k;h=H;Y=l;Z=E;j=f;k=g;H=h;l=Y;E=Z;continue b}else{c[m>>2]=8;f=j;g=k;h=H;Y=l;Z=E;j=f;k=g;H=h;l=Y;E=Z;continue b}case 8:{e=l;f=oa[((c[v>>2]|0)==0?5:6)&7](k,e,c[p>>2]|0,c[r>>2]|0,c[K>>2]|0,c[L>>2]|0)|0;if((f|0)<0){e=-1;W=99;break a}if(c[t>>2]|0)Ra(x,e,f);Z=u;if(!((c[Z>>2]|0)==0&(c[Z+4>>2]|0)==0)){Y=w;Y=bb(c[Y>>2]|0,c[Y+4>>2]|0,f|0,((f|0)<0)<<31>>31|0)|0;Z=w;c[Z>>2]=Y;c[Z+4>>2]=C}if(!(c[v>>2]|0))Ma(D,e,f,F,0);c[m>>2]=2;g=j;h=k;Y=H;Z=E;l=e+f|0;j=g;k=h;H=Y;E=Z;continue b}case 9:{do{if(!(c[v>>2]|0)){e=c[K>>2]|0;f=c[M>>2]|0;g=c[L>>2]|0;if((e|0)!=(f|0)){h=f+(g>>>0>65536?65536:g)|0;c[y>>2]=h;f=g;e=5;break}if(g>>>0>131072){gb(e|0,e+(g+-65536)|0,65536)|0;c[L>>2]=65536;e=c[M>>2]|0;f=65536}else f=g;h=e+f|0;c[y>>2]=h;e=5}else{h=c[y>>2]|0;f=c[L>>2]|0;e=6}}while(0);e=oa[e&7](k,h,c[p>>2]|0,c[r>>2]|0,c[K>>2]|0,f)|0;if((e|0)<0){e=-16;W=99;break a}if(c[t>>2]|0)Ra(x,c[y>>2]|0,e);Z=u;if(!((c[Z>>2]|0)==0&(c[Z+4>>2]|0)==0)){Y=w;Y=bb(c[Y>>2]|0,c[Y+4>>2]|0,e|0,((e|0)<0)<<31>>31|0)|0;Z=w;c[Z>>2]=Y;c[Z+4>>2]=C}c[G>>2]=e;c[J>>2]=0;c[m>>2]=10;f=j;g=k;h=H;Y=l;Z=E;j=f;k=g;H=h;l=Y;E=Z;continue b}case 10:{Z=c[J>>2]|0;e=(c[G>>2]|0)-Z|0;f=l;Y=s-l|0;e=e>>>0>Y>>>0?Y:e;gb(f|0,(c[y>>2]|0)+Z|0,e|0)|0;if(!(c[v>>2]|0))Ma(D,f,e,F,1);Z=(c[J>>2]|0)+e|0;c[J>>2]=Z;e=f+e|0;if((Z|0)!=(c[G>>2]|0)){Y=j;Z=k;E=0;l=e;H=4;j=Y;k=Z;continue b}c[m>>2]=2;g=j;h=k;Y=H;Z=E;l=e;j=g;k=h;H=Y;E=Z;continue b}case 11:{Z=w;if(!((c[Z>>2]|0)==0&(c[Z+4>>2]|0)==0)){e=-14;W=99;break a}if(!(c[t>>2]&1073741823)){c[m>>2]=0;h=j;Y=k;Z=l;E=0;H=0;j=h;k=Y;l=Z;continue b}if((n-j|0)<4){c[o>>2]=0;c[m>>2]=12;W=75;break c}else{g=j;e=j+4|0;W=78;break c}}case 12:{W=75;break}case 13:if((n-j|0)>3){f=j;e=j+4|0;W=85;break c}else{c[o>>2]=4;c[p>>2]=8;c[m>>2]=14;W=82;break c}case 14:{W=82;break}case 15:{Y=c[p>>2]|0;Z=n-j|0;Z=Y>>>0>Z>>>0?Z:Y;f=j+Z|0;e=Y-Z|0;c[p>>2]=e;if((Y|0)!=(Z|0)){Y=k;Z=l;E=0;H=e;j=f;k=Y;l=Z;continue b}c[m>>2]=0;Y=k;Z=l;E=0;H=0;j=f;k=Y;l=Z;continue b}default:{f=j;g=k;h=H;Y=l;Z=E;j=f;k=g;H=h;l=Y;E=Z;continue b}}}while(0);do{if((W|0)==11){W=0;f=f-g|0;e=f>>>0>e>>>0?e:f;gb(D+144+g|0,h|0,e|0)|0;f=(c[o>>2]|0)+e|0;c[o>>2]=f;g=h+e|0;e=c[p>>2]|0;if(e>>>0<=f>>>0){e=La(D,z,e)|0;if(e>>>0>4294967277){W=99;break a}else{f=k;h=H;Y=l;Z=E;j=g;k=f;H=h;l=Y;E=Z;continue b}}else{Y=k;Z=l;E=0;H=e-f+4|0;j=g;k=Y;l=Z;continue b}}else if((W|0)==17){W=0;Z=c[o>>2]|0;e=4-Z|0;f=j;Y=n-j|0;e=e>>>0>Y>>>0?Y:e;gb((c[q>>2]|0)+Z|0,f|0,e|0)|0;f=f+e|0;e=(c[o>>2]|0)+e|0;c[o>>2]=e;if(e>>>0<4){Y=k;Z=l;E=0;H=4-e|0;j=f;k=Y;l=Z;continue b}else{h=c[q>>2]|0;W=20;break}}else if((W|0)==75){W=0;Z=c[o>>2]|0;e=4-Z|0;f=j;Y=n-j|0;e=e>>>0>Y>>>0?Y:e;gb((c[q>>2]|0)+Z|0,f|0,e|0)|0;f=f+e|0;e=(c[o>>2]|0)+e|0;c[o>>2]=e;if(e>>>0<4){Y=k;Z=l;E=0;H=4-e|0;j=f;k=Y;l=Z;continue b}else{g=c[q>>2]|0;e=f;W=78;break}}else if((W|0)==82){W=0;g=c[o>>2]|0;f=(c[p>>2]|0)-g|0;e=j;Z=n-j|0;f=f>>>0>Z>>>0?Z:f;gb(D+144+g|0,e|0,f|0)|0;e=e+f|0;f=(c[o>>2]|0)+f|0;c[o>>2]=f;g=c[p>>2]|0;if(g>>>0>f>>>0){Y=k;Z=l;E=0;H=g-f|0;j=e;k=Y;l=Z;continue b}else{f=A;W=85}}}while(0);if((W|0)==20){W=0;g=h;e=g+3|0;g=d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[e>>0]<<24&2130706432;if(!g){c[m>>2]=11;g=H;Y=l;Z=E;k=h;j=f;H=g;l=Y;E=Z;continue}if(g>>>0>(c[r>>2]|0)>>>0){e=-1;W=99;break a}c[p>>2]=g;if((a[e>>0]|0)<0){c[m>>2]=4;g=H;Y=l;Z=E;k=h;j=f;H=g;l=Y;E=Z;continue}else{c[m>>2]=5;k=(l|0)==(B|0);Z=l;E=k?0:E;H=k?g+4|0:H;k=h;j=f;l=Z;continue}}else if((W|0)==78){W=0;Z=g;Z=d[Z>>0]|d[Z+1>>0]<<8|d[Z+2>>0]<<16|d[Z+3>>0]<<24;if((Z|0)!=(Sa(x)|0)){e=-18;W=99;break a}c[m>>2]=0;Z=l;E=0;H=0;k=g;j=e;l=Z;continue}else if((W|0)==85){W=0;h=f;h=d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24;Y=u;c[Y>>2]=h;c[Y+4>>2]=0;c[p>>2]=h;c[m>>2]=15;h=H;Y=l;Z=E;k=f;j=e;H=h;l=Y;E=Z;continue}}do{if(((c[v>>2]|0)==0?(P=c[K>>2]|0,Q=c[M>>2]|0,(P|0)!=(Q|0)&(c[V>>2]|0)==0):0)?(R=c[m>>2]|0,(R+-1|0)>>>0<10):0){if((R|0)!=10){Y=c[L>>2]|0;Z=Y>>>0>65536?65536:Y;gb(Q|0,P+(Y-Z)|0,Z|0)|0;Y=c[M>>2]|0;c[K>>2]=Y;c[L>>2]=Z;c[y>>2]=Y+Z;break}f=(c[y>>2]|0)-Q|0;e=c[G>>2]|0;if(e>>>0>65536)e=0;else{e=65536-e|0;e=e>>>0>f>>>0?f:e}gb(Q+(f-e)|0,P+((c[L>>2]|0)-(c[J>>2]|0)-e)|0,e|0)|0;c[K>>2]=c[M>>2];c[L>>2]=f+(c[J>>2]|0)}}while(0);if(j>>>0<T>>>0)c[I>>2]=j;else c[I>>2]=0;e=l-O|0;if(H>>>0>4294967277){e=H;break}U=j-S+U|0;if(e)la(1,b|0,c[4]|0,e|0)|0;if(!H){e=1;W=106;break}if(!(N>>>0>U>>>0|(e|0)==8192)){e=1;W=106;break}}if((W|0)!=99)if((W|0)==106){i=X;return e|0}ma(0,b|0,c[20+(0-e<<2)>>2]|0)|0;Z=0;i=X;return Z|0}function Ha(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+64|0;d=h;e=d;f=e+56|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(f|0));c[d+8>>2]=1;f=(b|0)==0?d:b;b=c[f>>2]|0;if(b){b=b+-4|0;if(b>>>0>3)e=-2;else g=3}else{b=0;g=3}if((g|0)==3)e=c[100+(b<<2)>>2]|0;d=(a>>>0)/(e>>>0)|0;if(!(c[f+36>>2]|0))b=e;else b=(a>>>0)%(e>>>0)|0;a=(d<<2)+4+(_(e,d)|0)+b+((c[f+8>>2]<<2)+4)|0;i=h;return a|0}function Ia(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;e=a;n=a+b|0;f=b>>>0>15;if(!(e&3)){if(f){i=a+(b+-16)|0;j=606290984;k=-2048144777;l=0;m=1640531535;do{f=j+(_(c[e>>2]|0,-2048144777)|0)|0;f=f<<13|f>>>19;j=_(f,-1640531535)|0;o=e;a=k+(_(c[o+4>>2]|0,-2048144777)|0)|0;a=a<<13|a>>>19;k=_(a,-1640531535)|0;g=l+(_(c[o+8>>2]|0,-2048144777)|0)|0;g=g<<13|g>>>19;l=_(g,-1640531535)|0;h=m+(_(c[o+12>>2]|0,-2048144777)|0)|0;h=h<<13|h>>>19;m=_(h,-1640531535)|0;o=o+16|0;e=o}while(o>>>0<=i>>>0);f=(_(f,1013904226)|0|j>>>31)+(_(a,465361024)|0|k>>>25)+(_(g,2006650880)|0|l>>>20)+(_(h,-423362560)|0|m>>>14)|0}else f=374761393;a=f+b|0;while(1){f=e+4|0;if(f>>>0>n>>>0)break;o=a+(_(c[e>>2]|0,-1028477379)|0)|0;a=_(o<<17|o>>>15,668265263)|0;e=f}while(1){if(e>>>0>=n>>>0)break;o=a+(_(d[e>>0]|0,374761393)|0)|0;a=_(o<<11|o>>>21,-1640531535)|0;e=e+1|0}o=_(a^a>>>15,-2048144777)|0;o=_(o^o>>>13,-1028477379)|0;o=o^o>>>16;o=o>>>8;o=o&255;return o|0}else{if(f){h=a+(b+-16)|0;j=606290984;k=-2048144777;l=0;m=1640531535;do{i=e;i=j+(_(d[i>>0]|d[i+1>>0]<<8|d[i+2>>0]<<16|d[i+3>>0]<<24,-2048144777)|0)|0;i=i<<13|i>>>19;j=_(i,-1640531535)|0;o=e;f=o+4|0;f=k+(_(d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24,-2048144777)|0)|0;f=f<<13|f>>>19;k=_(f,-1640531535)|0;a=o+8|0;a=l+(_(d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24,-2048144777)|0)|0;a=a<<13|a>>>19;l=_(a,-1640531535)|0;g=o+12|0;g=m+(_(d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24,-2048144777)|0)|0;g=g<<13|g>>>19;m=_(g,-1640531535)|0;o=o+16|0;e=o}while(o>>>0<=h>>>0);f=(_(i,1013904226)|0|j>>>31)+(_(f,465361024)|0|k>>>25)+(_(a,2006650880)|0|l>>>20)+(_(g,-423362560)|0|m>>>14)|0}else f=374761393;a=f+b|0;while(1){f=e+4|0;if(f>>>0>n>>>0)break;o=e;o=a+(_(d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24,-1028477379)|0)|0;a=_(o<<17|o>>>15,668265263)|0;e=f}while(1){if(e>>>0>=n>>>0)break;o=a+(_(d[e>>0]|0,374761393)|0)|0;a=_(o<<11|o>>>21,-1640531535)|0;e=e+1|0}o=_(a^a>>>15,-2048144777)|0;o=_(o^o>>>13,-1028477379)|0;o=o^o>>>16;o=o>>>8;o=o&255;return o|0}return 0}function Ja(b,c,d,e,f,g){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=b+4|0;g=oa[e&7](f,c,i,d,d+-1|0,g)|0;a[b>>0]=g;f=b+1|0;a[f>>0]=g>>>8;h=b+2|0;a[h>>0]=g>>>16;e=b+3|0;a[e>>0]=g>>>24;if(g){d=g;d=d+4|0;return d|0}a[b>>0]=d;a[f>>0]=d>>>8;a[h>>0]=d>>>16;a[e>>0]=d>>>24^128;gb(i|0,c|0,d|0)|0;d=d+4|0;return d|0}function Ka(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+144|0;if((c[a+32>>2]|0)<3){b=c[b>>2]|0;e=c[a+72>>2]|0;a=b+16400|0;d=c[a>>2]|0;d=d>>>0<65536?d:65536;hb(e|0,(c[b+16392>>2]|0)+((c[b+16400>>2]|0)-d)|0,d|0)|0;c[b+16392>>2]=e;c[a>>2]=d;return d|0}e=c[b>>2]|0;f=e+262160|0;d=(c[e+262144>>2]|0)-((c[e+262148>>2]|0)+(c[f>>2]|0))|0;d=(d|0)<65536?d:65536;g=c[a+72>>2]|0;h=e+262144|0;hb(g|0,(c[h>>2]|0)+(0-d)|0,d|0)|0;a=e+262148|0;b=(c[h>>2]|0)-(c[a>>2]|0)|0;c[h>>2]=g+d;c[a>>2]=g+(d-b);b=b-d|0;c[f>>2]=b;c[e+262164>>2]=b;a=e+262168|0;if((c[a>>2]|0)>>>0>=b>>>0){h=d;return h|0}c[a>>2]=b;h=d;return h|0}function La(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;if(f>>>0<7){b=-12;return b|0}c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[b+28>>2]=0;i=d[e>>0]|0;j=d[e+1>>0]<<8;g=d[e+2>>0]<<16;h=d[e+3>>0]<<24;if((i&240|j|g|h|0)==407710288){c[b+12>>2]=1;if((b+144|0)==(e|0)){c[b+64>>2]=f;c[b+68>>2]=8;c[b+36>>2]=14;b=f;return b|0}else{c[b+36>>2]=13;b=4;return b|0}}if((i|j|g|h|0)!=407708164){b=-13;return b|0}c[b+12>>2]=0;i=e+4|0;j=a[i>>0]|0;k=j&255;h=k>>>5&1;l=k&16;m=k>>>3&1;n=k>>>2&1;o=m<<3|7;if(o>>>0>f>>>0){g=b+144|0;if((g|0)!=(e|0))gb(g|0,e|0,f|0)|0;c[b+64>>2]=f;c[b+68>>2]=o;c[b+36>>2]=1;b=f;return b|0}g=a[e+5>>0]|0;f=(g&255)>>>4&7;if((k&192|0)!=64){b=-6;return b|0}if(l){b=-7;return b|0}if((j&3)!=0|g<<24>>24<0){b=-8;return b|0}if(f>>>0<4){b=-2;return b|0}if(g&15){b=-8;return b|0}l=Ia(i,o+-5|0)|0;if(l<<24>>24!=(a[e+(o+-1)>>0]|0)){b=-17;return b|0}i=b+4|0;c[i>>2]=h;c[b+8>>2]=n;c[b>>2]=f;g=f+-4|0;if(g>>>0>3)g=-2;else g=c[100+(g<<2)>>2]|0;l=b+48|0;c[l>>2]=g;if(m){r=d[e+6>>0]|0;q=fb(d[e+7>>0]|0,0,8)|0;m=C;p=fb(d[e+8>>0]|0,0,16)|0;m=m|C;j=fb(d[e+9>>0]|0,0,24)|0;m=m|C|d[e+10>>0];f=fb(d[e+11>>0]|0,0,40)|0;m=m|C;k=fb(d[e+12>>0]|0,0,48)|0;k=cb(r|q|p|j|f|0,m|0,k|0,C|0)|0;m=C;f=fb(d[e+13>>0]|0,0,56)|0;f=cb(k|0,m|0,f|0,C|0)|0;m=C;e=b+16|0;c[e>>2]=f;c[e+4>>2]=m;e=b+40|0;c[e>>2]=f;c[e+4>>2]=m}if(n){h=b+96|0;c[b+104>>2]=0;c[h+12>>2]=606290984;c[b+112>>2]=-2048144777;c[h+20>>2]=0;c[b+120>>2]=1640531535;g=h;c[g>>2]=0;c[g+4>>2]=0;c[h+44>>2]=0;h=c[i>>2]|0;g=c[l>>2]|0}g=g+(((h|0)==0&1)<<17)|0;i=b+52|0;if(g>>>0>(c[i>>2]|0)>>>0){j=b+60|0;$a(c[j>>2]|0);k=b+72|0;$a(c[k>>2]|0);c[i>>2]=g;g=c[l>>2]|0;h=_a(g)|0;if(!h){c[j>>2]=h;r=-1;return r|0}if(c[h+-4>>2]&3)db(h|0,0,g|0)|0;c[j>>2]=h;h=c[i>>2]|0;g=_a(h)|0;if(!g){c[k>>2]=g;r=-1;return r|0}if(c[g+-4>>2]&3)db(g|0,0,h|0)|0;c[k>>2]=g}else g=c[b+72>>2]|0;c[b+64>>2]=0;c[b+68>>2]=0;c[b+76>>2]=g;c[b+80>>2]=0;c[b+84>>2]=g;c[b+92>>2]=0;c[b+88>>2]=0;c[b+36>>2]=2;r=o;return r|0}function Ma(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=a+80|0;g=c[m>>2]|0;if(!g){l=a+76|0;c[l>>2]=b;h=b}else{h=a+76|0;l=h;h=c[h>>2]|0}if((h+g|0)==(b|0)){c[m>>2]=g+d;return}i=b-e+d|0;if(i>>>0>65535){c[l>>2]=e;c[m>>2]=i;return}j=a+72|0;k=c[j>>2]|0;i=(h|0)==(k|0);if(!f){if(!i){a=65536-d|0;a=a>>>0>g>>>0?g:a;gb(k|0,h+(g-a)|0,a|0)|0;gb((c[j>>2]|0)+a|0,b|0,d|0)|0;c[l>>2]=c[j>>2];c[m>>2]=a+d;return}if((g+d|0)>>>0>(c[a+52>>2]|0)>>>0){l=65536-d|0;gb(h|0,h+(g-l)|0,l|0)|0;c[m>>2]=l;h=c[j>>2]|0;g=l}gb(h+g|0,b|0,d|0)|0;c[m>>2]=(c[m>>2]|0)+d;return}else{if(i){c[m>>2]=g+d;return}f=(c[a+84>>2]|0)-k|0;i=c[a+88>>2]|0;e=a+92|0;if(i>>>0>65536)i=0;else{i=65536-i|0;i=i>>>0>f>>>0?f:i}gb(k+(f-i)|0,h+(g-(c[e>>2]|0)-i)|0,i|0)|0;c[l>>2]=c[j>>2];c[m>>2]=f+(c[e>>2]|0)+d;return}}function Na(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;i=b;h=e;u=b+f|0;v=e+g|0;if(!g){if((f|0)==1)i=(a[b>>0]|0)!=0;else i=1;z=i<<31>>31;return z|0}w=e+(g+-8)|0;x=e+(g+-5)|0;y=e;q=e+(g+-12)|0;r=w;s=b+(f+-5)|0;t=b+(f+-8)|0;p=b+(f+-15)|0;a:while(1){j=i;i=j+1|0;j=d[j>>0]|0;g=j>>>4;if((g|0)==15){g=15;do{o=i;n=o+1|0;i=n;o=a[o>>0]|0;g=g+(o&255)|0}while(n>>>0<p>>>0&o<<24>>24==-1);if((g|0)<0)break}o=h;m=o+g|0;if(m>>>0>q>>>0){z=11;break}f=i;if((f+g|0)>>>0>t>>>0){z=11;break}else i=f;while(1){l=i;A=l;A=d[A>>0]|d[A+1>>0]<<8|d[A+2>>0]<<16|d[A+3>>0]<<24;l=l+4|0;l=d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24;n=h;k=n;a[k>>0]=A;a[k+1>>0]=A>>8;a[k+2>>0]=A>>16;a[k+3>>0]=A>>24;n=n+4|0;a[n>>0]=l;a[n+1>>0]=l>>8;a[n+2>>0]=l>>16;a[n+3>>0]=l>>24;h=h+8|0;if(h>>>0>=m>>>0)break;else i=i+8|0}k=f+g|0;k=g-((d[k>>0]|d[k+1>>0]<<8)&65535)|0;l=o+k|0;i=f+(g+2)|0;if(l>>>0<e>>>0)break;h=j&15;if((h|0)==15){h=15;do{f=i;if(f>>>0>s>>>0)break a;i=f+1|0;A=a[f>>0]|0;h=h+(A&255)|0}while(A<<24>>24==-1);if((h|0)<0)break}n=o+(g+(h+4))|0;h=n;f=m-l|0;if((f|0)<8){A=c[116+(f<<2)>>2]|0;a[m>>0]=a[l>>0]|0;a[o+(g+1)>>0]=a[o+(k+1)>>0]|0;a[o+(g+2)>>0]=a[o+(k+2)>>0]|0;a[o+(g+3)>>0]=a[o+(k+3)>>0]|0;k=k+(c[148+(f<<2)>>2]|0)|0;l=o+k|0;m=o+(g+4)|0;l=d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24;a[m>>0]=l;a[m+1>>0]=l>>8;a[m+2>>0]=l>>16;a[m+3>>0]=l>>24;k=k-A|0}else{j=l;j=d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24;l=l+4|0;l=d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24;A=m;m=A;a[m>>0]=j;a[m+1>>0]=j>>8;a[m+2>>0]=j>>16;a[m+3>>0]=j>>24;A=A+4|0;a[A>>0]=l;a[A+1>>0]=l>>8;a[A+2>>0]=l>>16;a[A+3>>0]=l>>24;k=k+8|0}j=o+(g+8)|0;f=o+k|0;g=j;if(n>>>0<=q>>>0){g=j;while(1){o=f;l=o;l=d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24;o=o+4|0;o=d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24;A=g;m=A;a[m>>0]=l;a[m+1>>0]=l>>8;a[m+2>>0]=l>>16;a[m+3>>0]=l>>24;A=A+4|0;a[A>>0]=o;a[A+1>>0]=o>>8;a[A+2>>0]=o>>16;a[A+3>>0]=o>>24;g=g+8|0;if(g>>>0<n>>>0)f=f+8|0;else continue a}}if(n>>>0>x>>>0)break;if(j>>>0<w>>>0){g=j;j=g;while(1){m=f;B=m;B=d[B>>0]|d[B+1>>0]<<8|d[B+2>>0]<<16|d[B+3>>0]<<24;m=m+4|0;m=d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24;A=j;l=A;a[l>>0]=B;a[l+1>>0]=B>>8;a[l+2>>0]=B>>16;a[l+3>>0]=B>>24;A=A+4|0;a[A>>0]=m;a[A+1>>0]=m>>8;a[A+2>>0]=m>>16;a[A+3>>0]=m>>24;j=j+8|0;if(j>>>0>=w>>>0)break;else f=f+8|0}f=o+(k+(r-g))|0;g=r}while(1){if(g>>>0>=n>>>0)continue a;a[g>>0]=a[f>>0]|0;f=f+1|0;g=g+1|0}}if((z|0)==11)if(!((i+g|0)!=(u|0)|m>>>0>v>>>0)){gb(o|0,i|0,g|0)|0;B=m-y|0;return B|0}B=b-i+-1|0;return B|0}function Oa(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;l=h;db(f|0,0,16416)|0;o=i>>>0>2113929216;if(o)m=0;else m=((i|0)/255|0)+i+16|0;q=(i|0)<65547;n=g;k=g+i|0;z=g+(i+-12)|0;A=g+(i+-5)|0;if((m|0)<=(j|0))if(q){if(o){h=0;return h|0}a:do{if((i|0)<13)r=n;else{Ua(g,f,2,g);m=g+1|0;u=g;o=m;m=(_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>19;while(1){i=64;r=1;while(1){q=o+r|0;r=i>>>6;if(q>>>0>z>>>0){r=n;break a}p=g+(e[f+(m<<1)>>1]|0)|0;j=m;m=(_(d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24,-1640531535)|0)>>>19;b[f+(j<<1)>>1]=o-u;j=p;if((d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24|0)==(d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24|0))break;else{o=q;i=i+1|0}}i=n;while(1){t=o;if(o>>>0<=i>>>0)break;m=p;if(m>>>0<=g>>>0)break;q=o+-1|0;m=m+-1|0;if((a[q>>0]|0)!=(a[m>>0]|0))break;o=q;p=m}m=o;s=m-n|0;o=l+1|0;if(s>>>0>14){a[l>>0]=-16;r=m+241|0;q=n+14-m|0;m=m+240+((q|0)>-255?q:-255)-n|0;q=(m>>>0)%255|0;i=s+-15|0;while(1){if((i|0)<=254)break;j=o;a[j>>0]=-1;i=i+-255|0;o=j+1|0}a[o>>0]=r-n+(q-m);o=o+1|0}else a[l>>0]=s<<4;m=o+s|0;while(1){y=n;w=y;w=d[w>>0]|d[w+1>>0]<<8|d[w+2>>0]<<16|d[w+3>>0]<<24;y=y+4|0;y=d[y>>0]|d[y+1>>0]<<8|d[y+2>>0]<<16|d[y+3>>0]<<24;j=o;x=j;a[x>>0]=w;a[x+1>>0]=w>>8;a[x+2>>0]=w>>16;a[x+3>>0]=w>>24;j=j+4|0;a[j>>0]=y;a[j+1>>0]=y>>8;a[j+2>>0]=y>>16;a[j+3>>0]=y>>24;o=o+8|0;if(o>>>0>=m>>>0){n=t;break}else n=n+8|0}while(1){r=n;o=n-p&65535;a[m>>0]=o;a[m+1>>0]=o>>8;m=m+2|0;o=Va(r+4|0,p+4|0,A)|0;r=r+(o+4)|0;n=d[l>>0]|0;if(o>>>0>14){a[l>>0]=n+15;p=o+-15|0;n=14-o|0;n=o+495+(n>>>0>4294966786?n:-510)|0;o=(n>>>0)%510|0;l=p;while(1){if(l>>>0<=509)break;j=m;a[j>>0]=-1;a[j+1>>0]=-1;m=j+2|0;l=l+-510|0}l=p+(o-n)|0;if(l>>>0>254){a[m>>0]=-1;l=l+-255|0;m=m+1|0}j=m;a[j>>0]=l;l=j+1|0}else{a[l>>0]=n+o;l=m}n=r;if(n>>>0>z>>>0)break a;Ua(n+-2|0,f,2,g);m=r;p=g+(e[f+((_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>19<<1)>>1]|0)|0;Ua(n,f,2,g);o=p;if((o+65535|0)>>>0<n>>>0)break;if((d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24|0)!=(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24|0))break;a[l>>0]=0;n=r;m=l+1|0}m=n+1|0;n=r;o=m;m=(_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>19}}}while(0);i=r;q=k-r|0;if(q>>>0>14){p=l;a[p>>0]=-16;o=k+241|0;m=r+14-k|0;k=k+(m>>>0>4294967041?m:-255)+240-r|0;m=(k>>>0)%255|0;n=q+-15|0;while(1){l=p+1|0;if(n>>>0<=254)break;a[l>>0]=-1;p=l;n=n+-255|0}a[l>>0]=o-r+(m-k);k=p+2|0}else{k=l;a[k>>0]=q<<4;l=k;k=k+1|0}gb(k|0,i|0,q|0)|0;h=l+(q+1)-h|0;return h|0}else{if(o){h=0;return h|0}Ua(g,f,0,g);m=g+1|0;o=m;m=(_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>20;b:while(1){r=64;s=1;while(1){t=o;i=o;o=o+s|0;j=r;r=r+1|0;s=j>>>6;if(o>>>0>z>>>0){r=n;break b}p=c[f+(m<<2)>>2]|0;q=m;m=(_(d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24,-1640531535)|0)>>>20;c[f+(q<<2)>>2]=t;q=p;if((q+65535|0)>>>0<i>>>0)continue;if((d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24|0)==(d[i>>0]|d[i+1>>0]<<8|d[i+2>>0]<<16|d[i+3>>0]<<24|0))break}i=n;while(1){m=t;if(m>>>0<=i>>>0)break;o=p;if(o>>>0<=g>>>0)break;q=m+-1|0;m=o+-1|0;if((a[q>>0]|0)!=(a[m>>0]|0))break;t=q;p=m}s=t-n|0;o=l+1|0;if(s>>>0>14){a[l>>0]=-16;m=t+241|0;q=n+14-t|0;q=t+240+((q|0)>-255?q:-255)-n|0;i=(q>>>0)%255|0;r=s+-15|0;while(1){if((r|0)<=254)break;j=o;a[j>>0]=-1;r=r+-255|0;o=j+1|0}a[o>>0]=m-n+(i-q);o=o+1|0}else a[l>>0]=s<<4;m=o+s|0;while(1){y=n;w=y;w=d[w>>0]|d[w+1>>0]<<8|d[w+2>>0]<<16|d[w+3>>0]<<24;y=y+4|0;y=d[y>>0]|d[y+1>>0]<<8|d[y+2>>0]<<16|d[y+3>>0]<<24;j=o;x=j;a[x>>0]=w;a[x+1>>0]=w>>8;a[x+2>>0]=w>>16;a[x+3>>0]=w>>24;j=j+4|0;a[j>>0]=y;a[j+1>>0]=y>>8;a[j+2>>0]=y>>16;a[j+3>>0]=y>>24;o=o+8|0;if(o>>>0>=m>>>0){n=t;break}else n=n+8|0}while(1){r=n;o=n-p&65535;a[m>>0]=o;a[m+1>>0]=o>>8;m=m+2|0;o=Va(r+4|0,p+4|0,A)|0;r=r+(o+4)|0;n=d[l>>0]|0;if(o>>>0>14){a[l>>0]=n+15;p=o+-15|0;n=14-o|0;n=o+495+(n>>>0>4294966786?n:-510)|0;o=(n>>>0)%510|0;l=p;while(1){if(l>>>0<=509)break;j=m;a[j>>0]=-1;a[j+1>>0]=-1;m=j+2|0;l=l+-510|0}l=p+(o-n)|0;if(l>>>0>254){a[m>>0]=-1;l=l+-255|0;m=m+1|0}j=m;a[j>>0]=l;l=j+1|0}else{a[l>>0]=n+o;l=m}n=r;if(n>>>0>z>>>0)break b;Ua(n+-2|0,f,0,g);m=r;p=c[f+((_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>20<<2)>>2]|0;Ua(n,f,0,g);o=p;if((o+65535|0)>>>0<n>>>0)break;if((d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24|0)!=(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24|0))break;a[l>>0]=0;n=r;m=l+1|0}m=n+1|0;n=r;o=m;m=(_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>20}i=r;q=k-r|0;if(q>>>0>14){a[l>>0]=-16;p=k+241|0;n=r+14-k|0;k=k+(n>>>0>4294967041?n:-255)+240-r|0;n=(k>>>0)%255|0;o=q+-15|0;while(1){m=l+1|0;if(o>>>0<=254)break;a[m>>0]=-1;l=m;o=o+-255|0}a[m>>0]=p-r+(n-k);k=l+2|0}else{k=l;a[k>>0]=q<<4;m=k;k=k+1|0}gb(k|0,i|0,q|0)|0;h=m+(q+1)-h|0;return h|0}y=h+j|0;if(!q){if(o){h=0;return h|0}Ua(g,f,0,g);m=g+1|0;o=m;m=(_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>20;c:while(1){r=64;s=1;while(1){t=o;i=o;o=o+s|0;w=r;r=r+1|0;s=w>>>6;if(o>>>0>z>>>0){x=n;v=l;l=160;break c}q=c[f+(m<<2)>>2]|0;p=m;m=(_(d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24,-1640531535)|0)>>>20;c[f+(p<<2)>>2]=t;p=q;if((p+65535|0)>>>0<i>>>0)continue;if((d[p>>0]|d[p+1>>0]<<8|d[p+2>>0]<<16|d[p+3>>0]<<24|0)==(d[i>>0]|d[i+1>>0]<<8|d[i+2>>0]<<16|d[i+3>>0]<<24|0))break}i=n;while(1){m=t;if(m>>>0<=i>>>0)break;o=q;if(o>>>0<=g>>>0)break;p=m+-1|0;m=o+-1|0;if((a[p>>0]|0)!=(a[m>>0]|0))break;t=p;q=m}s=t-n|0;m=l+1|0;if((l+(s+8+((s>>>0)/255|0)+1)|0)>>>0>y>>>0){u=0;l=168;break}if(s>>>0>14){a[l>>0]=-16;o=t+241|0;p=n+14-t|0;p=t+240+((p|0)>-255?p:-255)-n|0;i=(p>>>0)%255|0;r=s+-15|0;while(1){if((r|0)<=254)break;w=m;a[w>>0]=-1;r=r+-255|0;m=w+1|0}a[m>>0]=o-n+(i-p);m=m+1|0}else a[l>>0]=s<<4;o=m+s|0;while(1){s=n;i=s;i=d[i>>0]|d[i+1>>0]<<8|d[i+2>>0]<<16|d[i+3>>0]<<24;s=s+4|0;s=d[s>>0]|d[s+1>>0]<<8|d[s+2>>0]<<16|d[s+3>>0]<<24;w=m;r=w;a[r>>0]=i;a[r+1>>0]=i>>8;a[r+2>>0]=i>>16;a[r+3>>0]=i>>24;w=w+4|0;a[w>>0]=s;a[w+1>>0]=s>>8;a[w+2>>0]=s>>16;a[w+3>>0]=s>>24;m=m+8|0;if(m>>>0>=o>>>0){n=t;break}else n=n+8|0}while(1){w=n;m=n-q&65535;a[o>>0]=m;a[o+1>>0]=m>>8;m=o+2|0;p=Va(w+4|0,q+4|0,A)|0;n=w+(p+4)|0;if((o+((p>>>8)+8)|0)>>>0>y>>>0){u=0;l=168;break c}o=d[l>>0]|0;if(p>>>0>14){a[l>>0]=o+15;q=p+-15|0;o=14-p|0;o=p+495+(o>>>0>4294966786?o:-510)|0;p=(o>>>0)%510|0;l=q;while(1){if(l>>>0<=509)break;w=m;a[w>>0]=-1;a[w+1>>0]=-1;m=w+2|0;l=l+-510|0}l=q+(p-o)|0;if(l>>>0>254){a[m>>0]=-1;l=l+-255|0;m=m+1|0}w=m;a[w>>0]=l;l=w+1|0}else{a[l>>0]=o+p;l=m}o=n;if(o>>>0>z>>>0){x=n;v=l;l=160;break c}Ua(o+-2|0,f,0,g);m=n;q=c[f+((_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>20<<2)>>2]|0;Ua(o,f,0,g);p=q;if((p+65535|0)>>>0<o>>>0)break;if((d[p>>0]|d[p+1>>0]<<8|d[p+2>>0]<<16|d[p+3>>0]<<24|0)!=(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24|0))break;a[l>>0]=0;o=l+1|0}m=o+1|0;o=m;m=(_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>20}if((l|0)==160){i=x;q=k-x|0;if((v-h+q+1+(((q+240|0)>>>0)/255|0)|0)>>>0>j>>>0){h=0;return h|0}if(q>>>0>14){p=v;a[p>>0]=-16;o=k+241|0;m=x+14-k|0;k=k+(m>>>0>4294967041?m:-255)+240-x|0;m=(k>>>0)%255|0;n=q+-15|0;while(1){l=p+1|0;if(n>>>0<=254)break;a[l>>0]=-1;p=l;n=n+-255|0}a[l>>0]=o-x+(m-k);k=p+2|0}else{k=v;a[k>>0]=q<<4;l=k;k=k+1|0}gb(k|0,i|0,q|0)|0;h=l+(q+1)-h|0;return h|0}else if((l|0)==168)return u|0}else{if(o){h=0;return h|0}d:do{if((i|0)>=13){Ua(g,f,2,g);m=g+1|0;v=g;o=m;m=(_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>19;e:while(1){r=64;s=1;while(1){q=o+s|0;s=r>>>6;if(q>>>0>z>>>0){w=n;p=l;break d}i=g+(e[f+(m<<1)>>1]|0)|0;x=m;m=(_(d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24,-1640531535)|0)>>>19;b[f+(x<<1)>>1]=o-v;x=i;if((d[x>>0]|d[x+1>>0]<<8|d[x+2>>0]<<16|d[x+3>>0]<<24|0)==(d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24|0))break;else{o=q;r=r+1|0}}r=n;while(1){u=o;if(o>>>0<=r>>>0)break;m=i;if(m>>>0<=g>>>0)break;q=o+-1|0;m=m+-1|0;if((a[q>>0]|0)!=(a[m>>0]|0))break;o=q;i=m}t=o-n|0;m=l+1|0;if((l+(t+8+((t>>>0)/255|0)+1)|0)>>>0>y>>>0){u=0;l=168;break}if(t>>>0>14){a[l>>0]=-16;s=o+241|0;q=n+14-o|0;o=o+240+((q|0)>-255?q:-255)-n|0;q=(o>>>0)%255|0;r=t+-15|0;while(1){if((r|0)<=254)break;x=m;a[x>>0]=-1;r=r+-255|0;m=x+1|0}a[m>>0]=s-n+(q-o);m=m+1|0}else a[l>>0]=t<<4;o=m+t|0;while(1){t=n;r=t;r=d[r>>0]|d[r+1>>0]<<8|d[r+2>>0]<<16|d[r+3>>0]<<24;t=t+4|0;t=d[t>>0]|d[t+1>>0]<<8|d[t+2>>0]<<16|d[t+3>>0]<<24;x=m;s=x;a[s>>0]=r;a[s+1>>0]=r>>8;a[s+2>>0]=r>>16;a[s+3>>0]=r>>24;x=x+4|0;a[x>>0]=t;a[x+1>>0]=t>>8;a[x+2>>0]=t>>16;a[x+3>>0]=t>>24;m=m+8|0;if(m>>>0>=o>>>0){n=u;break}else n=n+8|0}while(1){x=n;m=n-i&65535;a[o>>0]=m;a[o+1>>0]=m>>8;m=o+2|0;q=Va(x+4|0,i+4|0,A)|0;n=x+(q+4)|0;if((o+((q>>>8)+8)|0)>>>0>y>>>0){u=0;l=168;break e}o=d[l>>0]|0;if(q>>>0>14){a[l>>0]=o+15;i=q+-15|0;o=14-q|0;o=q+495+(o>>>0>4294966786?o:-510)|0;q=(o>>>0)%510|0;l=i;while(1){if(l>>>0<=509)break;x=m;a[x>>0]=-1;a[x+1>>0]=-1;m=x+2|0;l=l+-510|0}l=i+(q-o)|0;if(l>>>0>254){a[m>>0]=-1;l=l+-255|0;m=m+1|0}x=m;a[x>>0]=l;l=x+1|0}else{a[l>>0]=o+q;l=m}m=n;if(m>>>0>z>>>0){w=n;p=l;break d}Ua(m+-2|0,f,2,g);o=n;i=g+(e[f+((_(d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24,-1640531535)|0)>>>19<<1)>>1]|0)|0;Ua(m,f,2,g);q=i;if((q+65535|0)>>>0<m>>>0)break;if((d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24|0)!=(d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24|0))break;a[l>>0]=0;o=l+1|0}m=m+1|0;o=m;m=(_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>19}if((l|0)==168)return u|0}else{w=n;p=l}}while(0);i=w;q=k-w|0;if((p-h+q+1+(((q+240|0)>>>0)/255|0)|0)>>>0>j>>>0){h=0;return h|0}if(q>>>0>14){a[p>>0]=-16;o=k+241|0;m=w+14-k|0;k=k+(m>>>0>4294967041?m:-255)+240-w|0;m=(k>>>0)%255|0;n=q+-15|0;while(1){l=p+1|0;if(n>>>0<=254)break;a[l>>0]=-1;p=l;n=n+-255|0}a[l>>0]=o-w+(m-k);k=p+2|0}else{k=p;a[k>>0]=q<<4;l=k;k=k+1|0}gb(k|0,i|0,q|0)|0;h=l+(q+1)-h|0;return h|0}return 0}function Pa(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;G=e;j=f;F=b+16392|0;n=c[F>>2]|0;I=b+16400|0;o=c[I>>2]|0;p=n+o|0;k=n;if(c[b+16388>>2]|0){g=0;return g|0}H=b+16384|0;i=c[H>>2]|0;if(i>>>0>2147483648?1:i>>>0>((o|0)!=0&p>>>0<e>>>0?p:G)>>>0){i=i+-65536|0;k=0;while(1){if((k|0)==4096)break;E=b+(k<<2)|0;D=c[E>>2]|0;c[E>>2]=D>>>0<i>>>0?0:D-i|0;k=k+1|0}c[H>>2]=65536;i=c[I>>2]|0;if(i>>>0>65536){c[I>>2]=65536;i=65536}k=n+(o-i)|0;c[F>>2]=k;m=k;r=65536;l=i}else{m=n;r=i;l=o}i=e+g|0;if(i>>>0>m>>>0&i>>>0<p>>>0){k=p-i|0;if(k>>>0>65536){k=65536;l=65536}else{l=k;E=l>>>0<4;k=E?0:l;l=E?0:l}c[I>>2]=l;E=n+(o-k)|0;c[F>>2]=E;l=k;k=E}m=l>>>0<65536&l>>>0<r>>>0;if((p|0)==(e|0)){t=e+(0-l)|0;q=e;x=e+(g+-12)|0;y=e+(g+-5)|0;z=f+h|0;k=g>>>0>2113929216;a:do{if(m)if(!k){u=e+(0-r)|0;v=t;b:do{if((g|0)>=13){w=u;Ua(e,b,1,w);k=e+1|0;l=k;k=(_(d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24,-1640531535)|0)>>>20;while(1){p=64;r=1;while(1){m=l+r|0;G=p;p=p+1|0;r=G>>>6;if(m>>>0>x>>>0)break b;n=w+(c[b+(k<<2)>>2]|0)|0;G=k;k=(_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>20;c[b+(G<<2)>>2]=l-u;if(n>>>0<t>>>0){l=m;continue}o=n;if((o+65535|0)>>>0<l>>>0){l=m;continue}if((d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24|0)==(d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24|0))break;else l=m}o=q;p=v;while(1){s=l;if(l>>>0<=o>>>0)break;k=n;if(k>>>0<=p>>>0)break;m=l+-1|0;k=k+-1|0;if((a[m>>0]|0)!=(a[k>>0]|0))break;l=m;n=k}r=l-q|0;k=j+1|0;if((j+(r+8+((r>>>0)/255|0)+1)|0)>>>0>z>>>0){i=0;break a}if(r>>>0>14){a[j>>0]=-16;p=l+241|0;m=q+14-l|0;l=l+240+((m|0)>-255?m:-255)-q|0;m=(l>>>0)%255|0;o=r+-15|0;while(1){if((o|0)<=254)break;G=k;a[G>>0]=-1;o=o+-255|0;k=G+1|0}a[k>>0]=p-q+(m-l);k=k+1|0}else a[j>>0]=r<<4;l=k+r|0;while(1){F=q;E=F;E=d[E>>0]|d[E+1>>0]<<8|d[E+2>>0]<<16|d[E+3>>0]<<24;F=F+4|0;F=d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24;G=k;e=G;a[e>>0]=E;a[e+1>>0]=E>>8;a[e+2>>0]=E>>16;a[e+3>>0]=E>>24;G=G+4|0;a[G>>0]=F;a[G+1>>0]=F>>8;a[G+2>>0]=F>>16;a[G+3>>0]=F>>24;k=k+8|0;if(k>>>0>=l>>>0){q=s;break}else q=q+8|0}while(1){G=q;k=q-n&65535;a[l>>0]=k;a[l+1>>0]=k>>8;k=l+2|0;m=Va(G+4|0,n+4|0,y)|0;q=G+(m+4)|0;if((l+((m>>>8)+8)|0)>>>0>z>>>0){i=0;break a}l=d[j>>0]|0;if(m>>>0>14){a[j>>0]=l+15;n=m+-15|0;l=14-m|0;l=m+495+(l>>>0>4294966786?l:-510)|0;m=(l>>>0)%510|0;j=n;while(1){if(j>>>0<=509)break;G=k;a[G>>0]=-1;a[G+1>>0]=-1;k=G+2|0;j=j+-510|0}j=n+(m-l)|0;if(j>>>0>254){a[k>>0]=-1;j=j+-255|0;k=k+1|0}G=k;a[G>>0]=j;j=G+1|0}else{a[j>>0]=l+m;j=k}k=q;if(k>>>0>x>>>0)break b;Ua(k+-2|0,b,1,w);l=q;n=w+(c[b+((_(d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24,-1640531535)|0)>>>20<<2)>>2]|0)|0;Ua(k,b,1,w);m=n;if(m>>>0<t>>>0|(m+65535|0)>>>0<k>>>0)break;if((d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24|0)!=(d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24|0))break;a[j>>0]=0;l=j+1|0}k=k+1|0;l=k;k=(_(d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24,-1640531535)|0)>>>20}}}while(0);p=q;o=i-q|0;if((j-f+o+1+(((o+240|0)>>>0)/255|0)|0)>>>0<=h>>>0){if(o>>>0>14){n=j;a[n>>0]=-16;m=i+241|0;k=q+14-i|0;i=i+(k>>>0>4294967041?k:-255)+240-q|0;k=(i>>>0)%255|0;l=o+-15|0;while(1){j=n+1|0;if(l>>>0<=254)break;a[j>>0]=-1;n=j;l=l+-255|0}a[j>>0]=m-q+(k-i);i=n+2|0}else{i=j;a[i>>0]=o<<4;j=i;i=i+1|0}gb(i|0,p|0,o|0)|0;i=j+(o+1)-f|0}else i=0}else i=0;else if(!k){v=e+(0-r)|0;c:do{if((g|0)>=13){u=v;Ua(e,b,1,u);k=e+1|0;l=k;k=(_(d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24,-1640531535)|0)>>>20;while(1){p=64;r=1;while(1){m=l+r|0;G=p;p=p+1|0;r=G>>>6;if(m>>>0>x>>>0)break c;n=u+(c[b+(k<<2)>>2]|0)|0;o=k;k=(_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>20;c[b+(o<<2)>>2]=l-v;o=n;if((o+65535|0)>>>0<l>>>0){l=m;continue}if((d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24|0)==(d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24|0))break;else l=m}o=q;p=t;while(1){s=l;if(l>>>0<=o>>>0)break;k=n;if(k>>>0<=p>>>0)break;m=l+-1|0;k=k+-1|0;if((a[m>>0]|0)!=(a[k>>0]|0))break;l=m;n=k}k=l;r=k-q|0;l=j+1|0;if((j+(r+8+((r>>>0)/255|0)+1)|0)>>>0>z>>>0){i=0;break a}if(r>>>0>14){a[j>>0]=-16;p=k+241|0;m=q+14-k|0;k=k+240+((m|0)>-255?m:-255)-q|0;m=(k>>>0)%255|0;o=r+-15|0;while(1){if((o|0)<=254)break;G=l;a[G>>0]=-1;o=o+-255|0;l=G+1|0}a[l>>0]=p-q+(m-k);l=l+1|0}else a[j>>0]=r<<4;m=l+r|0;k=q;while(1){F=k;E=F;E=d[E>>0]|d[E+1>>0]<<8|d[E+2>>0]<<16|d[E+3>>0]<<24;F=F+4|0;F=d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24;G=l;e=G;a[e>>0]=E;a[e+1>>0]=E>>8;a[e+2>>0]=E>>16;a[e+3>>0]=E>>24;G=G+4|0;a[G>>0]=F;a[G+1>>0]=F>>8;a[G+2>>0]=F>>16;a[G+3>>0]=F>>24;l=l+8|0;if(l>>>0>=m>>>0){q=s;l=m;break}else k=k+8|0}while(1){G=q;k=q-n&65535;a[l>>0]=k;a[l+1>>0]=k>>8;k=l+2|0;m=Va(G+4|0,n+4|0,y)|0;q=G+(m+4)|0;if((l+((m>>>8)+8)|0)>>>0>z>>>0){i=0;break a}l=d[j>>0]|0;if(m>>>0>14){a[j>>0]=l+15;n=m+-15|0;l=14-m|0;l=m+495+(l>>>0>4294966786?l:-510)|0;m=(l>>>0)%510|0;j=n;while(1){if(j>>>0<=509)break;G=k;a[G>>0]=-1;a[G+1>>0]=-1;k=G+2|0;j=j+-510|0}j=n+(m-l)|0;if(j>>>0>254){a[k>>0]=-1;j=j+-255|0;k=k+1|0}G=k;a[G>>0]=j;j=G+1|0}else{a[j>>0]=l+m;j=k}k=q;if(k>>>0>x>>>0)break c;Ua(k+-2|0,b,1,u);l=q;n=u+(c[b+((_(d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24,-1640531535)|0)>>>20<<2)>>2]|0)|0;Ua(k,b,1,u);m=n;if((m+65535|0)>>>0<k>>>0)break;if((d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24|0)!=(d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24|0))break;a[j>>0]=0;l=j+1|0}k=k+1|0;l=k;k=(_(d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24,-1640531535)|0)>>>20}}}while(0);p=q;o=i-q|0;if((j-f+o+1+(((o+240|0)>>>0)/255|0)|0)>>>0<=h>>>0){if(o>>>0>14){a[j>>0]=-16;n=i+241|0;l=q+14-i|0;i=i+(l>>>0>4294967041?l:-255)+240-q|0;l=(i>>>0)%255|0;m=o+-15|0;while(1){k=j+1|0;if(m>>>0<=254)break;a[k>>0]=-1;j=k;m=m+-255|0}a[k>>0]=n-q+(l-i);i=j+2|0}else{i=j;a[i>>0]=o<<4;k=i;i=i+1|0}gb(i|0,p|0,o|0)|0;i=k+(o+1)-f|0}else i=0}else i=0}while(0);c[I>>2]=(c[I>>2]|0)+g;c[H>>2]=(c[H>>2]|0)+g;g=i;return g|0}d:do{if(m){E=e+(0-l)|0;D=k;y=D+l|0;q=e;z=y-q|0;A=e+(g+-12)|0;B=e+(g+-5)|0;C=f+h|0;if(g>>>0<=2113929216){w=e+(0-r)|0;e:do{if((g|0)>=13){x=w;Ua(e,b,1,x);l=e+1|0;m=l;l=(_(d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24,-1640531535)|0)>>>20;while(1){s=64;t=1;while(1){p=m+t|0;v=s;s=s+1|0;t=v>>>6;if(p>>>0>A>>>0)break e;o=x+(c[b+(l<<2)>>2]|0)|0;v=o>>>0<e>>>0;n=v?z:0;v=v?k:G;u=l;l=(_(d[p>>0]|d[p+1>>0]<<8|d[p+2>>0]<<16|d[p+3>>0]<<24,-1640531535)|0)>>>20;c[b+(u<<2)>>2]=m-w;if(o>>>0<E>>>0){m=p;continue}r=o;if((r+65535|0)>>>0<m>>>0){m=p;continue}u=r+n|0;if((d[u>>0]|d[u+1>>0]<<8|d[u+2>>0]<<16|d[u+3>>0]<<24|0)==(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24|0))break;else m=p}r=q;s=v;t=n+-1|0;while(1){u=m;if(m>>>0<=r>>>0)break;l=o;if((l+n|0)>>>0<=s>>>0)break;p=m+-1|0;if((a[p>>0]|0)!=(a[l+t>>0]|0))break;m=p;o=l+-1|0}t=m-q|0;l=j+1|0;if((j+(t+8+((t>>>0)/255|0)+1)|0)>>>0>C>>>0){j=F;i=0;break d}if(t>>>0>14){a[j>>0]=-16;s=m+241|0;p=q+14-m|0;m=m+240+((p|0)>-255?p:-255)-q|0;p=(m>>>0)%255|0;r=t+-15|0;while(1){if((r|0)<=254)break;J=l;a[J>>0]=-1;r=r+-255|0;l=J+1|0}a[l>>0]=s-q+(p-m);l=l+1|0}else a[j>>0]=t<<4;m=l+t|0;while(1){t=q;r=t;r=d[r>>0]|d[r+1>>0]<<8|d[r+2>>0]<<16|d[r+3>>0]<<24;t=t+4|0;t=d[t>>0]|d[t+1>>0]<<8|d[t+2>>0]<<16|d[t+3>>0]<<24;J=l;s=J;a[s>>0]=r;a[s+1>>0]=r>>8;a[s+2>>0]=r>>16;a[s+3>>0]=r>>24;J=J+4|0;a[J>>0]=t;a[J+1>>0]=t>>8;a[J+2>>0]=t>>16;a[J+3>>0]=t>>24;l=l+8|0;if(l>>>0>=m>>>0){q=u;r=v;s=m;break}else q=q+8|0}while(1){p=q;m=o;l=q-o&65535;a[s>>0]=l;a[s+1>>0]=l>>8;l=s+2|0;if((r|0)==(D|0)){J=p+(y-(m+n))|0;J=J>>>0>B>>>0?B:J;o=Va(p+4|0,m+(n+4)|0,J)|0;m=o+4|0;n=p+m|0;if((n|0)==(J|0)){J=Va(n,e,B)|0;n=p+(m+J)|0;o=o+J|0}}else{o=Va(p+4|0,m+4|0,B)|0;n=p+(o+4)|0}q=n;if((s+((o>>>8)+8)|0)>>>0>C>>>0){j=F;i=0;break d}m=d[j>>0]|0;if(o>>>0>14){a[j>>0]=m+15;p=o+-15|0;m=14-o|0;m=o+495+(m>>>0>4294966786?m:-510)|0;o=(m>>>0)%510|0;j=p;while(1){if(j>>>0<=509)break;J=l;a[J>>0]=-1;a[J+1>>0]=-1;l=J+2|0;j=j+-510|0}j=p+(o-m)|0;if(j>>>0>254){a[l>>0]=-1;j=j+-255|0;l=l+1|0}J=l;a[J>>0]=j;j=J+1|0}else{a[j>>0]=m+o;j=l}if(n>>>0>A>>>0)break e;Ua(n+-2|0,b,1,x);o=x+(c[b+((_(d[n>>0]|d[n+1>>0]<<8|d[n+2>>0]<<16|d[n+3>>0]<<24,-1640531535)|0)>>>20<<2)>>2]|0)|0;m=o>>>0<e>>>0;p=m?z:0;Ua(n,b,1,x);l=o;if(l>>>0<E>>>0|(l+65535|0)>>>0<n>>>0)break;J=l+p|0;if((d[J>>0]|d[J+1>>0]<<8|d[J+2>>0]<<16|d[J+3>>0]<<24|0)!=(d[n>>0]|d[n+1>>0]<<8|d[n+2>>0]<<16|d[n+3>>0]<<24|0))break;a[j>>0]=0;r=m?k:G;s=j+1|0;n=p}l=n+1|0;m=l;l=(_(d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24,-1640531535)|0)>>>20}}}while(0);o=q;p=i-q|0;if((j-f+p+1+(((p+240|0)>>>0)/255|0)|0)>>>0<=h>>>0){if(p>>>0>14){a[j>>0]=-16;n=i+241|0;l=q+14-i|0;i=i+(l>>>0>4294967041?l:-255)+240-q|0;l=(i>>>0)%255|0;m=p+-15|0;while(1){k=j+1|0;if(m>>>0<=254)break;a[k>>0]=-1;j=k;m=m+-255|0}a[k>>0]=n-q+(l-i);i=j+2|0}else{i=j;a[i>>0]=p<<4;k=i;i=i+1|0}gb(i|0,o|0,p|0)|0;j=F;i=k+(p+1)-f|0}else{j=F;i=0}}else{j=F;i=0}}else{D=k;y=D+l|0;l=e;z=y-l|0;A=e+(g+-12)|0;B=e+(g+-5)|0;C=f+h|0;if(g>>>0<=2113929216){w=e+(0-r)|0;f:do{if((g|0)<13)q=l;else{x=w;Ua(e,b,1,x);m=e+1|0;n=m;m=(_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>20;while(1){s=64;t=1;while(1){q=n+t|0;J=s;s=s+1|0;t=J>>>6;if(q>>>0>A>>>0){q=l;break f}o=x+(c[b+(m<<2)>>2]|0)|0;v=o>>>0<e>>>0;p=v?z:0;v=v?k:G;r=m;m=(_(d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24,-1640531535)|0)>>>20;c[b+(r<<2)>>2]=n-w;r=o;if((r+65535|0)>>>0<n>>>0){n=q;continue}J=r+p|0;if((d[J>>0]|d[J+1>>0]<<8|d[J+2>>0]<<16|d[J+3>>0]<<24|0)==(d[n>>0]|d[n+1>>0]<<8|d[n+2>>0]<<16|d[n+3>>0]<<24|0))break;else n=q}r=l;s=v;t=p+-1|0;while(1){u=n;if(n>>>0<=r>>>0)break;m=o;if((m+p|0)>>>0<=s>>>0)break;q=n+-1|0;if((a[q>>0]|0)!=(a[m+t>>0]|0))break;n=q;o=m+-1|0}t=n-l|0;m=j+1|0;if((j+(t+8+((t>>>0)/255|0)+1)|0)>>>0>C>>>0){j=F;i=0;break d}if(t>>>0>14){a[j>>0]=-16;s=n+241|0;q=l+14-n|0;n=n+240+((q|0)>-255?q:-255)-l|0;q=(n>>>0)%255|0;r=t+-15|0;while(1){if((r|0)<=254)break;J=m;a[J>>0]=-1;r=r+-255|0;m=J+1|0}a[m>>0]=s-l+(q-n);m=m+1|0}else a[j>>0]=t<<4;n=m+t|0;while(1){E=l;s=E;s=d[s>>0]|d[s+1>>0]<<8|d[s+2>>0]<<16|d[s+3>>0]<<24;E=E+4|0;E=d[E>>0]|d[E+1>>0]<<8|d[E+2>>0]<<16|d[E+3>>0]<<24;J=m;t=J;a[t>>0]=s;a[t+1>>0]=s>>8;a[t+2>>0]=s>>16;a[t+3>>0]=s>>24;J=J+4|0;a[J>>0]=E;a[J+1>>0]=E>>8;a[J+2>>0]=E>>16;a[J+3>>0]=E>>24;m=m+8|0;if(m>>>0>=n>>>0){l=u;r=v;s=n;break}else l=l+8|0}while(1){q=l;n=o;m=l-o&65535;a[s>>0]=m;a[s+1>>0]=m>>8;m=s+2|0;if((r|0)==(D|0)){J=q+(y-(n+p))|0;J=J>>>0>B>>>0?B:J;o=Va(q+4|0,n+(p+4)|0,J)|0;l=o+4|0;n=q+l|0;if((n|0)==(J|0)){J=Va(n,e,B)|0;q=q+(l+J)|0;o=o+J|0}else q=n}else{o=Va(q+4|0,n+4|0,B)|0;q=q+(o+4)|0}l=q;if((s+((o>>>8)+8)|0)>>>0>C>>>0){j=F;i=0;break d}n=d[j>>0]|0;if(o>>>0>14){a[j>>0]=n+15;p=o+-15|0;n=14-o|0;n=o+495+(n>>>0>4294966786?n:-510)|0;o=(n>>>0)%510|0;j=p;while(1){if(j>>>0<=509)break;J=m;a[J>>0]=-1;a[J+1>>0]=-1;m=J+2|0;j=j+-510|0}j=p+(o-n)|0;if(j>>>0>254){a[m>>0]=-1;j=j+-255|0;m=m+1|0}J=m;a[J>>0]=j;j=J+1|0}else{a[j>>0]=n+o;j=m}if(q>>>0>A>>>0){q=l;break f}Ua(q+-2|0,b,1,x);o=x+(c[b+((_(d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24,-1640531535)|0)>>>20<<2)>>2]|0)|0;n=o>>>0<e>>>0;p=n?z:0;Ua(q,b,1,x);m=o;if((m+65535|0)>>>0<q>>>0)break;J=m+p|0;if((d[J>>0]|d[J+1>>0]<<8|d[J+2>>0]<<16|d[J+3>>0]<<24|0)!=(d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24|0))break;a[j>>0]=0;r=n?k:G;s=j+1|0}m=q+1|0;n=m;m=(_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>20}}}while(0);o=q;p=i-q|0;if((j-f+p+1+(((p+240|0)>>>0)/255|0)|0)>>>0<=h>>>0){if(p>>>0>14){a[j>>0]=-16;n=i+241|0;l=q+14-i|0;i=i+(l>>>0>4294967041?l:-255)+240-q|0;l=(i>>>0)%255|0;m=p+-15|0;while(1){k=j+1|0;if(m>>>0<=254)break;a[k>>0]=-1;j=k;m=m+-255|0}a[k>>0]=n-q+(l-i);i=j+2|0}else{i=j;a[i>>0]=p<<4;k=i;i=i+1|0}gb(i|0,o|0,p|0)|0;j=F;i=k+(p+1)-f|0}else{j=F;i=0}}else{j=F;i=0}}}while(0);c[j>>2]=G;c[I>>2]=g;c[H>>2]=(c[H>>2]|0)+g;J=i;return J|0}function Qa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(d>>>0>2113929216)f=0;else f=((d|0)/255|0)+d+16|0;if((f|0)>(e|0)){d=Ya(a,b,c,d,e,1)|0;return d|0}else{d=Ya(a,b,c,d,e,0)|0;return d|0}return 0}function Ra(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;n=b+e|0;f=a;f=cb(c[f>>2]|0,c[f+4>>2]|0,e|0,0)|0;o=a;c[o>>2]=f;c[o+4>>2]=C;o=a+44|0;f=c[o>>2]|0;if((f+e|0)>>>0<16){gb(a+28+f|0,b|0,e|0)|0;c[o>>2]=(c[o>>2]|0)+e;return}if(!f)f=b;else{l=a+28|0;gb(l+f|0,b|0,16-f|0)|0;l=_(d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24,-2048144777)|0;f=a+12|0;l=(c[f>>2]|0)+l|0;c[f>>2]=_(l<<13|l>>>19,-1640531535)|0;f=a+32|0;l=_(d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24,-2048144777)|0;m=a+16|0;l=(c[m>>2]|0)+l|0;c[m>>2]=_(l<<13|l>>>19,-1640531535)|0;f=f+4|0;f=_(d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24,-2048144777)|0;m=a+20|0;f=(c[m>>2]|0)+f|0;c[m>>2]=_(f<<13|f>>>19,-1640531535)|0;m=a+40|0;m=_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-2048144777)|0;f=a+24|0;m=(c[f>>2]|0)+m|0;c[f>>2]=_(m<<13|m>>>19,-1640531535)|0;f=b+(16-(c[o>>2]|0))|0;c[o>>2]=0}g=f;m=b+(e+-16)|0;if(f>>>0<=m>>>0){i=a+12|0;j=a+16|0;k=a+20|0;l=a+24|0;f=c[i>>2]|0;b=c[j>>2]|0;e=c[k>>2]|0;h=c[l>>2]|0;do{p=g;p=f+(_(d[p>>0]|d[p+1>>0]<<8|d[p+2>>0]<<16|d[p+3>>0]<<24,-2048144777)|0)|0;f=_(p<<13|p>>>19,-1640531535)|0;p=g;q=p+4|0;q=b+(_(d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24,-2048144777)|0)|0;b=_(q<<13|q>>>19,-1640531535)|0;q=p+8|0;q=e+(_(d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24,-2048144777)|0)|0;e=_(q<<13|q>>>19,-1640531535)|0;q=p+12|0;q=h+(_(d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24,-2048144777)|0)|0;h=_(q<<13|q>>>19,-1640531535)|0;p=p+16|0;g=p}while(p>>>0<=m>>>0);c[i>>2]=f;c[j>>2]=b;c[k>>2]=e;c[l>>2]=h}f=g;if(f>>>0>=n>>>0)return;q=n-g|0;gb(a+28|0,f|0,q|0)|0;c[o>>2]=q;return}function Sa(a){a=a|0;var b=0,e=0,f=0,g=0,h=0,i=0;b=a+28|0;f=b+(c[a+44>>2]|0)|0;g=a;e=c[g>>2]|0;g=c[g+4>>2]|0;if(g>>>0>0|(g|0)==0&e>>>0>15){i=c[a+12>>2]|0;h=c[a+16>>2]|0;g=c[a+20>>2]|0;a=c[a+24>>2]|0;a=(i<<1|i>>>31)+(h<<7|h>>>25)+(g<<12|g>>>20)+(a<<18|a>>>14)|0}else a=(c[a+8>>2]|0)+374761393|0;e=a+e|0;while(1){a=b+4|0;if(a>>>0>f>>>0)break;i=b;i=e+(_(d[i>>0]|d[i+1>>0]<<8|d[i+2>>0]<<16|d[i+3>>0]<<24,-1028477379)|0)|0;e=_(i<<17|i>>>15,668265263)|0;b=a}while(1){if(b>>>0>=f>>>0)break;i=e+(_(d[b>>0]|0,374761393)|0)|0;e=_(i<<11|i>>>21,-1640531535)|0;b=b+1|0}i=_(e^e>>>15,-2048144777)|0;i=_(i^i>>>13,-1028477379)|0;return i^i>>>16|0}function Ta(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;j=b;D=e;if(!i){A=b+f|0;B=e+g|0;if(!g){if((f|0)==1)j=(a[b>>0]|0)!=0;else j=1;E=j<<31>>31;return E|0}x=e+(g+-8)|0;y=e+(g+-5)|0;z=e;t=e+(g+-12)|0;u=x;v=b+(f+-5)|0;w=b+(f+-8)|0;s=b+(f+-15)|0;g=D;a:while(1){l=j;j=l+1|0;l=d[l>>0]|0;k=l>>>4;if((k|0)==15){k=15;do{h=j;D=h+1|0;j=D;h=a[h>>0]|0;k=k+(h&255)|0}while(D>>>0<s>>>0&h<<24>>24==-1);if((k|0)<0)break}r=g;o=r+k|0;if(o>>>0>t>>>0){E=12;break}f=j;if((f+k|0)>>>0>w>>>0){E=12;break}else{j=g;g=f}while(1){D=g;C=D;C=d[C>>0]|d[C+1>>0]<<8|d[C+2>>0]<<16|d[C+3>>0]<<24;D=D+4|0;D=d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24;h=j;i=h;a[i>>0]=C;a[i+1>>0]=C>>8;a[i+2>>0]=C>>16;a[i+3>>0]=C>>24;h=h+4|0;a[h>>0]=D;a[h+1>>0]=D>>8;a[h+2>>0]=D>>16;a[h+3>>0]=D>>24;j=j+8|0;if(j>>>0>=o>>>0)break;else g=g+8|0}m=f+k|0;m=k-((d[m>>0]|d[m+1>>0]<<8)&65535)|0;n=r+m|0;j=f+(k+2)|0;if(n>>>0<e>>>0)break;g=l&15;if((g|0)==15){g=15;do{f=j;if(f>>>0>v>>>0)break a;j=f+1|0;h=a[f>>0]|0;g=g+(h&255)|0}while(h<<24>>24==-1);if((g|0)<0)break}p=r+(k+(g+4))|0;q=p;g=o-n|0;if((g|0)<8){l=c[116+(g<<2)>>2]|0;a[o>>0]=a[n>>0]|0;a[r+(k+1)>>0]=a[r+(m+1)>>0]|0;a[r+(k+2)>>0]=a[r+(m+2)>>0]|0;a[r+(k+3)>>0]=a[r+(m+3)>>0]|0;h=m+(c[148+(g<<2)>>2]|0)|0;i=r+h|0;D=r+(k+4)|0;i=d[i>>0]|d[i+1>>0]<<8|d[i+2>>0]<<16|d[i+3>>0]<<24;a[D>>0]=i;a[D+1>>0]=i>>8;a[D+2>>0]=i>>16;a[D+3>>0]=i>>24;l=h-l|0}else{h=n;i=h;i=d[i>>0]|d[i+1>>0]<<8|d[i+2>>0]<<16|d[i+3>>0]<<24;h=h+4|0;h=d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24;l=o;D=l;a[D>>0]=i;a[D+1>>0]=i>>8;a[D+2>>0]=i>>16;a[D+3>>0]=i>>24;l=l+4|0;a[l>>0]=h;a[l+1>>0]=h>>8;a[l+2>>0]=h>>16;a[l+3>>0]=h>>24;l=m+8|0}f=r+(k+8)|0;g=r+l|0;k=f;if(p>>>0<=t>>>0){k=f;while(1){D=g;C=D;C=d[C>>0]|d[C+1>>0]<<8|d[C+2>>0]<<16|d[C+3>>0]<<24;D=D+4|0;D=d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24;h=k;i=h;a[i>>0]=C;a[i+1>>0]=C>>8;a[i+2>>0]=C>>16;a[i+3>>0]=C>>24;h=h+4|0;a[h>>0]=D;a[h+1>>0]=D>>8;a[h+2>>0]=D>>16;a[h+3>>0]=D>>24;k=k+8|0;if(k>>>0<p>>>0)g=g+8|0;else{g=q;continue a}}}if(p>>>0>y>>>0)break;if(f>>>0<x>>>0){k=f;f=k;while(1){D=g;C=D;C=d[C>>0]|d[C+1>>0]<<8|d[C+2>>0]<<16|d[C+3>>0]<<24;D=D+4|0;D=d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24;h=f;i=h;a[i>>0]=C;a[i+1>>0]=C>>8;a[i+2>>0]=C>>16;a[i+3>>0]=C>>24;h=h+4|0;a[h>>0]=D;a[h+1>>0]=D>>8;a[h+2>>0]=D>>16;a[h+3>>0]=D>>24;f=f+8|0;if(f>>>0>=x>>>0)break;else g=g+8|0}g=r+(l+(u-k))|0;k=u}while(1){if(k>>>0>=p>>>0){g=q;continue a}a[k>>0]=a[g>>0]|0;g=g+1|0;k=k+1|0}}if((E|0)==12)if(!((j+k|0)!=(A|0)|o>>>0>B>>>0)){gb(r|0,j|0,k|0)|0;E=o-z|0;return E|0}E=b-j+-1|0;return E|0}C=h+i|0;if((C|0)!=(e|0)){w=b+f|0;x=e+g|0;y=e+(0-i)|0;z=i>>>0<65536;if(!g){if((f|0)==1)j=(a[b>>0]|0)!=0;else j=1;E=j<<31>>31;return E|0}A=e+(g+-8)|0;B=e+(g+-5)|0;C=e;s=e+(g+-12)|0;t=A;u=b+(f+-5)|0;v=b+(f+-8)|0;r=b+(f+-15)|0;l=D;b:while(1){f=j;j=f+1|0;f=d[f>>0]|0;k=f>>>4;if((k|0)==15){k=15;do{q=j;p=q+1|0;j=p;q=a[q>>0]|0;k=k+(q&255)|0}while(p>>>0<r>>>0&q<<24>>24==-1);if((k|0)<0)break}q=l;p=q+k|0;if(p>>>0>s>>>0){E=107;break}g=j;if((g+k|0)>>>0>v>>>0){E=107;break}else j=g;while(1){n=j;F=n;F=d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24;n=n+4|0;n=d[n>>0]|d[n+1>>0]<<8|d[n+2>>0]<<16|d[n+3>>0]<<24;o=l;m=o;a[m>>0]=F;a[m+1>>0]=F>>8;a[m+2>>0]=F>>16;a[m+3>>0]=F>>24;o=o+4|0;a[o>>0]=n;a[o+1>>0]=n>>8;a[o+2>>0]=n>>16;a[o+3>>0]=n>>24;l=l+8|0;if(l>>>0>=p>>>0)break;else j=j+8|0}m=g+k|0;m=k-((d[m>>0]|d[m+1>>0]<<8)&65535)|0;o=q+m|0;j=g+(k+2)|0;if(z&o>>>0<y>>>0)break;g=f&15;if((g|0)==15){g=15;do{f=j;if(f>>>0>u>>>0)break b;j=f+1|0;F=a[f>>0]|0;g=g+(F&255)|0}while(F<<24>>24==-1);if((g|0)<0)break}n=g+4|0;l=q+(k+n)|0;if(o>>>0<e>>>0){if(l>>>0>B>>>0)break;g=o;m=C-g|0;if(n>>>0<=m>>>0){hb(p|0,h+(g-C+i)|0,n|0)|0;continue}gb(p|0,h+(i-m)|0,m|0)|0;f=q+(k+m)|0;l=f;g=n-m|0;if(g>>>0<=(l-C|0)>>>0){gb(f|0,e|0,g|0)|0;l=q+(k+n)|0;continue}g=q+(k+n)|0;f=D;while(1){k=l;if(k>>>0>=g>>>0)continue b;l=f;a[k>>0]=a[l>>0]|0;f=l+1|0;l=k+1|0}}n=l;g=p-o|0;if((g|0)<8){F=c[116+(g<<2)>>2]|0;a[p>>0]=a[o>>0]|0;a[q+(k+1)>>0]=a[q+(m+1)>>0]|0;a[q+(k+2)>>0]=a[q+(m+2)>>0]|0;a[q+(k+3)>>0]=a[q+(m+3)>>0]|0;m=m+(c[148+(g<<2)>>2]|0)|0;o=q+m|0;p=q+(k+4)|0;o=d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24;a[p>>0]=o;a[p+1>>0]=o>>8;a[p+2>>0]=o>>16;a[p+3>>0]=o>>24;m=m-F|0}else{f=o;f=d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24;o=o+4|0;o=d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24;F=p;p=F;a[p>>0]=f;a[p+1>>0]=f>>8;a[p+2>>0]=f>>16;a[p+3>>0]=f>>24;F=F+4|0;a[F>>0]=o;a[F+1>>0]=o>>8;a[F+2>>0]=o>>16;a[F+3>>0]=o>>24;m=m+8|0}f=q+(k+8)|0;g=q+m|0;k=f;if(l>>>0<=s>>>0){k=f;while(1){q=g;o=q;o=d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24;q=q+4|0;q=d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24;F=k;p=F;a[p>>0]=o;a[p+1>>0]=o>>8;a[p+2>>0]=o>>16;a[p+3>>0]=o>>24;F=F+4|0;a[F>>0]=q;a[F+1>>0]=q>>8;a[F+2>>0]=q>>16;a[F+3>>0]=q>>24;k=k+8|0;if(k>>>0<l>>>0)g=g+8|0;else{l=n;continue b}}}if(l>>>0>B>>>0)break;if(f>>>0<A>>>0){k=f;f=k;while(1){p=g;G=p;G=d[G>>0]|d[G+1>>0]<<8|d[G+2>>0]<<16|d[G+3>>0]<<24;p=p+4|0;p=d[p>>0]|d[p+1>>0]<<8|d[p+2>>0]<<16|d[p+3>>0]<<24;F=f;o=F;a[o>>0]=G;a[o+1>>0]=G>>8;a[o+2>>0]=G>>16;a[o+3>>0]=G>>24;F=F+4|0;a[F>>0]=p;a[F+1>>0]=p>>8;a[F+2>>0]=p>>16;a[F+3>>0]=p>>24;f=f+8|0;if(f>>>0>=A>>>0)break;else g=g+8|0}g=q+(m+(t-k))|0;k=t}while(1){if(k>>>0>=l>>>0){l=n;continue b}a[k>>0]=a[g>>0]|0;g=g+1|0;k=k+1|0}}if((E|0)==107)if(!((j+k|0)!=(w|0)|p>>>0>x>>>0)){gb(q|0,j|0,k|0)|0;G=p-C|0;return G|0}G=b-j+-1|0;return G|0}if((i|0)>65534){A=h+(i+-65536)|0;B=b+f|0;k=i+g|0;z=h+k|0;if(!g){if((f|0)==1)j=(a[b>>0]|0)!=0;else j=1;G=j<<31>>31;return G|0}x=h+(k+-8)|0;y=h+(k+-5)|0;t=h+(k+-12)|0;u=x;v=b+(f+-5)|0;w=b+(f+-8)|0;s=b+(f+-15)|0;g=D;c:while(1){l=j;j=l+1|0;l=d[l>>0]|0;k=l>>>4;if((k|0)==15){k=15;do{G=j;F=G+1|0;j=F;G=a[G>>0]|0;k=k+(G&255)|0}while(F>>>0<s>>>0&G<<24>>24==-1);if((k|0)<0)break}r=g;o=r+k|0;if(o>>>0>t>>>0){E=45;break}f=j;if((f+k|0)>>>0>w>>>0){E=45;break}else{j=g;g=f}while(1){F=g;e=F;e=d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24;F=F+4|0;F=d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24;G=j;h=G;a[h>>0]=e;a[h+1>>0]=e>>8;a[h+2>>0]=e>>16;a[h+3>>0]=e>>24;G=G+4|0;a[G>>0]=F;a[G+1>>0]=F>>8;a[G+2>>0]=F>>16;a[G+3>>0]=F>>24;j=j+8|0;if(j>>>0>=o>>>0)break;else g=g+8|0}m=f+k|0;m=k-((d[m>>0]|d[m+1>>0]<<8)&65535)|0;n=r+m|0;j=f+(k+2)|0;if(n>>>0<A>>>0)break;g=l&15;if((g|0)==15){g=15;do{f=j;if(f>>>0>v>>>0)break c;j=f+1|0;G=a[f>>0]|0;g=g+(G&255)|0}while(G<<24>>24==-1);if((g|0)<0)break}p=r+(k+(g+4))|0;q=p;g=o-n|0;if((g|0)<8){l=c[116+(g<<2)>>2]|0;a[o>>0]=a[n>>0]|0;a[r+(k+1)>>0]=a[r+(m+1)>>0]|0;a[r+(k+2)>>0]=a[r+(m+2)>>0]|0;a[r+(k+3)>>0]=a[r+(m+3)>>0]|0;G=m+(c[148+(g<<2)>>2]|0)|0;h=r+G|0;F=r+(k+4)|0;h=d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24;a[F>>0]=h;a[F+1>>0]=h>>8;a[F+2>>0]=h>>16;a[F+3>>0]=h>>24;l=G-l|0}else{G=n;h=G;h=d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24;G=G+4|0;G=d[G>>0]|d[G+1>>0]<<8|d[G+2>>0]<<16|d[G+3>>0]<<24;l=o;F=l;a[F>>0]=h;a[F+1>>0]=h>>8;a[F+2>>0]=h>>16;a[F+3>>0]=h>>24;l=l+4|0;a[l>>0]=G;a[l+1>>0]=G>>8;a[l+2>>0]=G>>16;a[l+3>>0]=G>>24;l=m+8|0}f=r+(k+8)|0;g=r+l|0;k=f;if(p>>>0<=t>>>0){k=f;while(1){F=g;e=F;e=d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24;F=F+4|0;F=d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24;G=k;h=G;a[h>>0]=e;a[h+1>>0]=e>>8;a[h+2>>0]=e>>16;a[h+3>>0]=e>>24;G=G+4|0;a[G>>0]=F;a[G+1>>0]=F>>8;a[G+2>>0]=F>>16;a[G+3>>0]=F>>24;k=k+8|0;if(k>>>0<p>>>0)g=g+8|0;else{g=q;continue c}}}if(p>>>0>y>>>0)break;if(f>>>0<x>>>0){k=f;f=k;while(1){F=g;e=F;e=d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24;F=F+4|0;F=d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24;G=f;h=G;a[h>>0]=e;a[h+1>>0]=e>>8;a[h+2>>0]=e>>16;a[h+3>>0]=e>>24;G=G+4|0;a[G>>0]=F;a[G+1>>0]=F>>8;a[G+2>>0]=F>>16;a[G+3>>0]=F>>24;f=f+8|0;if(f>>>0>=x>>>0)break;else g=g+8|0}g=r+(l+(u-k))|0;k=u}while(1){if(k>>>0>=p>>>0){g=q;continue c}a[k>>0]=a[g>>0]|0;g=g+1|0;k=k+1|0}}if((E|0)==45)if(!((j+k|0)!=(B|0)|o>>>0>z>>>0)){gb(r|0,j|0,k|0)|0;G=o-C|0;return G|0}G=b-j+-1|0;return G|0}else{A=b+f|0;k=i+g|0;z=h+k|0;if(!g){if((f|0)==1)j=(a[b>>0]|0)!=0;else j=1;G=j<<31>>31;return G|0}x=h+(k+-8)|0;y=h+(k+-5)|0;t=h+(k+-12)|0;u=x;v=b+(f+-5)|0;w=b+(f+-8)|0;s=b+(f+-15)|0;g=D;d:while(1){l=j;j=l+1|0;l=d[l>>0]|0;k=l>>>4;if((k|0)==15){k=15;do{G=j;F=G+1|0;j=F;G=a[G>>0]|0;k=k+(G&255)|0}while(F>>>0<s>>>0&G<<24>>24==-1);if((k|0)<0)break}r=g;o=r+k|0;if(o>>>0>t>>>0){E=76;break}f=j;if((f+k|0)>>>0>w>>>0){E=76;break}else{j=g;g=f}while(1){F=g;D=F;D=d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24;F=F+4|0;F=d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24;G=j;e=G;a[e>>0]=D;a[e+1>>0]=D>>8;a[e+2>>0]=D>>16;a[e+3>>0]=D>>24;G=G+4|0;a[G>>0]=F;a[G+1>>0]=F>>8;a[G+2>>0]=F>>16;a[G+3>>0]=F>>24;j=j+8|0;if(j>>>0>=o>>>0)break;else g=g+8|0}m=f+k|0;m=k-((d[m>>0]|d[m+1>>0]<<8)&65535)|0;n=r+m|0;j=f+(k+2)|0;if(n>>>0<h>>>0)break;g=l&15;if((g|0)==15){g=15;do{f=j;if(f>>>0>v>>>0)break d;j=f+1|0;G=a[f>>0]|0;g=g+(G&255)|0}while(G<<24>>24==-1);if((g|0)<0)break}p=r+(k+(g+4))|0;q=p;g=o-n|0;if((g|0)<8){l=c[116+(g<<2)>>2]|0;a[o>>0]=a[n>>0]|0;a[r+(k+1)>>0]=a[r+(m+1)>>0]|0;a[r+(k+2)>>0]=a[r+(m+2)>>0]|0;a[r+(k+3)>>0]=a[r+(m+3)>>0]|0;G=m+(c[148+(g<<2)>>2]|0)|0;e=r+G|0;F=r+(k+4)|0;e=d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24;a[F>>0]=e;a[F+1>>0]=e>>8;a[F+2>>0]=e>>16;a[F+3>>0]=e>>24;l=G-l|0}else{G=n;e=G;e=d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24;G=G+4|0;G=d[G>>0]|d[G+1>>0]<<8|d[G+2>>0]<<16|d[G+3>>0]<<24;l=o;F=l;a[F>>0]=e;a[F+1>>0]=e>>8;a[F+2>>0]=e>>16;a[F+3>>0]=e>>24;l=l+4|0;a[l>>0]=G;a[l+1>>0]=G>>8;a[l+2>>0]=G>>16;a[l+3>>0]=G>>24;l=m+8|0}f=r+(k+8)|0;g=r+l|0;k=f;if(p>>>0<=t>>>0){k=f;while(1){F=g;D=F;D=d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24;F=F+4|0;F=d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24;G=k;e=G;a[e>>0]=D;a[e+1>>0]=D>>8;a[e+2>>0]=D>>16;a[e+3>>0]=D>>24;G=G+4|0;a[G>>0]=F;a[G+1>>0]=F>>8;a[G+2>>0]=F>>16;a[G+3>>0]=F>>24;k=k+8|0;if(k>>>0<p>>>0)g=g+8|0;else{g=q;continue d}}}if(p>>>0>y>>>0)break;if(f>>>0<x>>>0){k=f;f=k;while(1){F=g;D=F;D=d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24;F=F+4|0;F=d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24;G=f;e=G;a[e>>0]=D;a[e+1>>0]=D>>8;a[e+2>>0]=D>>16;a[e+3>>0]=D>>24;G=G+4|0;a[G>>0]=F;a[G+1>>0]=F>>8;a[G+2>>0]=F>>16;a[G+3>>0]=F>>24;f=f+8|0;if(f>>>0>=x>>>0)break;else g=g+8|0}g=r+(l+(u-k))|0;k=u}while(1){if(k>>>0>=p>>>0){g=q;continue d}a[k>>0]=a[g>>0]|0;g=g+1|0;k=k+1|0}}if((E|0)==76)if(!((j+k|0)!=(A|0)|o>>>0>z>>>0)){gb(r|0,j|0,k|0)|0;G=o-C|0;return G|0}G=b-j+-1|0;return G|0}return 0}function Ua(a,e,f,g){a=a|0;e=e|0;f=f|0;g=g|0;var h=0;h=_(d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24,-1640531535)|0;if((f|0)==2){b[e+(h>>>19<<1)>>1]=a-g;return}h=h>>>20;switch(f|0){case 0:{c[e+(h<<2)>>2]=a;return}case 1:{c[e+(h<<2)>>2]=a-g;return}default:return}}function Va(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=e+-3|0;h=c;i=b;while(1){c=i;g=h;if(i>>>0>=j>>>0)break;c=d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24;f=d[i>>0]|d[i+1>>0]<<8|d[i+2>>0]<<16|d[i+3>>0]<<24;if((c|0)!=(f|0)){k=5;break}h=h+4|0;i=i+4|0}if((k|0)==5){b=i+((ib(c^f|0)|0)>>>3)-b|0;return b|0}if(i>>>0<(e+-1|0)>>>0?(d[h>>0]|d[h+1>>0]<<8)<<16>>16==(d[i>>0]|d[i+1>>0]<<8)<<16>>16:0){g=h+2|0;c=i+2|0}f=c;if(f>>>0<e>>>0?(a[g>>0]|0)==(a[f>>0]|0):0)c=f+1|0;b=c-b|0;return b|0}function Wa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;if(a&3){a=0;return a|0}db(a|0,0,131072)|0;db(a+131072|0,-1,131072)|0;c[a+262168>>2]=65536;h=b+-65536|0;c[a+262148>>2]=h;c[a+262144>>2]=b;c[a+262152>>2]=h;c[a+262160>>2]=65536;c[a+262164>>2]=65536;if(e>>>0>2113929216)h=0;else h=((e|0)/255|0)+e+16|0;if((h|0)>(f|0)){a=Xa(a,b,d,e,f,g,1)|0;return a|0}else{a=Xa(a,b,d,e,f,g,0)|0;return a|0}return 0}function Xa(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,ca=0;m=g+i|0;Y=g+(i+-12)|0;$=g+(i+-5)|0;aa=$;ba=h+j|0;W=1<<((k|0)>16?16:(k|0)<1?9:k)+-1;Q=f+262144|0;c[Q>>2]=(c[Q>>2]|0)+i;Q=f+131072|0;R=f+262148|0;S=f+262152|0;T=f+262160|0;U=f+262164|0;V=f+262168|0;X=(l|0)==0;D=g;l=g+1|0;k=h;i=0;n=0;B=0;C=0;A=0;a:while(1){z=l;o=i;while(1){w=z;if(w>>>0>=Y>>>0){ca=187;break a}i=c[R>>2]|0;g=c[S>>2]|0;x=c[T>>2]|0;l=c[U>>2]|0;y=i;v=z-i|0;v=(l+65536|0)>>>0>v>>>0?l:v+-65535|0;i=z-i|0;l=c[V>>2]|0;while(1){if(l>>>0>=i>>>0)break;P=y+l|0;P=f+((_(d[P>>0]|d[P+1>>0]<<8|d[P+2>>0]<<16|d[P+3>>0]<<24,-1640531535)|0)>>>17<<2)|0;O=l-(c[P>>2]|0)|0;b[Q+((l&65535)<<1)>>1]=O>>>0>65535?65535:O;c[P>>2]=l;l=l+1|0}c[V>>2]=i;t=z;t=d[t>>0]|d[t+1>>0]<<8|d[t+2>>0]<<16|d[t+3>>0]<<24;r=w+4|0;s=y+x|0;u=0;i=W;q=c[f+((_(t,-1640531535)|0)>>>17<<2)>>2]|0;while(1){if(!(q>>>0>=v>>>0&(i|0)!=0))break;p=i+-1|0;if(x>>>0>q>>>0){P=g+q|0;if((d[P>>0]|d[P+1>>0]<<8|d[P+2>>0]<<16|d[P+3>>0]<<24|0)==(t|0)){l=w+(x-q)|0;l=l>>>0>$>>>0?aa:l;i=(Za(r,g+(q+4)|0,l)|0)+4|0;if((w+i|0)==(l|0)&l>>>0<$>>>0)i=i+(Za(l,s,$)|0)|0;if(i>>>0>u>>>0)o=y+q|0;else i=u}else i=u}else{P=y+q|0;l=P;if((a[y+(q+u)>>0]|0)==(a[w+u>>0]|0)?(d[P>>0]|d[P+1>>0]<<8|d[P+2>>0]<<16|d[P+3>>0]<<24|0)==(t|0):0){i=(Za(r,y+(q+4)|0,$)|0)+4|0;P=i>>>0>u>>>0;i=P?i:u;o=P?l:o}else i=u}u=i;i=p;q=q-(e[Q+((q&65535)<<1)>>1]|0)|0}if(u){M=D;g=z;p=u;l=o;H=o;G=z;i=C;break}z=w+1|0}b:while(1){F=G;I=g;K=p;L=l;while(1){E=I;J=E+K|0;if(J>>>0>=Y>>>0){q=n;r=i;ca=46;break b}z=K+-2|0;l=E+z|0;g=c[R>>2]|0;C=c[T>>2]|0;y=g;D=y+C|0;p=c[U>>2]|0;o=l;x=o-g|0;x=(p+65536|0)>>>0>x>>>0?p:x+-65535|0;p=c[S>>2]|0;g=o-g|0;o=c[V>>2]|0;while(1){if(o>>>0>=g>>>0)break;P=y+o|0;P=f+((_(d[P>>0]|d[P+1>>0]<<8|d[P+2>>0]<<16|d[P+3>>0]<<24,-1640531535)|0)>>>17<<2)|0;O=o-(c[P>>2]|0)|0;b[Q+((o&65535)<<1)>>1]=O>>>0>65535?65535:O;c[P>>2]=o;o=o+1|0}c[V>>2]=g;w=d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24;t=p;v=E+(K+2)|0;p=K;l=W;s=c[f+((_(w,-1640531535)|0)>>>17<<2)>>2]|0;while(1){if(!(s>>>0>=x>>>0&(l|0)!=0)){g=i;break}r=l+-1|0;if(C>>>0>s>>>0){P=t+s|0;if((d[P>>0]|d[P+1>>0]<<8|d[P+2>>0]<<16|d[P+3>>0]<<24|0)==(w|0)){l=E+(z+(C-s))|0;l=l>>>0>$>>>0?aa:l;g=(Za(v,t+(s+4)|0,l)|0)+4|0;if(l>>>0<$>>>0?(E+(z+g)|0)==(l|0):0)g=g+(Za(l,D,$)|0)|0;o=0;while(1){P=z+o|0;q=E+P|0;if(!((P|0)>1&(s+o|0)>>>0>x>>>0))break;l=o+-1|0;if((a[E+(z+l)>>0]|0)==(a[t+(s+l)>>0]|0))o=l;else break}l=g-o|0;if((l|0)>(p|0)){p=l;n=y+(s+o)|0;i=q}}}else if((a[E+(p+1)>>0]|0)==(a[y+(s-(K+-3)+p)>>0]|0)?(P=y+s|0,(d[P>>0]|d[P+1>>0]<<8|d[P+2>>0]<<16|d[P+3>>0]<<24|0)==(w|0)):0){l=(Za(v,y+(s+4)|0,$)|0)+4|0;o=0;while(1){P=z+o|0;q=E+P|0;if(!((P|0)>1&(s+o|0)>(C|0)))break;g=o+-1|0;if((a[E+(z+g)>>0]|0)==(a[y+(s+g)>>0]|0))o=g;else break}l=l-o|0;if((l|0)>(p|0)){p=l;n=y+(s+o)|0;i=q}}l=r;s=s-(e[Q+((s&65535)<<1)>>1]|0)|0}if((p|0)==(K|0)){q=n;r=g;ca=46;break b}P=g;l=F>>>0<E>>>0&P>>>0<(E+u|0)>>>0;o=l?H:L;i=l?G:I;l=l?u:K;if((P-i|0)<3){I=g;K=p;L=n;i=g}else{N=M;O=i;s=l;P=o;l=B;i=A;break}}c:while(1){L=O;I=(s|0)>18;H=L+(s+3)|0;M=L+s|0;o=p;t=l;q=i;while(1){l=g;i=g-O|0;if((i|0)<18?(Z=I?18:s,Z=((L+Z|0)>>>0>(l+(o+-4)|0)>>>0?i+o+-4|0:Z)+(O-g)|0,(Z|0)>0):0){K=o-Z|0;v=n+Z|0;r=l+Z|0}else{K=o;v=n;r=g}G=r;J=G+K|0;if(J>>>0>=Y>>>0){A=q;break b}B=K+-3|0;i=G+B|0;l=c[R>>2]|0;C=c[T>>2]|0;z=l;D=z+C|0;n=c[U>>2]|0;E=i;y=E-l|0;y=(n+65536|0)>>>0>y>>>0?n:y+-65535|0;n=c[S>>2]|0;F=r;l=E-l|0;g=c[V>>2]|0;while(1){if(g>>>0>=l>>>0)break;A=z+g|0;A=f+((_(d[A>>0]|d[A+1>>0]<<8|d[A+2>>0]<<16|d[A+3>>0]<<24,-1640531535)|0)>>>17<<2)|0;x=g-(c[A>>2]|0)|0;b[Q+((g&65535)<<1)>>1]=x>>>0>65535?65535:x;c[A>>2]=g;g=g+1|0}c[V>>2]=l;x=d[i>>0]|d[i+1>>0]<<8|d[i+2>>0]<<16|d[i+3>>0]<<24;w=G+(K+1)|0;p=K;l=W;g=t;A=q;u=c[f+((_(x,-1640531535)|0)>>>17<<2)>>2]|0;while(1){if(!(u>>>0>=y>>>0&(l|0)!=0)){t=g;break}t=l+-1|0;if(C>>>0>u>>>0){q=n+u|0;if((d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24|0)==(x|0)){i=G+(B+(C-u))|0;i=i>>>0>$>>>0?aa:i;l=(Za(w,n+(u+4)|0,i)|0)+4|0;if(i>>>0<$>>>0?(G+(B+l)|0)==(i|0):0)l=l+(Za(i,D,$)|0)|0;o=0;while(1){q=G+(B+o)|0;if(!(q>>>0>F>>>0&(u+o|0)>>>0>y>>>0))break;i=o+-1|0;if((a[G+(B+i)>>0]|0)==(a[n+(u+i)>>0]|0))o=i;else break}i=l-o|0;if((i|0)>(p|0)){p=i;g=z+(u+o)|0;i=q}else i=A}else i=A}else if((a[F+p>>0]|0)==(a[z+(u+(r-E)+p)>>0]|0)?(q=z+u|0,(d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24|0)==(x|0)):0){i=(Za(w,z+(u+4)|0,$)|0)+4|0;o=0;while(1){q=G+(B+o)|0;if(!(q>>>0>F>>>0&(u+o|0)>(C|0)))break;l=o+-1|0;if((a[G+(B+l)>>0]|0)==(a[z+(u+l)>>0]|0))o=l;else break}i=i-o|0;if((i|0)>(p|0)){p=i;g=z+(u+o)|0;i=q}else i=A}else i=A;l=t;A=i;u=u-(e[Q+((u&65535)<<1)>>1]|0)|0}if((p|0)==(K|0))break b;i=A;if(i>>>0>=H>>>0)break;if(i>>>0<M>>>0){o=p;n=t;g=A;q=A}else break c}if(G>>>0<M>>>0){i=r-O|0;if((i|0)<15){l=I?18:s;i=(L+l|0)>>>0>(G+(K+-4)|0)>>>0?i+K+-4|0:l;l=i+(O-r)|0;if((l|0)>0){u=i;s=K-l|0;v=v+l|0;r=G+l|0}else{u=i;s=K}}else{u=i;s=K}}else{u=s;s=K}q=O-N|0;i=k+1|0;if(!X?(k+((q>>8)+q+9)|0)>>>0>ba>>>0:0){m=0;ca=196;break a}if((q|0)>14){a[k>>0]=-16;g=O+241|0;n=N+14-O|0;n=O+240+((n|0)>-255?n:-255)-N|0;o=(n>>>0)%255|0;l=q+-15|0;while(1){if((l|0)<=254)break;M=i;a[M>>0]=-1;i=M+1|0;l=l+-255|0}a[i>>0]=g-N+(o-n);i=i+1|0}else a[k>>0]=q<<4;n=i;g=n+q|0;l=i;i=N;while(1){M=i;J=M;J=d[J>>0]|d[J+1>>0]<<8|d[J+2>>0]<<16|d[J+3>>0]<<24;M=M+4|0;M=d[M>>0]|d[M+1>>0]<<8|d[M+2>>0]<<16|d[M+3>>0]<<24;N=l;K=N;a[K>>0]=J;a[K+1>>0]=J>>8;a[K+2>>0]=J>>16;a[K+3>>0]=J>>24;N=N+4|0;a[N>>0]=M;a[N+1>>0]=M>>8;a[N+2>>0]=M>>16;a[N+3>>0]=M>>24;l=l+8|0;if(l>>>0>=g>>>0)break;else i=i+8|0}P=O-P&65535;a[g>>0]=P;a[g+1>>0]=P>>8;P=q+2|0;i=n+P|0;g=u+-4|0;if(!X?(n+(P+((g>>8)+6))|0)>>>0>ba>>>0:0){m=0;ca=196;break a}l=d[k>>0]|0;if((g|0)>14){a[k>>0]=l+15;l=18-u|0;l=u+491+((l|0)>-510?l:-510)|0;g=(l>>>0)%510|0;k=u+-19|0;while(1){if((k|0)<=509)break;P=i;a[P>>0]=-1;a[P+1>>0]=-1;i=P+2|0;k=k+-510|0}k=u+-19+(g-l)|0;if((k|0)>254){a[i>>0]=-1;k=k+-255|0;i=i+1|0}P=i;a[P>>0]=k;k=P+1|0}else{a[k>>0]=l+g;k=i}N=L+u|0;O=r;P=v;n=t;l=t;g=A;i=A}if(G>>>0<M>>>0){L=M;J=L-r|0;u=K-J|0;r=(u|0)<4;u=r?p:u;v=r?t:v+J|0;r=r?A:L}else u=K;o=O-N|0;q=k;k=q+1|0;if(!X?(q+((o>>8)+o+9)|0)>>>0>ba>>>0:0){m=0;ca=196;break a}if((o|0)>14){a[q>>0]=-16;l=O+241|0;g=N+14-O|0;g=O+240+((g|0)>-255?g:-255)-N|0;n=(g>>>0)%255|0;i=o+-15|0;while(1){if((i|0)<=254)break;L=k;a[L>>0]=-1;k=L+1|0;i=i+-255|0}a[k>>0]=l-N+(n-g);k=k+1|0}else a[q>>0]=o<<4;g=k;l=g+o|0;i=k;k=N;while(1){L=k;J=L;J=d[J>>0]|d[J+1>>0]<<8|d[J+2>>0]<<16|d[J+3>>0]<<24;L=L+4|0;L=d[L>>0]|d[L+1>>0]<<8|d[L+2>>0]<<16|d[L+3>>0]<<24;N=i;K=N;a[K>>0]=J;a[K+1>>0]=J>>8;a[K+2>>0]=J>>16;a[K+3>>0]=J>>24;N=N+4|0;a[N>>0]=L;a[N+1>>0]=L>>8;a[N+2>>0]=L>>16;a[N+3>>0]=L>>24;i=i+8|0;if(i>>>0>=l>>>0)break;else k=k+8|0}P=O-P&65535;a[l>>0]=P;a[l+1>>0]=P>>8;P=o+2|0;k=g+P|0;l=s+-4|0;if(!X?(g+(P+((l>>8)+6))|0)>>>0>ba>>>0:0){m=0;ca=196;break a}i=d[q>>0]|0;if((l|0)>14){a[q>>0]=i+15;l=18-s|0;l=s+491+((l|0)>-510?l:-510)|0;g=(l>>>0)%510|0;i=s+-19|0;while(1){if((i|0)<=509)break;P=k;a[P>>0]=-1;a[P+1>>0]=-1;k=P+2|0;i=i+-510|0}i=s+-19+(g-l)|0;if((i|0)>254){a[k>>0]=-1;i=i+-255|0;k=k+1|0}a[k>>0]=i;k=k+1|0}else a[q>>0]=i+l;g=A;l=t;H=v;n=v;B=t;G=r;i=r}if((ca|0)==46){ca=0;p=I-M|0;i=k+1|0;if(!X?(k+((p>>8)+p+9)|0)>>>0>ba>>>0:0){m=0;ca=196;break}if((p|0)>14){a[k>>0]=-16;g=I+241|0;n=M+14-I|0;n=I+240+((n|0)>-255?n:-255)-M|0;o=(n>>>0)%255|0;l=p+-15|0;while(1){if((l|0)<=254)break;P=i;a[P>>0]=-1;i=P+1|0;l=l+-255|0}a[i>>0]=g-M+(o-n);i=i+1|0}else a[k>>0]=p<<4;n=i;g=n+p|0;l=i;i=M;while(1){O=i;M=O;M=d[M>>0]|d[M+1>>0]<<8|d[M+2>>0]<<16|d[M+3>>0]<<24;O=O+4|0;O=d[O>>0]|d[O+1>>0]<<8|d[O+2>>0]<<16|d[O+3>>0]<<24;P=l;N=P;a[N>>0]=M;a[N+1>>0]=M>>8;a[N+2>>0]=M>>16;a[N+3>>0]=M>>24;P=P+4|0;a[P>>0]=O;a[P+1>>0]=O>>8;a[P+2>>0]=O>>16;a[P+3>>0]=O>>24;l=l+8|0;if(l>>>0>=g>>>0)break;else i=i+8|0}P=I-L&65535;a[g>>0]=P;a[g+1>>0]=P>>8;P=p+2|0;i=n+P|0;g=K+-4|0;if(!X?(n+(P+((g>>8)+6))|0)>>>0>ba>>>0:0){m=0;ca=196;break}l=d[k>>0]|0;if((g|0)>14){a[k>>0]=l+15;l=18-K|0;l=K+491+((l|0)>-510?l:-510)|0;g=(l>>>0)%510|0;k=K+-19|0;while(1){if((k|0)<=509)break;P=i;a[P>>0]=-1;a[P+1>>0]=-1;i=P+2|0;k=k+-510|0}k=K+-19+(g-l)|0;if((k|0)>254){a[i>>0]=-1;k=k+-255|0;i=i+1|0}P=i;a[P>>0]=k;k=P+1|0}else{a[k>>0]=l+g;k=i}l=J;D=l;i=L;n=q;C=r;continue}q=G>>>0<M>>>0?r-O|0:s;p=O-N|0;i=k+1|0;if(!X?(k+((p>>8)+p+9)|0)>>>0>ba>>>0:0){m=0;ca=196;break}if((p|0)>14){a[k>>0]=-16;g=O+241|0;n=N+14-O|0;n=O+240+((n|0)>-255?n:-255)-N|0;o=(n>>>0)%255|0;l=p+-15|0;while(1){if((l|0)<=254)break;M=i;a[M>>0]=-1;i=M+1|0;l=l+-255|0}a[i>>0]=g-N+(o-n);i=i+1|0}else a[k>>0]=p<<4;n=i;g=n+p|0;l=i;i=N;while(1){M=i;H=M;H=d[H>>0]|d[H+1>>0]<<8|d[H+2>>0]<<16|d[H+3>>0]<<24;M=M+4|0;M=d[M>>0]|d[M+1>>0]<<8|d[M+2>>0]<<16|d[M+3>>0]<<24;N=l;I=N;a[I>>0]=H;a[I+1>>0]=H>>8;a[I+2>>0]=H>>16;a[I+3>>0]=H>>24;N=N+4|0;a[N>>0]=M;a[N+1>>0]=M>>8;a[N+2>>0]=M>>16;a[N+3>>0]=M>>24;l=l+8|0;if(l>>>0>=g>>>0)break;else i=i+8|0}O=O-P&65535;a[g>>0]=O;a[g+1>>0]=O>>8;O=p+2|0;i=n+O|0;g=q+-4|0;if(!X?(n+(O+((g>>8)+6))|0)>>>0>ba>>>0:0){m=0;ca=196;break}l=d[k>>0]|0;if((g|0)>14){a[k>>0]=l+15;l=18-q|0;l=q+491+((l|0)>-510?l:-510)|0;g=(l>>>0)%510|0;k=q+-19|0;while(1){if((k|0)<=509)break;O=i;a[O>>0]=-1;a[O+1>>0]=-1;i=O+2|0;k=k+-510|0}k=q+-19+(g-l)|0;if((k|0)>254){a[i>>0]=-1;k=k+-255|0;i=i+1|0}a[i>>0]=k;i=i+1|0}else a[k>>0]=l+g;o=L+q|0;p=r-o|0;q=i;k=q+1|0;if(!X?(q+((p>>8)+p+9)|0)>>>0>ba>>>0:0){m=0;ca=196;break}if((p|0)>14){a[q>>0]=-16;l=r+241|0;g=o+14-r|0;g=r+240+((g|0)>-255?g:-255)-o|0;n=(g>>>0)%255|0;i=p+-15|0;while(1){if((i|0)<=254)break;O=k;a[O>>0]=-1;k=O+1|0;i=i+-255|0}a[k>>0]=l-o+(n-g);k=k+1|0}else a[q>>0]=p<<4;g=k;l=g+p|0;i=k;k=o;while(1){N=k;L=N;L=d[L>>0]|d[L+1>>0]<<8|d[L+2>>0]<<16|d[L+3>>0]<<24;N=N+4|0;N=d[N>>0]|d[N+1>>0]<<8|d[N+2>>0]<<16|d[N+3>>0]<<24;O=i;M=O;a[M>>0]=L;a[M+1>>0]=L>>8;a[M+2>>0]=L>>16;a[M+3>>0]=L>>24;O=O+4|0;a[O>>0]=N;a[O+1>>0]=N>>8;a[O+2>>0]=N>>16;a[O+3>>0]=N>>24;i=i+8|0;if(i>>>0>=l>>>0)break;else k=k+8|0}O=r-v&65535;a[l>>0]=O;a[l+1>>0]=O>>8;O=p+2|0;k=g+O|0;l=K+-4|0;if(!X?(g+(O+((l>>8)+6))|0)>>>0>ba>>>0:0){m=0;ca=196;break}i=d[q>>0]|0;if((l|0)>14){a[q>>0]=i+15;l=18-K|0;l=K+491+((l|0)>-510?l:-510)|0;g=(l>>>0)%510|0;i=K+-19|0;while(1){if((i|0)<=509)break;O=k;a[O>>0]=-1;a[O+1>>0]=-1;k=O+2|0;i=i+-510|0}i=K+-19+(g-l)|0;if((i|0)>254){a[k>>0]=-1;i=i+-255|0;k=k+1|0}a[k>>0]=i;k=k+1|0}else a[q>>0]=i+l;l=J;D=l;i=P;n=v;B=t;C=r}if((ca|0)==187){p=D;o=m-D|0;if(!X?(k-h+o+1+(((o+240|0)>>>0)/255|0)|0)>>>0>j>>>0:0){h=0;return h|0}if((o|0)>14){n=k;a[n>>0]=-16;g=m+241|0;i=D+14-m|0;m=m+((i|0)>-255?i:-255)+240-D|0;i=(m>>>0)%255|0;l=o+-15|0;while(1){k=n+1|0;if((l|0)<=254)break;a[k>>0]=-1;n=k;l=l+-255|0}a[k>>0]=g-D+(i-m);m=n+2|0}else{m=k;a[m>>0]=o<<4;k=m;m=m+1|0}gb(m|0,p|0,o|0)|0;h=k+(o+1)-h|0;return h|0}else if((ca|0)==196)return m|0;return 0}function Ya(a,e,f,g,h,i){a=a|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;s=e;r=a+262148|0;k=c[r>>2]|0;if(!k){db(a|0,0,131072)|0;db(a+131072|0,-1,131072)|0;c[a+262168>>2]=65536;k=e+-65536|0;c[r>>2]=k;q=a+262144|0;c[q>>2]=s;c[a+262152>>2]=k;c[a+262160>>2]=65536;c[a+262164>>2]=65536;j=e}else{j=a+262144|0;q=j;j=c[j>>2]|0}if((j-k|0)>>>0>2147483648){k=j-k-(c[a+262160>>2]|0)|0;k=k>>>0>65536?65536:k;l=0-k|0;db(a|0,0,131072)|0;db(a+131072|0,-1,131072)|0;m=a+262168|0;c[m>>2]=65536;p=j+(l+-65536)|0;c[a+262148>>2]=p;n=a+262144|0;c[n>>2]=j+l;c[a+262152>>2]=p;c[a+262160>>2]=65536;c[a+262164>>2]=65536;if((k|0)>3){o=k+65533|0;p=65536;while(1){if(p>>>0>=o>>>0)break;t=j+(l+(p+-65536))|0;t=a+((_(d[t>>0]|d[t+1>>0]<<8|d[t+2>>0]<<16|d[t+3>>0]<<24,-1640531535)|0)>>>17<<2)|0;u=p-(c[t>>2]|0)|0;b[a+131072+((p&65535)<<1)>>1]=u>>>0>65535?65535:u;c[t>>2]=p;p=p+1|0}c[m>>2]=o}c[n>>2]=j+(l+k);j=c[q>>2]|0}if((j|0)!=(e|0)){l=a+262144|0;if(j>>>0<((c[r>>2]|0)+4|0)>>>0){k=a+262148|0;j=a+262168|0}else{k=a+262148|0;n=c[k>>2]|0;m=(c[l>>2]|0)+-3-n|0;j=a+262168|0;o=c[j>>2]|0;while(1){if(o>>>0>=m>>>0)break;u=n+o|0;u=a+((_(d[u>>0]|d[u+1>>0]<<8|d[u+2>>0]<<16|d[u+3>>0]<<24,-1640531535)|0)>>>17<<2)|0;t=o-(c[u>>2]|0)|0;b[a+131072+((o&65535)<<1)>>1]=t>>>0>65535?65535:t;c[u>>2]=o;o=o+1|0}c[j>>2]=m}r=a+262160|0;c[a+262164>>2]=c[r>>2];t=c[k>>2]|0;u=(c[l>>2]|0)-t|0;c[r>>2]=u;c[a+262152>>2]=t;c[k>>2]=e+(0-u);c[l>>2]=s;c[j>>2]=u}j=e+g|0;k=c[a+262152>>2]|0;l=a+262164|0;m=c[a+262160>>2]|0;n=k+m|0;if(!(n>>>0>e>>>0?j>>>0>(k+(c[l>>2]|0)|0)>>>0:0)){u=a+262172|0;u=c[u>>2]|0;u=Xa(a,e,f,g,h,u,i)|0;return u|0}u=(j>>>0>n>>>0?n:j)-k|0;c[l>>2]=u;c[l>>2]=(m-u|0)>>>0<4?m:u;u=a+262172|0;u=c[u>>2]|0;u=Xa(a,e,f,g,h,u,i)|0;return u|0}function Za(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=e+-3|0;h=c;i=b;while(1){c=i;g=h;if(i>>>0>=j>>>0)break;c=d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24;f=d[i>>0]|d[i+1>>0]<<8|d[i+2>>0]<<16|d[i+3>>0]<<24;if((c|0)!=(f|0)){k=5;break}h=h+4|0;i=i+4|0}if((k|0)==5){b=i+((ib(c^f|0)|0)>>>3)-b|0;return b|0}if(i>>>0<(e+-1|0)>>>0?(d[h>>0]|d[h+1>>0]<<8)<<16>>16==(d[i>>0]|d[i+1>>0]<<8)<<16>>16:0){g=h+2|0;c=i+2|0}f=c;if(f>>>0<e>>>0?(a[g>>0]|0)==(a[f>>0]|0):0)c=f+1|0;b=c-b|0;return b|0}function _a(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;do{if(a>>>0<245){o=a>>>0<11?16:a+11&-8;a=o>>>3;i=c[57]|0;b=i>>>a;if(b&3){b=(b&1^1)+a|0;e=b<<1;d=268+(e<<2)|0;e=268+(e+2<<2)|0;f=c[e>>2]|0;g=f+8|0;h=c[g>>2]|0;do{if((d|0)!=(h|0)){if(h>>>0<(c[61]|0)>>>0)ga();a=h+12|0;if((c[a>>2]|0)==(f|0)){c[a>>2]=d;c[e>>2]=h;break}else ga()}else c[57]=i&~(1<<b)}while(0);L=b<<3;c[f+4>>2]=L|3;L=f+(L|4)|0;c[L>>2]=c[L>>2]|1;L=g;return L|0}h=c[59]|0;if(o>>>0>h>>>0){if(b){e=2<<a;e=b<<a&(e|0-e);e=(e&0-e)+-1|0;j=e>>>12&16;e=e>>>j;f=e>>>5&8;e=e>>>f;g=e>>>2&4;e=e>>>g;d=e>>>1&2;e=e>>>d;b=e>>>1&1;b=(f|j|g|d|b)+(e>>>b)|0;e=b<<1;d=268+(e<<2)|0;e=268+(e+2<<2)|0;g=c[e>>2]|0;j=g+8|0;f=c[j>>2]|0;do{if((d|0)!=(f|0)){if(f>>>0<(c[61]|0)>>>0)ga();a=f+12|0;if((c[a>>2]|0)==(g|0)){c[a>>2]=d;c[e>>2]=f;k=c[59]|0;break}else ga()}else{c[57]=i&~(1<<b);k=h}}while(0);L=b<<3;h=L-o|0;c[g+4>>2]=o|3;i=g+o|0;c[g+(o|4)>>2]=h|1;c[g+L>>2]=h;if(k){f=c[62]|0;d=k>>>3;a=d<<1;e=268+(a<<2)|0;b=c[57]|0;d=1<<d;if(b&d){b=268+(a+2<<2)|0;a=c[b>>2]|0;if(a>>>0<(c[61]|0)>>>0)ga();else{l=b;m=a}}else{c[57]=b|d;l=268+(a+2<<2)|0;m=e}c[l>>2]=f;c[m+12>>2]=f;c[f+8>>2]=m;c[f+12>>2]=e}c[59]=h;c[62]=i;L=j;return L|0}a=c[58]|0;if(a){i=(a&0-a)+-1|0;K=i>>>12&16;i=i>>>K;J=i>>>5&8;i=i>>>J;L=i>>>2&4;i=i>>>L;b=i>>>1&2;i=i>>>b;j=i>>>1&1;j=c[532+((J|K|L|b|j)+(i>>>j)<<2)>>2]|0;i=(c[j+4>>2]&-8)-o|0;b=j;while(1){a=c[b+16>>2]|0;if(!a){a=c[b+20>>2]|0;if(!a)break}b=(c[a+4>>2]&-8)-o|0;L=b>>>0<i>>>0;i=L?b:i;b=a;j=L?a:j}f=c[61]|0;if(j>>>0<f>>>0)ga();h=j+o|0;if(j>>>0>=h>>>0)ga();g=c[j+24>>2]|0;d=c[j+12>>2]|0;do{if((d|0)==(j|0)){b=j+20|0;a=c[b>>2]|0;if(!a){b=j+16|0;a=c[b>>2]|0;if(!a){n=0;break}}while(1){d=a+20|0;e=c[d>>2]|0;if(e){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}if(b>>>0<f>>>0)ga();else{c[b>>2]=0;n=a;break}}else{e=c[j+8>>2]|0;if(e>>>0<f>>>0)ga();a=e+12|0;if((c[a>>2]|0)!=(j|0))ga();b=d+8|0;if((c[b>>2]|0)==(j|0)){c[a>>2]=d;c[b>>2]=e;n=d;break}else ga()}}while(0);do{if(g){a=c[j+28>>2]|0;b=532+(a<<2)|0;if((j|0)==(c[b>>2]|0)){c[b>>2]=n;if(!n){c[58]=c[58]&~(1<<a);break}}else{if(g>>>0<(c[61]|0)>>>0)ga();a=g+16|0;if((c[a>>2]|0)==(j|0))c[a>>2]=n;else c[g+20>>2]=n;if(!n)break}b=c[61]|0;if(n>>>0<b>>>0)ga();c[n+24>>2]=g;a=c[j+16>>2]|0;do{if(a)if(a>>>0<b>>>0)ga();else{c[n+16>>2]=a;c[a+24>>2]=n;break}}while(0);a=c[j+20>>2]|0;if(a)if(a>>>0<(c[61]|0)>>>0)ga();else{c[n+20>>2]=a;c[a+24>>2]=n;break}}}while(0);if(i>>>0<16){L=i+o|0;c[j+4>>2]=L|3;L=j+(L+4)|0;c[L>>2]=c[L>>2]|1}else{c[j+4>>2]=o|3;c[j+(o|4)>>2]=i|1;c[j+(i+o)>>2]=i;a=c[59]|0;if(a){f=c[62]|0;d=a>>>3;a=d<<1;e=268+(a<<2)|0;b=c[57]|0;d=1<<d;if(b&d){a=268+(a+2<<2)|0;b=c[a>>2]|0;if(b>>>0<(c[61]|0)>>>0)ga();else{p=a;q=b}}else{c[57]=b|d;p=268+(a+2<<2)|0;q=e}c[p>>2]=f;c[q+12>>2]=f;c[f+8>>2]=q;c[f+12>>2]=e}c[59]=i;c[62]=h}L=j+8|0;return L|0}}}else if(a>>>0<=4294967231){a=a+11|0;o=a&-8;j=c[58]|0;if(j){b=0-o|0;a=a>>>8;if(a)if(o>>>0>16777215)i=31;else{q=(a+1048320|0)>>>16&8;x=a<<q;p=(x+520192|0)>>>16&4;x=x<<p;i=(x+245760|0)>>>16&2;i=14-(p|q|i)+(x<<i>>>15)|0;i=o>>>(i+7|0)&1|i<<1}else i=0;a=c[532+(i<<2)>>2]|0;a:do{if(!a){d=0;a=0;x=86}else{f=b;d=0;g=o<<((i|0)==31?0:25-(i>>>1)|0);h=a;a=0;while(1){e=c[h+4>>2]&-8;b=e-o|0;if(b>>>0<f>>>0)if((e|0)==(o|0)){e=h;a=h;x=90;break a}else a=h;else b=f;x=c[h+20>>2]|0;h=c[h+16+(g>>>31<<2)>>2]|0;d=(x|0)==0|(x|0)==(h|0)?d:x;if(!h){x=86;break}else{f=b;g=g<<1}}}}while(0);if((x|0)==86){if((d|0)==0&(a|0)==0){a=2<<i;a=j&(a|0-a);if(!a)break;a=(a&0-a)+-1|0;n=a>>>12&16;a=a>>>n;m=a>>>5&8;a=a>>>m;p=a>>>2&4;a=a>>>p;q=a>>>1&2;a=a>>>q;d=a>>>1&1;d=c[532+((m|n|p|q|d)+(a>>>d)<<2)>>2]|0;a=0}if(!d){i=b;j=a}else{e=d;x=90}}if((x|0)==90)while(1){x=0;q=(c[e+4>>2]&-8)-o|0;d=q>>>0<b>>>0;b=d?q:b;a=d?e:a;d=c[e+16>>2]|0;if(d){e=d;x=90;continue}e=c[e+20>>2]|0;if(!e){i=b;j=a;break}else x=90}if((j|0)!=0?i>>>0<((c[59]|0)-o|0)>>>0:0){f=c[61]|0;if(j>>>0<f>>>0)ga();h=j+o|0;if(j>>>0>=h>>>0)ga();g=c[j+24>>2]|0;d=c[j+12>>2]|0;do{if((d|0)==(j|0)){b=j+20|0;a=c[b>>2]|0;if(!a){b=j+16|0;a=c[b>>2]|0;if(!a){s=0;break}}while(1){d=a+20|0;e=c[d>>2]|0;if(e){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}if(b>>>0<f>>>0)ga();else{c[b>>2]=0;s=a;break}}else{e=c[j+8>>2]|0;if(e>>>0<f>>>0)ga();a=e+12|0;if((c[a>>2]|0)!=(j|0))ga();b=d+8|0;if((c[b>>2]|0)==(j|0)){c[a>>2]=d;c[b>>2]=e;s=d;break}else ga()}}while(0);do{if(g){a=c[j+28>>2]|0;b=532+(a<<2)|0;if((j|0)==(c[b>>2]|0)){c[b>>2]=s;if(!s){c[58]=c[58]&~(1<<a);break}}else{if(g>>>0<(c[61]|0)>>>0)ga();a=g+16|0;if((c[a>>2]|0)==(j|0))c[a>>2]=s;else c[g+20>>2]=s;if(!s)break}b=c[61]|0;if(s>>>0<b>>>0)ga();c[s+24>>2]=g;a=c[j+16>>2]|0;do{if(a)if(a>>>0<b>>>0)ga();else{c[s+16>>2]=a;c[a+24>>2]=s;break}}while(0);a=c[j+20>>2]|0;if(a)if(a>>>0<(c[61]|0)>>>0)ga();else{c[s+20>>2]=a;c[a+24>>2]=s;break}}}while(0);b:do{if(i>>>0>=16){c[j+4>>2]=o|3;c[j+(o|4)>>2]=i|1;c[j+(i+o)>>2]=i;a=i>>>3;if(i>>>0<256){b=a<<1;e=268+(b<<2)|0;d=c[57]|0;a=1<<a;if(d&a){a=268+(b+2<<2)|0;b=c[a>>2]|0;if(b>>>0<(c[61]|0)>>>0)ga();else{t=a;u=b}}else{c[57]=d|a;t=268+(b+2<<2)|0;u=e}c[t>>2]=h;c[u+12>>2]=h;c[j+(o+8)>>2]=u;c[j+(o+12)>>2]=e;break}a=i>>>8;if(a)if(i>>>0>16777215)e=31;else{K=(a+1048320|0)>>>16&8;L=a<<K;J=(L+520192|0)>>>16&4;L=L<<J;e=(L+245760|0)>>>16&2;e=14-(J|K|e)+(L<<e>>>15)|0;e=i>>>(e+7|0)&1|e<<1}else e=0;a=532+(e<<2)|0;c[j+(o+28)>>2]=e;c[j+(o+20)>>2]=0;c[j+(o+16)>>2]=0;b=c[58]|0;d=1<<e;if(!(b&d)){c[58]=b|d;c[a>>2]=h;c[j+(o+24)>>2]=a;c[j+(o+12)>>2]=h;c[j+(o+8)>>2]=h;break}a=c[a>>2]|0;c:do{if((c[a+4>>2]&-8|0)!=(i|0)){e=i<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=a+16+(e>>>31<<2)|0;b=c[d>>2]|0;if(!b)break;if((c[b+4>>2]&-8|0)==(i|0)){w=b;break c}else{e=e<<1;a=b}}if(d>>>0<(c[61]|0)>>>0)ga();else{c[d>>2]=h;c[j+(o+24)>>2]=a;c[j+(o+12)>>2]=h;c[j+(o+8)>>2]=h;break b}}else w=a}while(0);a=w+8|0;b=c[a>>2]|0;L=c[61]|0;if(b>>>0>=L>>>0&w>>>0>=L>>>0){c[b+12>>2]=h;c[a>>2]=h;c[j+(o+8)>>2]=b;c[j+(o+12)>>2]=w;c[j+(o+24)>>2]=0;break}else ga()}else{L=i+o|0;c[j+4>>2]=L|3;L=j+(L+4)|0;c[L>>2]=c[L>>2]|1}}while(0);L=j+8|0;return L|0}}}else o=-1}while(0);d=c[59]|0;if(d>>>0>=o>>>0){a=d-o|0;b=c[62]|0;if(a>>>0>15){c[62]=b+o;c[59]=a;c[b+(o+4)>>2]=a|1;c[b+d>>2]=a;c[b+4>>2]=o|3}else{c[59]=0;c[62]=0;c[b+4>>2]=d|3;L=b+(d+4)|0;c[L>>2]=c[L>>2]|1}L=b+8|0;return L|0}a=c[60]|0;if(a>>>0>o>>>0){K=a-o|0;c[60]=K;L=c[63]|0;c[63]=L+o;c[L+(o+4)>>2]=K|1;c[L+4>>2]=o|3;L=L+8|0;return L|0}do{if(!(c[175]|0)){a=ea(30)|0;if(!(a+-1&a)){c[177]=a;c[176]=a;c[178]=-1;c[179]=-1;c[180]=0;c[168]=0;c[175]=(ja(0)|0)&-16^1431655768;break}else ga()}}while(0);g=o+48|0;f=c[177]|0;h=o+47|0;e=f+h|0;f=0-f|0;i=e&f;if(i>>>0<=o>>>0){L=0;return L|0}a=c[167]|0;if((a|0)!=0?(u=c[165]|0,w=u+i|0,w>>>0<=u>>>0|w>>>0>a>>>0):0){L=0;return L|0}d:do{if(!(c[168]&4)){d=c[63]|0;e:do{if(d){a=676;while(1){b=c[a>>2]|0;if(b>>>0<=d>>>0?(r=a+4|0,(b+(c[r>>2]|0)|0)>>>0>d>>>0):0)break;a=c[a+8>>2]|0;if(!a){x=174;break e}}b=e-(c[60]|0)&f;if(b>>>0<2147483647){d=ia(b|0)|0;w=(d|0)==((c[a>>2]|0)+(c[r>>2]|0)|0);a=w?b:0;if(w){if((d|0)!=(-1|0)){r=d;q=a;x=194;break d}}else x=184}else a=0}else x=174}while(0);do{if((x|0)==174){e=ia(0)|0;if((e|0)!=(-1|0)){a=e;b=c[176]|0;d=b+-1|0;if(!(d&a))b=i;else b=i-a+(d+a&0-b)|0;a=c[165]|0;d=a+b|0;if(b>>>0>o>>>0&b>>>0<2147483647){w=c[167]|0;if((w|0)!=0?d>>>0<=a>>>0|d>>>0>w>>>0:0){a=0;break}d=ia(b|0)|0;x=(d|0)==(e|0);a=x?b:0;if(x){r=e;q=a;x=194;break d}else x=184}else a=0}else a=0}}while(0);f:do{if((x|0)==184){e=0-b|0;do{if(g>>>0>b>>>0&(b>>>0<2147483647&(d|0)!=(-1|0))?(v=c[177]|0,v=h-b+v&0-v,v>>>0<2147483647):0)if((ia(v|0)|0)==(-1|0)){ia(e|0)|0;break f}else{b=v+b|0;break}}while(0);if((d|0)!=(-1|0)){r=d;q=b;x=194;break d}}}while(0);c[168]=c[168]|4;x=191}else{a=0;x=191}}while(0);if((((x|0)==191?i>>>0<2147483647:0)?(y=ia(i|0)|0,z=ia(0)|0,y>>>0<z>>>0&((y|0)!=(-1|0)&(z|0)!=(-1|0))):0)?(A=z-y|0,B=A>>>0>(o+40|0)>>>0,B):0){r=y;q=B?A:a;x=194}if((x|0)==194){a=(c[165]|0)+q|0;c[165]=a;if(a>>>0>(c[166]|0)>>>0)c[166]=a;h=c[63]|0;g:do{if(h){f=676;while(1){a=c[f>>2]|0;b=f+4|0;d=c[b>>2]|0;if((r|0)==(a+d|0)){x=204;break}e=c[f+8>>2]|0;if(!e)break;else f=e}if(((x|0)==204?(c[f+12>>2]&8|0)==0:0)?h>>>0<r>>>0&h>>>0>=a>>>0:0){c[b>>2]=d+q;L=(c[60]|0)+q|0;K=h+8|0;K=(K&7|0)==0?0:0-K&7;J=L-K|0;c[63]=h+K;c[60]=J;c[h+(K+4)>>2]=J|1;c[h+(L+4)>>2]=40;c[64]=c[179];break}a=c[61]|0;if(r>>>0<a>>>0){c[61]=r;j=r}else j=a;b=r+q|0;a=676;while(1){if((c[a>>2]|0)==(b|0)){x=212;break}a=c[a+8>>2]|0;if(!a){b=676;break}}if((x|0)==212)if(!(c[a+12>>2]&8)){c[a>>2]=r;n=a+4|0;c[n>>2]=(c[n>>2]|0)+q;n=r+8|0;n=(n&7|0)==0?0:0-n&7;k=r+(q+8)|0;k=(k&7|0)==0?0:0-k&7;a=r+(k+q)|0;m=n+o|0;p=r+m|0;l=a-(r+n)-o|0;c[r+(n+4)>>2]=o|3;h:do{if((a|0)!=(h|0)){if((a|0)==(c[62]|0)){L=(c[59]|0)+l|0;c[59]=L;c[62]=p;c[r+(m+4)>>2]=L|1;c[r+(L+m)>>2]=L;break}h=q+4|0;b=c[r+(h+k)>>2]|0;if((b&3|0)==1){i=b&-8;f=b>>>3;i:do{if(b>>>0>=256){g=c[r+((k|24)+q)>>2]|0;e=c[r+(q+12+k)>>2]|0;do{if((e|0)==(a|0)){d=k|16;e=r+(h+d)|0;b=c[e>>2]|0;if(!b){d=r+(d+q)|0;b=c[d>>2]|0;if(!b){I=0;break}}else d=e;while(1){e=b+20|0;f=c[e>>2]|0;if(f){b=f;d=e;continue}e=b+16|0;f=c[e>>2]|0;if(!f)break;else{b=f;d=e}}if(d>>>0<j>>>0)ga();else{c[d>>2]=0;I=b;break}}else{f=c[r+((k|8)+q)>>2]|0;if(f>>>0<j>>>0)ga();b=f+12|0;if((c[b>>2]|0)!=(a|0))ga();d=e+8|0;if((c[d>>2]|0)==(a|0)){c[b>>2]=e;c[d>>2]=f;I=e;break}else ga()}}while(0);if(!g)break;b=c[r+(q+28+k)>>2]|0;d=532+(b<<2)|0;do{if((a|0)!=(c[d>>2]|0)){if(g>>>0<(c[61]|0)>>>0)ga();b=g+16|0;if((c[b>>2]|0)==(a|0))c[b>>2]=I;else c[g+20>>2]=I;if(!I)break i}else{c[d>>2]=I;if(I)break;c[58]=c[58]&~(1<<b);break i}}while(0);d=c[61]|0;if(I>>>0<d>>>0)ga();c[I+24>>2]=g;a=k|16;b=c[r+(a+q)>>2]|0;do{if(b)if(b>>>0<d>>>0)ga();else{c[I+16>>2]=b;c[b+24>>2]=I;break}}while(0);a=c[r+(h+a)>>2]|0;if(!a)break;if(a>>>0<(c[61]|0)>>>0)ga();else{c[I+20>>2]=a;c[a+24>>2]=I;break}}else{d=c[r+((k|8)+q)>>2]|0;e=c[r+(q+12+k)>>2]|0;b=268+(f<<1<<2)|0;do{if((d|0)!=(b|0)){if(d>>>0<j>>>0)ga();if((c[d+12>>2]|0)==(a|0))break;ga()}}while(0);if((e|0)==(d|0)){c[57]=c[57]&~(1<<f);break}do{if((e|0)==(b|0))E=e+8|0;else{if(e>>>0<j>>>0)ga();b=e+8|0;if((c[b>>2]|0)==(a|0)){E=b;break}ga()}}while(0);c[d+12>>2]=e;c[E>>2]=d}}while(0);a=r+((i|k)+q)|0;f=i+l|0}else f=l;a=a+4|0;c[a>>2]=c[a>>2]&-2;c[r+(m+4)>>2]=f|1;c[r+(f+m)>>2]=f;a=f>>>3;if(f>>>0<256){b=a<<1;e=268+(b<<2)|0;d=c[57]|0;a=1<<a;do{if(!(d&a)){c[57]=d|a;J=268+(b+2<<2)|0;K=e}else{a=268+(b+2<<2)|0;b=c[a>>2]|0;if(b>>>0>=(c[61]|0)>>>0){J=a;K=b;break}ga()}}while(0);c[J>>2]=p;c[K+12>>2]=p;c[r+(m+8)>>2]=K;c[r+(m+12)>>2]=e;break}a=f>>>8;do{if(!a)e=0;else{if(f>>>0>16777215){e=31;break}J=(a+1048320|0)>>>16&8;K=a<<J;I=(K+520192|0)>>>16&4;K=K<<I;e=(K+245760|0)>>>16&2;e=14-(I|J|e)+(K<<e>>>15)|0;e=f>>>(e+7|0)&1|e<<1}}while(0);a=532+(e<<2)|0;c[r+(m+28)>>2]=e;c[r+(m+20)>>2]=0;c[r+(m+16)>>2]=0;b=c[58]|0;d=1<<e;if(!(b&d)){c[58]=b|d;c[a>>2]=p;c[r+(m+24)>>2]=a;c[r+(m+12)>>2]=p;c[r+(m+8)>>2]=p;break}a=c[a>>2]|0;j:do{if((c[a+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=a+16+(e>>>31<<2)|0;b=c[d>>2]|0;if(!b)break;if((c[b+4>>2]&-8|0)==(f|0)){L=b;break j}else{e=e<<1;a=b}}if(d>>>0<(c[61]|0)>>>0)ga();else{c[d>>2]=p;c[r+(m+24)>>2]=a;c[r+(m+12)>>2]=p;c[r+(m+8)>>2]=p;break h}}else L=a}while(0);a=L+8|0;b=c[a>>2]|0;K=c[61]|0;if(b>>>0>=K>>>0&L>>>0>=K>>>0){c[b+12>>2]=p;c[a>>2]=p;c[r+(m+8)>>2]=b;c[r+(m+12)>>2]=L;c[r+(m+24)>>2]=0;break}else ga()}else{L=(c[60]|0)+l|0;c[60]=L;c[63]=p;c[r+(m+4)>>2]=L|1}}while(0);L=r+(n|8)|0;return L|0}else b=676;while(1){a=c[b>>2]|0;if(a>>>0<=h>>>0?(C=c[b+4>>2]|0,D=a+C|0,D>>>0>h>>>0):0)break;b=c[b+8>>2]|0}b=a+(C+-39)|0;b=a+(C+-47+((b&7|0)==0?0:0-b&7))|0;f=h+16|0;b=b>>>0<f>>>0?h:b;a=b+8|0;d=r+8|0;d=(d&7|0)==0?0:0-d&7;L=q+-40-d|0;c[63]=r+d;c[60]=L;c[r+(d+4)>>2]=L|1;c[r+(q+-36)>>2]=40;c[64]=c[179];d=b+4|0;c[d>>2]=27;c[a>>2]=c[169];c[a+4>>2]=c[170];c[a+8>>2]=c[171];c[a+12>>2]=c[172];c[169]=r;c[170]=q;c[172]=0;c[171]=a;a=b+28|0;c[a>>2]=7;if((b+32|0)>>>0<D>>>0)do{L=a;a=a+4|0;c[a>>2]=7}while((L+8|0)>>>0<D>>>0);if((b|0)!=(h|0)){g=b-h|0;c[d>>2]=c[d>>2]&-2;c[h+4>>2]=g|1;c[b>>2]=g;a=g>>>3;if(g>>>0<256){b=a<<1;e=268+(b<<2)|0;d=c[57]|0;a=1<<a;if(d&a){a=268+(b+2<<2)|0;b=c[a>>2]|0;if(b>>>0<(c[61]|0)>>>0)ga();else{F=a;G=b}}else{c[57]=d|a;F=268+(b+2<<2)|0;G=e}c[F>>2]=h;c[G+12>>2]=h;c[h+8>>2]=G;c[h+12>>2]=e;break}a=g>>>8;if(a)if(g>>>0>16777215)e=31;else{K=(a+1048320|0)>>>16&8;L=a<<K;J=(L+520192|0)>>>16&4;L=L<<J;e=(L+245760|0)>>>16&2;e=14-(J|K|e)+(L<<e>>>15)|0;e=g>>>(e+7|0)&1|e<<1}else e=0;d=532+(e<<2)|0;c[h+28>>2]=e;c[h+20>>2]=0;c[f>>2]=0;a=c[58]|0;b=1<<e;if(!(a&b)){c[58]=a|b;c[d>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;break}a=c[d>>2]|0;k:do{if((c[a+4>>2]&-8|0)!=(g|0)){e=g<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=a+16+(e>>>31<<2)|0;b=c[d>>2]|0;if(!b)break;if((c[b+4>>2]&-8|0)==(g|0)){H=b;break k}else{e=e<<1;a=b}}if(d>>>0<(c[61]|0)>>>0)ga();else{c[d>>2]=h;c[h+24>>2]=a;c[h+12>>2]=h;c[h+8>>2]=h;break g}}else H=a}while(0);a=H+8|0;b=c[a>>2]|0;L=c[61]|0;if(b>>>0>=L>>>0&H>>>0>=L>>>0){c[b+12>>2]=h;c[a>>2]=h;c[h+8>>2]=b;c[h+12>>2]=H;c[h+24>>2]=0;break}else ga()}}else{L=c[61]|0;if((L|0)==0|r>>>0<L>>>0)c[61]=r;c[169]=r;c[170]=q;c[172]=0;c[66]=c[175];c[65]=-1;a=0;do{L=a<<1;K=268+(L<<2)|0;c[268+(L+3<<2)>>2]=K;c[268+(L+2<<2)>>2]=K;a=a+1|0}while((a|0)!=32);L=r+8|0;L=(L&7|0)==0?0:0-L&7;K=q+-40-L|0;c[63]=r+L;c[60]=K;c[r+(L+4)>>2]=K|1;c[r+(q+-36)>>2]=40;c[64]=c[179]}}while(0);a=c[60]|0;if(a>>>0>o>>>0){K=a-o|0;c[60]=K;L=c[63]|0;c[63]=L+o;c[L+(o+4)>>2]=K|1;c[L+4>>2]=o|3;L=L+8|0;return L|0}}if(!(c[45]|0))a=224;else a=c[(fa()|0)+60>>2]|0;c[a>>2]=12;L=0;return L|0}function $a(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;if(!a)return;b=a+-8|0;i=c[61]|0;if(b>>>0<i>>>0)ga();d=c[a+-4>>2]|0;e=d&3;if((e|0)==1)ga();o=d&-8;q=a+(o+-8)|0;do{if(!(d&1)){b=c[b>>2]|0;if(!e)return;j=-8-b|0;l=a+j|0;m=b+o|0;if(l>>>0<i>>>0)ga();if((l|0)==(c[62]|0)){b=a+(o+-4)|0;d=c[b>>2]|0;if((d&3|0)!=3){u=l;g=m;break}c[59]=m;c[b>>2]=d&-2;c[a+(j+4)>>2]=m|1;c[q>>2]=m;return}f=b>>>3;if(b>>>0<256){e=c[a+(j+8)>>2]|0;d=c[a+(j+12)>>2]|0;b=268+(f<<1<<2)|0;if((e|0)!=(b|0)){if(e>>>0<i>>>0)ga();if((c[e+12>>2]|0)!=(l|0))ga()}if((d|0)==(e|0)){c[57]=c[57]&~(1<<f);u=l;g=m;break}if((d|0)!=(b|0)){if(d>>>0<i>>>0)ga();b=d+8|0;if((c[b>>2]|0)==(l|0))h=b;else ga()}else h=d+8|0;c[e+12>>2]=d;c[h>>2]=e;u=l;g=m;break}h=c[a+(j+24)>>2]|0;e=c[a+(j+12)>>2]|0;do{if((e|0)==(l|0)){d=a+(j+20)|0;b=c[d>>2]|0;if(!b){d=a+(j+16)|0;b=c[d>>2]|0;if(!b){k=0;break}}while(1){e=b+20|0;f=c[e>>2]|0;if(f){b=f;d=e;continue}e=b+16|0;f=c[e>>2]|0;if(!f)break;else{b=f;d=e}}if(d>>>0<i>>>0)ga();else{c[d>>2]=0;k=b;break}}else{f=c[a+(j+8)>>2]|0;if(f>>>0<i>>>0)ga();b=f+12|0;if((c[b>>2]|0)!=(l|0))ga();d=e+8|0;if((c[d>>2]|0)==(l|0)){c[b>>2]=e;c[d>>2]=f;k=e;break}else ga()}}while(0);if(h){b=c[a+(j+28)>>2]|0;d=532+(b<<2)|0;if((l|0)==(c[d>>2]|0)){c[d>>2]=k;if(!k){c[58]=c[58]&~(1<<b);u=l;g=m;break}}else{if(h>>>0<(c[61]|0)>>>0)ga();b=h+16|0;if((c[b>>2]|0)==(l|0))c[b>>2]=k;else c[h+20>>2]=k;if(!k){u=l;g=m;break}}d=c[61]|0;if(k>>>0<d>>>0)ga();c[k+24>>2]=h;b=c[a+(j+16)>>2]|0;do{if(b)if(b>>>0<d>>>0)ga();else{c[k+16>>2]=b;c[b+24>>2]=k;break}}while(0);b=c[a+(j+20)>>2]|0;if(b)if(b>>>0<(c[61]|0)>>>0)ga();else{c[k+20>>2]=b;c[b+24>>2]=k;u=l;g=m;break}else{u=l;g=m}}else{u=l;g=m}}else{u=b;g=o}}while(0);if(u>>>0>=q>>>0)ga();b=a+(o+-4)|0;d=c[b>>2]|0;if(!(d&1))ga();if(!(d&2)){if((q|0)==(c[63]|0)){t=(c[60]|0)+g|0;c[60]=t;c[63]=u;c[u+4>>2]=t|1;if((u|0)!=(c[62]|0))return;c[62]=0;c[59]=0;return}if((q|0)==(c[62]|0)){t=(c[59]|0)+g|0;c[59]=t;c[62]=u;c[u+4>>2]=t|1;c[u+t>>2]=t;return}g=(d&-8)+g|0;f=d>>>3;do{if(d>>>0>=256){h=c[a+(o+16)>>2]|0;b=c[a+(o|4)>>2]|0;do{if((b|0)==(q|0)){d=a+(o+12)|0;b=c[d>>2]|0;if(!b){d=a+(o+8)|0;b=c[d>>2]|0;if(!b){p=0;break}}while(1){e=b+20|0;f=c[e>>2]|0;if(f){b=f;d=e;continue}e=b+16|0;f=c[e>>2]|0;if(!f)break;else{b=f;d=e}}if(d>>>0<(c[61]|0)>>>0)ga();else{c[d>>2]=0;p=b;break}}else{d=c[a+o>>2]|0;if(d>>>0<(c[61]|0)>>>0)ga();e=d+12|0;if((c[e>>2]|0)!=(q|0))ga();f=b+8|0;if((c[f>>2]|0)==(q|0)){c[e>>2]=b;c[f>>2]=d;p=b;break}else ga()}}while(0);if(h){b=c[a+(o+20)>>2]|0;d=532+(b<<2)|0;if((q|0)==(c[d>>2]|0)){c[d>>2]=p;if(!p){c[58]=c[58]&~(1<<b);break}}else{if(h>>>0<(c[61]|0)>>>0)ga();b=h+16|0;if((c[b>>2]|0)==(q|0))c[b>>2]=p;else c[h+20>>2]=p;if(!p)break}d=c[61]|0;if(p>>>0<d>>>0)ga();c[p+24>>2]=h;b=c[a+(o+8)>>2]|0;do{if(b)if(b>>>0<d>>>0)ga();else{c[p+16>>2]=b;c[b+24>>2]=p;break}}while(0);b=c[a+(o+12)>>2]|0;if(b)if(b>>>0<(c[61]|0)>>>0)ga();else{c[p+20>>2]=b;c[b+24>>2]=p;break}}}else{e=c[a+o>>2]|0;d=c[a+(o|4)>>2]|0;b=268+(f<<1<<2)|0;if((e|0)!=(b|0)){if(e>>>0<(c[61]|0)>>>0)ga();if((c[e+12>>2]|0)!=(q|0))ga()}if((d|0)==(e|0)){c[57]=c[57]&~(1<<f);break}if((d|0)!=(b|0)){if(d>>>0<(c[61]|0)>>>0)ga();b=d+8|0;if((c[b>>2]|0)==(q|0))n=b;else ga()}else n=d+8|0;c[e+12>>2]=d;c[n>>2]=e}}while(0);c[u+4>>2]=g|1;c[u+g>>2]=g;if((u|0)==(c[62]|0)){c[59]=g;return}}else{c[b>>2]=d&-2;c[u+4>>2]=g|1;c[u+g>>2]=g}b=g>>>3;if(g>>>0<256){d=b<<1;f=268+(d<<2)|0;e=c[57]|0;b=1<<b;if(e&b){b=268+(d+2<<2)|0;d=c[b>>2]|0;if(d>>>0<(c[61]|0)>>>0)ga();else{r=b;s=d}}else{c[57]=e|b;r=268+(d+2<<2)|0;s=f}c[r>>2]=u;c[s+12>>2]=u;c[u+8>>2]=s;c[u+12>>2]=f;return}b=g>>>8;if(b)if(g>>>0>16777215)f=31;else{r=(b+1048320|0)>>>16&8;s=b<<r;q=(s+520192|0)>>>16&4;s=s<<q;f=(s+245760|0)>>>16&2;f=14-(q|r|f)+(s<<f>>>15)|0;f=g>>>(f+7|0)&1|f<<1}else f=0;b=532+(f<<2)|0;c[u+28>>2]=f;c[u+20>>2]=0;c[u+16>>2]=0;d=c[58]|0;e=1<<f;a:do{if(d&e){b=c[b>>2]|0;b:do{if((c[b+4>>2]&-8|0)!=(g|0)){f=g<<((f|0)==31?0:25-(f>>>1)|0);while(1){e=b+16+(f>>>31<<2)|0;d=c[e>>2]|0;if(!d)break;if((c[d+4>>2]&-8|0)==(g|0)){t=d;break b}else{f=f<<1;b=d}}if(e>>>0<(c[61]|0)>>>0)ga();else{c[e>>2]=u;c[u+24>>2]=b;c[u+12>>2]=u;c[u+8>>2]=u;break a}}else t=b}while(0);b=t+8|0;d=c[b>>2]|0;s=c[61]|0;if(d>>>0>=s>>>0&t>>>0>=s>>>0){c[d+12>>2]=u;c[b>>2]=u;c[u+8>>2]=d;c[u+12>>2]=t;c[u+24>>2]=0;break}else ga()}else{c[58]=d|e;c[b>>2]=u;c[u+24>>2]=b;c[u+12>>2]=u;c[u+8>>2]=u}}while(0);u=(c[65]|0)+-1|0;c[65]=u;if(!u)b=684;else return;while(1){b=c[b>>2]|0;if(!b)break;else b=b+8|0}c[65]=-1;return}function ab(){}function bb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return(C=d,a-c>>>0|0)|0}function cb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return(C=b+d+(c>>>0<a>>>0|0)>>>0,c|0)|0}function db(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=b+e|0;if((e|0)>=20){d=d&255;h=b&3;i=d|d<<8|d<<16|d<<24;g=f&~3;if(h){h=b+4-h|0;while((b|0)<(h|0)){a[b>>0]=d;b=b+1|0}}while((b|0)<(g|0)){c[b>>2]=i;b=b+4|0}}while((b|0)<(f|0)){a[b>>0]=d;b=b+1|0}return b-e|0}function eb(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){C=b>>>c;return a>>>c|(b&(1<<c)-1)<<32-c}C=0;return b>>>c-32|0}function fb(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){C=b<<c|(a&(1<<c)-1<<32-c)>>>32-c;return a<<c}C=a<<c-32;return 0}function gb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if((e|0)>=4096)return ka(b|0,d|0,e|0)|0;f=b|0;if((b&3)==(d&3)){while(b&3){if(!e)return f|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}while((e|0)>=4){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0;e=e-4|0}}while((e|0)>0){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}return f|0}function hb(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)<(b|0)&(b|0)<(c+d|0)){e=b;c=c+d|0;b=b+d|0;while((d|0)>0){b=b-1|0;c=c-1|0;d=d-1|0;a[b>>0]=a[c>>0]|0}b=e}else gb(b,c,d)|0;return b|0}function ib(b){b=b|0;var c=0;c=a[m+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[m+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[m+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return(a[m+(b>>>24)>>0]|0)+24|0}function jb(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){C=b>>c;return a>>>c|(b&(1<<c)-1)<<32-c}C=(b|0)<0?-1:0;return b>>c-32|0}function kb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=_(e,f)|0;d=a>>>16;a=(c>>>16)+(_(e,d)|0)|0;e=b>>>16;b=_(e,f)|0;return(C=(a>>>16)+(_(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function lb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=b>>31|((b|0)<0?-1:0)<<1;i=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;f=d>>31|((d|0)<0?-1:0)<<1;e=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;h=bb(j^a,i^b,j,i)|0;g=C;a=f^j;b=e^i;return bb((qb(h,g,bb(f^c,e^d,f,e)|0,C,0)|0)^a,C^b,a,b)|0}function mb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;f=i;i=i+16|0;j=f|0;h=b>>31|((b|0)<0?-1:0)<<1;g=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;l=e>>31|((e|0)<0?-1:0)<<1;k=((e|0)<0?-1:0)>>31|((e|0)<0?-1:0)<<1;a=bb(h^a,g^b,h,g)|0;b=C;qb(a,b,bb(l^d,k^e,l,k)|0,C,j)|0;e=bb(c[j>>2]^h,c[j+4>>2]^g,h,g)|0;d=C;i=f;return(C=d,e)|0}function nb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=kb(e,f)|0;a=C;return(C=(_(b,f)|0)+(_(d,e)|0)+a|a&0,c|0|0)|0}function ob(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return qb(a,b,c,d,0)|0}function pb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;i=i+16|0;f=g|0;qb(a,b,d,e,f)|0;i=g;return(C=c[f+4>>2]|0,c[f>>2]|0)|0}function qb(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=a;j=b;k=j;h=d;n=e;i=n;if(!k){g=(f|0)!=0;if(!i){if(g){c[f>>2]=(l>>>0)%(h>>>0);c[f+4>>2]=0}n=0;f=(l>>>0)/(h>>>0)>>>0;return(C=n,f)|0}else{if(!g){n=0;f=0;return(C=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return(C=n,f)|0}}g=(i|0)==0;do{if(h){if(!g){g=(aa(i|0)|0)-(aa(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;b=g-31>>31;h=m;a=l>>>(m>>>0)&b|k<<i;b=k>>>(m>>>0)&b;g=0;i=l<<i;break}if(!f){n=0;f=0;return(C=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=j|b&0;n=0;f=0;return(C=n,f)|0}g=h-1|0;if(g&h){i=(aa(h|0)|0)+33-(aa(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;b=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<<m|l>>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<<p&j;i=(k<<p|l>>>(o>>>0))&j|l<<m&i-33>>31;break}if(f){c[f>>2]=g&l;c[f+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return(C=o,p)|0}else{p=ib(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return(C=o,p)|0}}else{if(g){if(f){c[f>>2]=(k>>>0)%(h>>>0);c[f+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return(C=o,p)|0}if(!l){if(f){c[f>>2]=0;c[f+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return(C=o,p)|0}g=i-1|0;if(!(g&i)){if(f){c[f>>2]=a|0;c[f+4>>2]=g&k|b&0}o=0;p=k>>>((ib(i|0)|0)>>>0);return(C=o,p)|0}g=(aa(i|0)|0)-(aa(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<<i|l>>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<<i;break}if(!f){o=0;p=0;return(C=o,p)|0}c[f>>2]=a|0;c[f+4>>2]=j|b&0;o=0;p=0;return(C=o,p)|0}}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=cb(m|0,l|0,-1,-1)|0;d=C;j=i;i=0;do{e=j;j=g>>>31|j<<1;g=i|g<<1;e=a<<1|e>>>31|0;n=a>>>31|b<<1|0;bb(k,d,e,n)|0;p=C;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=bb(e,n,o&m,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l)|0;b=C;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(f){c[f>>2]=a;c[f+4>>2]=b}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return(C=o,p)|0}function rb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return oa[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function sb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;ba(0);return 0}var oa=[sb,Oa,Pa,Wa,Qa,Ta,Na,sb];return{_memmove:hb,_malloc:_a,_i64Subtract:bb,_free:$a,_memcpy:gb,_LZ4JS_compressBegin:Ba,_LZ4JS_freeCompressionContext:Aa,_LZ4JS_freeDecompressionContext:Fa,_memset:db,_llvm_cttz_i32:ib,_LZ4JS_init:ya,_i64Add:cb,_LZ4JS_compressEnd:Da,_LZ4JS_compressUpdate:Ca,_LZ4JS_decompress:Ga,_bitshift64Lshr:eb,_LZ4JS_createDecompressionContext:Ea,_LZ4JS_createCompressionContext:za,_bitshift64Shl:fb,runPostSets:ab,stackAlloc:pa,stackSave:qa,stackRestore:ra,establishStackSpace:sa,setThrew:ta,setTempRet0:wa,getTempRet0:xa,dynCall_iiiiiii:rb}}(c.W,c.X,buffer),Oa=c._LZ4JS_init=Z._LZ4JS_init,Ea=c._i64Subtract=Z._i64Subtract,Q=c._free=Z._free;c.runPostSets=Z.runPostSets;var Pa=c._LZ4JS_compressBegin=Z._LZ4JS_compressBegin,La=c._memmove=Z._memmove,Qa=c._LZ4JS_freeDecompressionContext=Z._LZ4JS_freeDecompressionContext,Ra=c._LZ4JS_decompress=Z._LZ4JS_decompress,Ga=c._memset=Z._memset,Sa=c._LZ4JS_compressUpdate=Z._LZ4JS_compressUpdate,Na=c._llvm_cttz_i32=Z._llvm_cttz_i32,O=c._malloc=Z._malloc,Fa=c._i64Add=Z._i64Add,Ta=c._LZ4JS_compressEnd=Z._LZ4JS_compressEnd,Ja=c._memcpy=Z._memcpy,Ua=c._LZ4JS_freeCompressionContext=Z._LZ4JS_freeCompressionContext,Ha=c._bitshift64Lshr=Z._bitshift64Lshr,Va=c._LZ4JS_createDecompressionContext=Z._LZ4JS_createDecompressionContext,Wa=c._LZ4JS_createCompressionContext=Z._LZ4JS_createCompressionContext,Ia=c._bitshift64Shl=Z._bitshift64Shl;function x(a){this.name="ExitStatus",this.message="Program terminated with exit("+a+")",this.status=a}c.dynCall_iiiiiii=Z.dynCall_iiiiiii,z.D=Z.stackAlloc,z.T=Z.stackSave,z.S=Z.stackRestore,z.pa=Z.establishStackSpace,z.ja=Z.setTempRet0,z.ha=Z.getTempRet0,x.prototype=Error(),x.prototype.constructor=x;var Xa=null;function Za(a){function b(){if(!c.calledRun&&(c.calledRun=!0,!F)){if(W||(W=!0,T(V)),T(xa),c.onRuntimeInitialized&&c.onRuntimeInitialized(),c._main&&$a&&c.callMain(a),c.postRun)for("function"==typeof c.postRun&&(c.postRun=[c.postRun]);c.postRun.length;){var b=c.postRun.shift();za.unshift(b)}T(za)}}if(a=a||c.arguments,null===Xa&&(Xa=Date.now()),c.preRun)for("function"==typeof c.preRun&&(c.preRun=[c.preRun]);c.preRun.length;)Aa();T(U),c.calledRun||(c.setStatus?(c.setStatus("Running..."),setTimeout((function(){setTimeout((function(){c.setStatus("")}),1),b()}),1)):b())}function Ya(a,b){if(!b||!c.noExitRuntime)throw!c.noExitRuntime&&(F=!0,y=void 0,T(ya),c.onExit)&&c.onExit(a),w?(process.stdout.once("drain",(function(){process.exit(a)})),console.log(" "),setTimeout((function(){process.exit(a)}),500)):aa&&"function"==typeof quit&&quit(a),new x(a)}c.callMain=c.na=function(a){function b(){for(var a=0;3>a;a++)e.push(0)}assert(!0,"cannot call main when async dependencies remain! (listen on __ATMAIN__)"),assert(0==U.length,"cannot call main when preRun functions remain to be called"),a=a||[],W||(W=!0,T(V));var d=a.length+1,e=[N(Ba(c.thisProgram),"i8",0)];b();for(var g=0;g<d-1;g+=1)e.push(N(Ba(a[g]),"i8",0)),b();e.push(0),e=N(e,"i32",0);try{Ya(c._main(d,e,0),!0)}catch(h){if(!(h instanceof x)){if("SimulateInfiniteLoop"!=h)throw h&&"object"==typeof h&&h.stack&&c.K("exception thrown: "+[h,h.stack]),h;c.noExitRuntime=!0}}},c.run=c.run=Za,c.exit=c.exit=Ya;var ab=[];function E(a){void 0!==a?(c.print(a),c.K(a),a=JSON.stringify(a)):a="",F=!0;var b="abort("+a+") at "+oa()+"\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.";throw ab&&ab.forEach((function(d){b=d(b,a)})),b}if(c.abort=c.abort=E,c.preInit)for("function"==typeof c.preInit&&(c.preInit=[c.preInit]);0<c.preInit.length;)c.preInit.pop()();var $a=!0;c.noInitialRun&&($a=!1),Za();var X={};(function(){function a(a){return Array.prototype.slice.call(arguments,1).forEach((function(b){null!=b&&"object"==typeof b&&Object.keys(b).forEach((function(d){a[d]=b[d]}))})),a}function b(a){var b,d,e=0;return b=a.map((function(a){return a.length})).reduce((function(a,b){return a+b}),0),d=new Uint8Array(b),a.forEach((function(a){d.set(a,e),e+=a.length})),d}function d(a){return function(b){var d=a.apply(null,arguments);return Buffer.isBuffer(b)?new Buffer(d.buffer,d.byteOffset,d.byteOffset+d.length):d}}function e(b){if(this.options=a({},p,b),this.g=Wa(this.options.Z,+this.options.Y,+this.options.ba,this.options.aa),!this.g)throw Error("LZ4JS_createCompressionContext");X[this.g]=this,this.n=null}function g(){if(this.p=Va(),!this.p)throw Error("LZ4JS_createDecompressionContext");X[this.p]=this}function k(a,b){e.call(this,b),this.src=a,this.offset=0,this.o=[],this.e=0}function h(a,d){var e=new k(a,d);return e.M(),e.$(),e.N(),b(e.o)}function f(a){g.call(this),this.src=a,this.offset=0,this.o=[],this.e=0}function u(a){var d=new f(a);return d.da(),d=b(d.o),a instanceof Uint8Array?d:new Buffer(d.buffer)}var m=this;"function"==typeof define&&define.amd?define("lz4",(function(){return m})):w&&(module.exports=m),Oa(),m.BLOCK_MAX_SIZE_64KB=4,m.BLOCK_MAX_SIZE_256KB=5,m.BLOCK_MAX_SIZE_1MB=6;var p={Z:m.BLOCK_MAX_SIZE_4MB=7,Y:!1,ba:!1,aa:0};e.prototype.M=function(){Pa(this.g)||this.k()},e.prototype.O=function(){Sa(this.g)||this.k()},e.prototype.N=function(){Ta(this.g),this.k()},e.prototype.k=function(){if(Ua(this.g),delete X[this.g],this.n)throw this.n},g.prototype.P=function(){Ra(this.p)||this.k()},g.prototype.k=function(){if(Qa(this.p),delete X[this.p],this.n)throw this.n},w&&function(){function b(a){e.call(this,a),f.call(this,this.options),this.R=!1,this.e=0,this.src=new Buffer(0),this.q=new Buffer(0)}function d(){g.call(this),f.call(this,{}),this.e=0,this.src=new Buffer(0),this.q=new Buffer(0)}var f=require("stream").Transform,h=require("util").inherits;h(b,f),a(b.prototype,e.prototype),b.prototype.u=function(a){return P.set(new Uint8Array(this.src.buffer,this.src.byteOffset,this.e),a),this.e},b.prototype.A=function(a,b){this.q=new Buffer(P.buffer).slice(a,a+b),this.push(new Buffer(this.q))},b.prototype._transform=function(a,b,d){try{var e;for(this.R||(this.M(),this.R=!0),e=0;e<a.length;e+=8192)this.e=Math.min(a.length-e,8192),this.src=a.slice(e,e+this.e),this.O();d()}catch(f){d(f)}},b.prototype._flush=function(a){try{this.N(),a()}catch(b){a(b)}},m.createCompressStream=function(a){return new b(a)},h(d,f),a(d.prototype,g.prototype),d.prototype.u=function(a){return P.set(new Uint8Array(this.src.buffer,this.src.byteOffset,this.e),a),this.e},d.prototype.A=function(a,b){this.q=new Buffer(P.buffer).slice(a,a+b),this.push(new Buffer(this.q))},d.prototype._transform=function(a,b,d){try{var e;for(e=0;e<a.length;e+=8192)this.e=Math.min(a.length-e,8192),this.src=a.slice(e,e+this.e),this.P();d()}catch(f){d(f)}},d.prototype._flush=function(a){this.k(),a()},m.createDecompressStream=function(){return new d}}(),a(k.prototype,e.prototype),k.prototype.A=function(a,b){this.o.push(new Uint8Array(P.subarray(a,a+b)))},k.prototype.u=function(a){return P.set(this.src.subarray(this.offset,this.offset+this.e),a),this.e},k.prototype.$=function(){for(;this.offset<this.src.length;this.offset+=8192)this.e=Math.min(this.src.length-this.offset,8192),this.O()},m.compress=w?d(h):h,a(f.prototype,g.prototype),f.prototype.A=function(a,b){this.o.push(new Uint8Array(P.subarray(a,a+b)))},f.prototype.u=function(a){return P.set(this.src.subarray(this.offset,this.offset+this.e),a),this.e},f.prototype.da=function(){for(;this.offset<this.src.length;this.offset+=8192)this.e=Math.min(this.src.length-this.offset,8192),this.P();this.k()},m.decompress=w?d(u):u}).call(this)}).call(lz4);var hortis=fluid.registerNamespace("hortis");fluid.setLogging(!0),fluid.defaults("hortis.configHolder",{gradeNames:"fluid.component"}),fluid.defaults("hortis.sunburstLoader",{gradeNames:["fluid.viewComponent","fluid.resourceLoader","hortis.configHolder"],sunburstPixels:1002,markupTemplate:"%resourceBase/html/imerss-viz.html",phyloMap:"%resourceBase/json/phyloMap.json",resourceBase:"src/client",queryOnStartup:"",selectOnStartup:"",showObsListInTooltip:!0,gridResolution:void 0,friendlyNames:void 0,initialTab:"checklist",distributeOptions:{gridResolution:{source:"{that}.options.gridResolution",target:"{that hortis.quantiser}.options.model.longResolution"},friendlyNames:{source:"{that}.options.friendlyNames",target:"{that hortis.sunburst}.options.friendlyNames"},initialTab:{source:"{that}.options.initialTab",target:"{that hortis.imerssTabs}.options.model.selectedTab"}},resourceOptions:{terms:{resourceBase:"{that}.options.resourceBase"}},resources:{viz:{url:"{that}.options.vizFile",dataType:"binary",options:{processData:!1,responseType:"arraybuffer"}},markup:{url:"{that}.options.markupTemplate",dataType:"text"},phyloMap:{url:"{that}.options.phyloMap",dataType:"json"}},invokers:{resolveColourStrategy:"hortis.resolveColourStrategy({that}.options.colourCount)"},listeners:{"onResourcesLoaded.renderMarkup":{priority:"first",listener:"hortis.sunburstLoader.renderMarkup",args:["{that}.container","{that}.resources.markup.resourceText","{that}.options.renderMarkup",{sunburstPixels:"{that}.options.sunburstPixels"}]}},components:{sunburst:{type:"hortis.sunburst",createOnEvent:"onResourcesLoaded",options:{container:"{sunburstLoader}.container",gradeNames:"{sunburstLoader}.resolveColourStrategy",colourCount:"{sunburstLoader}.options.colourCount",culturalValues:"{sunburstLoader}.options.culturalValues",suppressObsAuthors:"{sunburstLoader}.options.suppressObsAuthors",queryOnStartup:"{sunburstLoader}.options.queryOnStartup",selectOnStartup:"{sunburstLoader}.options.selectOnStartup",members:{viz:"@expand:hortis.decompressLZ4({sunburstLoader}.resources.viz.resourceText)",tree:"{that}.viz.tree"},model:{commonNames:"{sunburstLoader}.options.commonNames"}}}}}),hortis.resolveResources=function(resources,terms){return fluid.transform(resources,(function(oneResource){return fluid.extend(!0,{},oneResource,{url:fluid.stringTemplate(oneResource.url,terms)})}))},hortis.decompressLZ4=function(arrayBuffer){const uint8in=new Uint8Array(arrayBuffer),uint8out=lz4.decompress(uint8in),text=new TextDecoder("utf-8").decode(uint8out);return JSON.parse(text)},hortis.combineSelectors=function(){return fluid.makeArray(arguments).join(", ")},hortis.sunburstLoader.renderMarkup=function(container,template,renderMarkup,terms){if(renderMarkup){const rendered=fluid.stringTemplate(template,terms),root=document.createRange().createContextualFragment(rendered).firstElementChild;for(;root.firstChild;)container[0].appendChild(root.firstChild)}},hortis.colouringGrades={undocumentedCount:"fluid.component",observationCount:"hortis.sunburstWithObsColour"},hortis.resolveColourStrategy=function(countField){return hortis.colouringGrades[countField]},fluid.defaults("hortis.sunburstWithObsColour",{gradeNames:"fluid.component",invokers:{fillColourForRow:"hortis.obsColourForRow({that}.options.parsedColours, {arguments}.0, {that}.flatTree.0)"}}),fluid.defaults("hortis.imerssTabs",{gradeNames:"hortis.tabs",tabIds:{simpleChecklist:"fli-tab-simple-checklist",checklist:"fli-tab-checklist",sunburst:"fli-tab-sunburst"},model:{}}),fluid.defaults("hortis.layoutHolder",{gradeNames:"fluid.modelComponent",members:{taxonHistory:[]},model:{rowFocus:{},layoutId:null,selectedId:null,hoverId:null,historyIndex:0}}),fluid.defaults("hortis.withPanelLabel",{gradeNames:"fluid.viewComponent",selectors:{panelLabel:".fld-imerss-panel-label"},model:{panelLabel:""},modelRelay:{panelLabel:{source:"panelLabel",target:"dom.panelLabel.text"}}}),fluid.defaults("hortis.sunburst",{gradeNames:["hortis.layoutHolder","hortis.withPanelLabel","fluid.viewComponent"],selectors:{panelLabel:"#fli-tab-sunburst .fld-imerss-panel-label",svg:".flc-imerss-svg",back:".fld-imerss-back",tabs:".fld-imerss-tabs",taxonDisplay:".fld-imerss-taxonDisplay",autocomplete:".fld-imerss-autocomplete",checklist:".fld-imerss-checklist-holder",simpleChecklist:".fld-imerss-simple-checklist-holder",segment:".fld-imerss-segment",label:".fld-imerss-label",phyloPic:".fld-imerss-phyloPic"},styles:{segment:"fld-imerss-segment",label:"fld-imerss-label",phyloPic:"fld-imerss-phyloPic",layoutRoot:"fl-imerss-layoutRoot",labelPath:"fld-imerss-labelPath",clickable:"fl-imerss-clickable"},components:{autocomplete:{type:"hortis.autocomplete",options:{container:"{sunburst}.dom.autocomplete",id:"fli-imerss-autocomplete",listeners:{onConfirm:"hortis.confirmAutocomplete({sunburst}, {arguments}.0)"},invokers:{query:"hortis.queryAutocomplete({that}.lookupTaxon, {arguments}.0, {arguments}.1)",lookupTaxon:"{sunburst}.lookupTaxon({arguments}.0, {that}.options.maxSuggestions)",renderInputValue:"hortis.autocompleteInputForRow",renderSuggestion:"hortis.autocompleteSuggestionForRow"}}},tabs:{type:"hortis.imerssTabs",options:{container:"{sunburst}.dom.tabs",modelRelay:{sunburstVisible:{target:"{sunburst}.model.visible",func:tab=>"sunburst"===tab,args:"{tabs}.model.selectedTab"}}}},checklist:{type:"hortis.checklist",options:{container:"{sunburst}.dom.checklist"}},simpleChecklist:{type:"hortis.checklist",options:{container:"{sunburst}.dom.simpleChecklist",filterRanks:["phylum","class","order","species"]}}},colours:{lowColour:"#9ecae1",highColour:"#e7969c",unfocusedColour:"#ddd"},zoomDuration:1250,scaleConfig:{innerDepth:1/22,outerDepth:13/22,rootRadii:[3/22,3/22,3/22,13/22],maxNodes:200},parsedColours:"@expand:hortis.parseColours({that}.options.colours)",colourCount:"undocumentedCount",culturalValues:!0,friendlyNames:!1,suppressObsAuthors:!1,model:{scale:{left:0,right:0,radiusScale:[]},visible:!1,commonNames:!0},modelRelay:{isAtRoot:{target:"isAtRoot",func:"hortis.isAtRoot",args:["{that}","{that}.model.layoutId"]},backEnabled:{target:"dom.back.attr.aria-disabled",func:index=>index<2,args:"{that}.model.historyIndex"}},markup:{segmentHeader:'<g xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">',segment:'<path id="%id" d="%path" visibility="%visibility" class="%clazz" vector-effect="non-scaling-stroke" style="%style"></path>',label:'<path id="%labelPathId" d="%textPath" visibility="%labelVisibility" class="%labelPathClass" vector-effect="non-scaling-stroke"></path><text id="%labelId" dy="0.25em" class="%labelClass" visibility="%labelVisibility" style="%labelStyle"><textPath xlink:href="#%labelPathId" startOffset="50%" style="text-anchor: middle">%label</textPath></text>',phyloPic:'<image id="%phyloPicId" class="%phyloPicClass fl-imerss-clickable" xlink:href="%phyloPicUrl" height="%diameter" width="%diameter" x="%phyloPicX" y="%phyloPicY" />',segmentFooter:"</g>",taxonDisplayHeader:"<div>",taxonDisplayRow:'<div %rootAttrs><span class="fl-taxonDisplay-key">%key</span><span class="fl-taxonDisplay-value %valueClazz">%value</span></div>',taxonDisplayFooter:"</div>"},events:{changeLayoutId:null},invokers:{render:"hortis.render({that})",renderLight:"hortis.renderLight({that})",renderSegment:"hortis.renderSegment({that}, {arguments}.0, {arguments}.1)",angleScale:"hortis.angleScale({arguments}.0, {that}.model.scale)",elementToRow:"hortis.elementToRow({that}, {arguments}.0)",segmentClicked:"hortis.segmentClicked({that}, {arguments}.0)",fillColourForRow:"hortis.undocColourForRow({that}.options.parsedColours, {arguments}.0)",getMousable:"hortis.combineSelectors({that}.options.selectors.segment, {that}.options.selectors.label, {that}.options.selectors.phyloPic)",lookupTaxon:"hortis.lookupTaxon({that}.flatTree, {arguments}.0, {arguments}.1)"},modelListeners:{scale:{excludeSource:"init",func:"{that}.renderLight"},selectedId:[{namespace:"updateTaxonDisplay",excludeSource:"init",funcName:"hortis.updateTaxonDisplay",args:["{that}","{change}.value"]},{namespace:"renderLight",excludeSource:"init",func:"{that}.renderLight"}],hoverId:{excludeSource:"init",funcName:"hortis.updateTooltip",args:["{that}","{change}.value"]},rowFocus:{funcName:"hortis.updateRowFocus",args:["{that}","{change}.value","{change}.transaction"]},backClick:{path:"dom.back.click",funcName:"hortis.backTaxon",args:["{that}"]}},listeners:{"onCreate.doLayout":{func:"hortis.doLayout",args:["{that}.flatTree"]},"onCreate.computeInitialScale":{funcName:"hortis.computeInitialScale",args:["{that}"],priority:"after:doLayout"},"onCreate.boundNodes":{funcName:"hortis.boundNodes",args:["{that}","{that}.model.layoutId",!0],priority:"before:render"},"onCreate.applyPhyloMap":{funcName:"hortis.applyPhyloMap",args:["{sunburstLoader}.resources.phyloMap.parsed","{that}.flatTree","{sunburstLoader}.options.resourceOptions.terms"],priority:"before:computeInitialScale"},"onCreate.render":{func:"{that}.render",priority:"after:computeInitialScale"},"onCreate.bindSunburstMouse":{funcName:"hortis.bindSunburstMouse",args:["{that}"]},"onCreate.bindRowExpander":{funcName:"hortis.bindRowExpander",args:["{that}"]},"changeLayoutId.updateModel":"hortis.changeLayoutId({that}, {arguments}.0, {arguments}.1)"},members:{visMap:[],tree:null,flatTree:"@expand:hortis.flattenTree({that}.tree)",maxDepth:"@expand:hortis.computeMaxDepth({that}.flatTree)",index:"@expand:hortis.indexTree({that}.flatTree)"}}),hortis.capitalize=function(string){return string.charAt(0).toUpperCase()+string.slice(1)},hortis.autocompleteInputForRow=function(row){return row?hortis.labelForRow(row)+(row.commonName?" ("+row.commonName+")":""):row},hortis.autocompleteSuggestionForRow=function(row){return hortis.autocompleteInputForRow(row)+(row.childCount>1?" ("+row.childCount+" species)":"")},hortis.lookupTaxon=function(flatTree,query,maxSuggestions){maxSuggestions=maxSuggestions||1;const output=[];query=query.toLowerCase();for(let i=0;i<flatTree.length;++i){const row=flatTree[i];if(-1!==hortis.autocompleteInputForRow(row).toLowerCase().indexOf(query)&&output.push(row),output.length>=maxSuggestions)break}return 1===maxSuggestions?output[0]:output},hortis.queryAutocomplete=function(lookupTaxon,query,callback){callback(lookupTaxon(query))},hortis.confirmAutocomplete=function(that,row){row&&that.events.changeLayoutId.fire(row.id,"autocomplete")},hortis.rowToPhyloIndex=function(row){return row.rank+":"+row.iNaturalistTaxonName},hortis.colourChildren=function(row,parsed){row.lowColour=parsed.lowColour,row.highColour=parsed.highColour,row.children.forEach((function(child){hortis.colourChildren(child,parsed)}))},hortis.applyPhyloMap=function(phyloMap,rows,terms){const parsedMap=fluid.transform(phyloMap,(function(onePhylo){const togo={};if(onePhylo.pic&&(togo.phyloPicUrl=fluid.stringTemplate(onePhylo.pic,terms)),onePhylo.taxonPic&&(togo.taxonPic=fluid.stringTemplate(onePhylo.taxonPic,terms)),togo.taxonPicDescription=onePhylo.taxonPicDescription,onePhylo.colour){const parsedColour=fluid.colour.hexToArray(onePhylo.colour),hsl=fluid.colour.rgbToHsl(parsedColour);togo.lowColour=fluid.colour.hslToRgb([hsl[0],hsl[1],.2*hsl[2]+.8]),togo.highColour=fluid.colour.hslToRgb([hsl[0],hsl[1],.8*hsl[2]+.2])}return togo}));rows.forEach((function(row){const phyloIndex=hortis.rowToPhyloIndex(row),parsed=parsedMap[phyloIndex];parsed&&(row.phyloPicUrl=parsed.phyloPicUrl,row.taxonPic=parsed.taxonPic,row.taxonPicDescription=parsed.taxonPicDescription,hortis.colourChildren(row,parsed))}))},hortis.taxonDisplayLookup={iNaturalistTaxonName:"Taxon Name:",observationCount:"Observation Count:",iNaturalistObsLink:"Observation:",taxonLink:"iNaturalist Taxon:",commonName:"Common Name:",wikipediaSummary:"Wikipedia Summary",iNaturalistTaxonImage:"iNaturalist Taxon Image:",phyloPic:"Taxon Icon:",taxonPic:"Taxon Picture:",taxonPicDescription:"Taxon Picture Description:"},hortis.friendlyDisplayLookup={...hortis.taxonDisplayLookup,iNaturalistTaxonName:"Species:"},hortis.commonFields=["commonName","wikipediaSummary"],hortis.dumpRow=function(key,value,markup,extraClazz,valueClazz,options){if(value){const toLook=options?.friendlyNames?hortis.friendlyDisplayLookup:hortis.taxonDisplayLookup,keyName=key?toLook[key]||hortis.capitalize(key):"",clazz="fl-taxonDisplay-row "+(extraClazz||"");return valueClazz=valueClazz||"",fluid.stringTemplate(markup.taxonDisplayRow,{key:keyName,value:value,rootAttrs:'class="'+clazz+'"',valueClazz:valueClazz})}return""},hortis.renderDate=function(date){return new Date(date).toISOString().substring(0,10)},hortis.expandButtonMarkup='<span class="fl-taxonDisplay-expand fl-taxonDisplay-unexpanded"></span>',hortis.sourceTable={iNat:"iNaturalist",PMLS:"Pacific Marine Life Surveys",RBCM:"Royal British Columbia Museum",CMN:"Canadian Museum of Nature",BCCSN:"British Columbia Cetacean Sightings Network","Gal-Salm":"Erickson",CHU2010:"Chu and Leys (2010)",CHU2012:"Chu and Leys (2012)",Hunterston:"Hunterston Farms BioBlitz 2010"},hortis.sourceFromId=function(obsId){const colpos=obsId?obsId.indexOf(":"):-1;return-1===colpos?null:obsId.substring(0,colpos)},hortis.renderObsId=function(obsId){if("iNat"===hortis.datasetIdFromObs(obsId)){const localId=hortis.localIdFromObs(obsId);return fluid.stringTemplate('<a target="_blank" href="https://www.inaturalist.org/observations/%obsId">%obsId</a>',{obsId:localId})}return obsId},hortis.renderObsBound=function(row,prefix,markup,options){if(row[prefix+"Timestamp"]){const capPrefix="since"===prefix?"":hortis.capitalize(prefix),recordedBy=row[prefix+"RecordedBy"],catalogueNumber=row[prefix+"CatalogueNumber"],value=hortis.renderDate(row[prefix+"Timestamp"])+(recordedBy&&!options.suppressObsAuthors?" by "+recordedBy:""),row1=hortis.dumpRow(capPrefix+("since"===prefix?" Observed:":" Reported:"),value,markup),obsId=row[prefix+"ObservationId"],collection=row[prefix+"Collection"],obsIdCollection=hortis.sourceFromId(row[prefix+"ObservationId"]);let source=(hortis.sourceTable[obsIdCollection||collection]||collection)+(catalogueNumber?" ("+catalogueNumber+")":"");obsId&&"iNat"===obsIdCollection&&(source+=" observation "+hortis.renderObsId(obsId));return row1+hortis.dumpRow("Source:",source,markup)}return""},hortis.drivePlayer='<iframe frameborder="0" width="360" height="55" src="%url"></iframe>',hortis.driveToPreview=function(url){const lastSlash=url.lastIndexOf("/");return url.substring(0,lastSlash)+"/preview"},hortis.hulqValues=["food","medicinal","spiritual","material","trade","indicator"],hortis.hulqValueItem='<div class="fl-imerss-cultural-value"><div role="img" class="fld-imerss-value-%img fl-imerss-cultural-value-img"></div><div class="fld-imerss-cultural-value-text">%label</div></div>',hortis.hulqValueBlock='<div class="fl-imerss-cultural-values">%valueBlocks</div>',hortis.dumpHulqName=function(row,markup){const player=row.audioLink?fluid.stringTemplate(hortis.drivePlayer,{url:hortis.driveToPreview(row.audioLink)}):"";return hortis.dumpRow("Hul'qumi'num name",row.hulqName+player,markup)},hortis.dumpHulqValues=function(row,markup){const valueBlocks=hortis.hulqValues.map((function(value){return"1"===row[value+"Value"]?value:"missing"})).map((function(img,index){return fluid.stringTemplate(hortis.hulqValueItem,{img:img,label:hortis.hulqValues[index]})})),valueBlock=fluid.stringTemplate(hortis.hulqValueBlock,{valueBlocks:valueBlocks.join("\n")});return hortis.dumpRow("Cultural values"," ",markup,"fl-taxonDisplay-empty-header")+hortis.dumpRow("",valueBlock,markup,"fl-taxonDisplay-empty-row")},hortis.iNatExtern='<a href="%iNatLink" target="_blank" class="fl-taxonDisplay-iNat-extern">iNaturalist<span class="fl-external-link"></span></a>',hortis.imageTemplate='<div class="fl-taxonDisplay-image-holder"><div class="fl-imerss-photo" style="background-image: url(%imgUrl)"/>%iNatExtern</div></div>',hortis.idToTaxonLink=function(taxonId){return"https://www.inaturalist.org/taxa/"+taxonId},hortis.renderTaxonDisplay=function(row,markup,options){if(!row)return null;let togo=markup.taxonDisplayHeader;const dumpRow=function(keyName,value,extraClazz,options){if("wikipediaSummary"===keyName&&value){const row1=hortis.dumpRow("Wikipedia Summary",hortis.expandButtonMarkup,markup,"fld-taxonDisplay-expandable-header fl-taxonDisplay-runon-header"),row2=hortis.dumpRow("",value,markup,"fld-taxonDisplay-expandable-remainder fl-taxonDisplay-runon-remainder","fl-taxonDisplay-wikipediaSummary");togo+=row1+row2}else togo+=hortis.dumpRow(keyName,value,markup,extraClazz,void 0,options)},dumpImage=function(keyName,url,taxonId){const imageMarkup=fluid.stringTemplate(hortis.imageTemplate,{imgUrl:url,iNatExtern:taxonId?fluid.stringTemplate(hortis.iNatExtern,{iNatLink:hortis.idToTaxonLink(taxonId)}):""});togo+=imageMarkup};if(row.rank)row.iNaturalistTaxonImage&&!row.taxonPic?dumpImage(0,row.iNaturalistTaxonImage,row.iNaturalistTaxonId):row.taxonPic&&dumpImage(0,row.taxonPic),row.phyloPicUrl&&(keyName="phyloPic",url=row.phyloPicUrl,togo+=hortis.dumpRow(keyName,'<div><img alt="Taxon photo" height="150" width="150" class="fl-imerss-photo" src="'+url+'"/></div>',markup)),dumpRow(row.rank,row.iNaturalistTaxonName,"fl-taxonDisplay-rank"),hortis.commonFields.forEach((function(field){dumpRow(field,row[field])})),dumpRow("taxonPicDescription",row.taxonPicDescription),dumpRow("Species:",row.childCount),dumpRow("observationCount",row.observationCount);else{row.iNaturalistTaxonImage&&!row.obsPhotoLink&&dumpImage(0,row.iNaturalistTaxonImage,row.iNaturalistTaxonId),row.species&&dumpRow("iNaturalistTaxonName",row.iNaturalistTaxonName+(row.authority?" "+row.authority:""),"fl-taxonDisplay-rank",options),row.hulqName&&(togo+=hortis.dumpHulqName(row,markup)),dumpRow("commonName",row.commonName),row.hulqName&&options.culturalValues&&(togo+=hortis.dumpHulqValues(row,markup)),dumpRow("wikipediaSummary",row.wikipediaSummary);let obsPanel="";obsPanel+=hortis.renderObsBound(row,"first",markup,options),obsPanel+=hortis.renderObsBound(row,"last",markup,options),obsPanel+=hortis.renderObsBound(row,"since",markup,options),row.iNaturalistObsLink&&(obsPanel+=hortis.dumpRow("iNaturalistObsLink",'<a href="'+row.iNaturalistObsLink+'">'+row.iNaturalistObsLink+"</a>",markup)),obsPanel+=hortis.dumpRow("observationCount",row.observationCount,markup),togo+=hortis.dumpRow("Observation Data",hortis.expandButtonMarkup,markup,"fld-taxonDisplay-expandable-header"),togo+=hortis.dumpRow("",obsPanel,markup,"fld-taxonDisplay-expandable-remainder fl-taxonDisplay-runon-remainder"),row.obsPhotoLink&&dumpImage(0,row.obsPhotoLink)}var keyName,url;return togo+=markup.taxonDisplayFooter,togo},hortis.bindRowExpander=function(){$(document).on("click",".fl-taxonDisplay-expand",(function(e){const target=$(e.target);target.toggleClass("fl-taxonDisplay-expanded"),target.toggleClass("fl-taxonDisplay-unexpanded");const showing=target.hasClass("fl-taxonDisplay-expanded"),header=target.closest(".fld-taxonDisplay-expandable-header");header.toggleClass("fl-taxonDisplay-expanded",showing);const siblings=header.parent().children(),ownIndex=header.index(),next=$(siblings[ownIndex+1]);next.hasClass("fld-taxonDisplay-expandable-remainder")&&next[showing?"show":"hide"]()}))},hortis.updateTaxonDisplay=function(that,id){const content=id?hortis.renderTaxonDisplay(that.index[id],that.options.markup,that.options):null,taxonDisplay=that.locate("taxonDisplay");content&&(taxonDisplay.empty(),taxonDisplay.html(content))},hortis.tooltipTemplate='<div class="fl-imerss-tooltip"><div class="fl-imerss-photo" style="background-image: url(%imgUrl)"></div><div class="fl-text"><b>%taxonRank:</b> %taxonNames</div></div>',hortis.renderTooltip=function(row){const terms={imgUrl:row.iNaturalistTaxonImage||""};row.rank?terms.taxonRank=hortis.capitalize(row.rank):terms.taxonRank="Species";const names=[row.iNaturalistTaxonName,row.commonName,row.hulqName].filter((name=>name));return terms.taxonNames=names.join(" / "),fluid.stringTemplate(hortis.tooltipTemplate,terms)},hortis.isInDocument=function(node){const dokkument=fluid.getDocument(node),container=node[0];return $.contains(dokkument,container)||dokkument===container},hortis.clearAllTooltips=function(that){hortis.clearTooltip(that),$(".ui-tooltip").remove(),that.applier.change("hoverId",null)},hortis.clearTooltip=function(that){const tooltipTarget=that.tooltipTarget;tooltipTarget&&(that.tooltipTarget=null,hortis.isInDocument(tooltipTarget)?(console.log("Cleared tooltip"),tooltipTarget.tooltip("destroy")):(console.log("Tooltip target lost from document"),hortis.clearAllTooltips(that)))},hortis.updateTooltip=function(that,id){const content=id?hortis.renderTooltip(that.index[id],that.options.markup):null,target=$(that.mouseEvent.target);hortis.clearTooltip(that),content?(console.log("Opening tooltip for node "+id),target.tooltip({items:target}),target.tooltip("option","content",content||""),target.tooltip("option","track",!0),target.tooltip("open",that.mouseEvent),that.tooltipTarget=target):that.mouseEvent=null},hortis.isAtRoot=function(that,layoutId){return layoutId===that.flatTree[0].id},hortis.bindSunburstMouse=function(that){const svg=that.locate("svg"),mousable=that.getMousable();svg.on("click",mousable,(function(){const id=hortis.elementToId(this);let row=that.index[id];!hortis.isAboveLayoutRoot(row,that)&&that.index[id].phyloPicUrl&&(row=that.flatTree[0]),that.segmentClicked(row)})),svg.on("mouseenter",mousable,(function(e){const id=hortis.elementToId(this);that.mouseEvent=e,that.applier.change("hoverId",id)})),svg.on("mouseleave",mousable,(function(){that.applier.change("hoverId",null)}))},hortis.parseColours=function(colours){return fluid.transform(colours,(function(colour){return fluid.colour.hexToArray(colour)}))},hortis.angleScale=function(index,scale){const angle=2*Math.PI*(index-scale.left)/(scale.right-scale.left);return fluid.transforms.limitRange(angle,{min:0,max:2*Math.PI})},hortis.outRings=function(array,count,width){let lastRing=array[array.length-1];for(let i=0;i<count;++i)lastRing+=width,array.push(lastRing)},hortis.makeRadiusScale=function(innerRings,visRings,totalRings,scaleConfig,isAtRoot){console.log("makeRadiusScale with innerRings ",innerRings," visRings ",visRings);const togo=[0];if(isAtRoot&&scaleConfig.rootRadii)scaleConfig.rootRadii.forEach((function(radius){hortis.outRings(togo,1,1e3*radius)})),hortis.outRings(togo,1+totalRings-togo.length,0);else{const outerRings=Math.floor((1-visRings*scaleConfig.innerDepth)/(scaleConfig.outerDepth-scaleConfig.innerDepth));console.log("outerRings determined as ",outerRings);const middleRings=visRings-outerRings-innerRings,middleDepth=(1-outerRings*scaleConfig.outerDepth-innerRings*scaleConfig.innerDepth)/middleRings;hortis.outRings(togo,innerRings,1e3*scaleConfig.innerDepth),hortis.outRings(togo,middleRings,1e3*middleDepth),hortis.outRings(togo,outerRings,1e3*scaleConfig.outerDepth),hortis.outRings(togo,totalRings-visRings,0)}return console.log("makeRadiusScale returning ",togo),togo},hortis.boundNodes=function(that,layoutId,isInit){console.log("boundNodes beginning for node ",layoutId);const layoutRoot=that.index[layoutId],visMap=[];for(let i=0;i<that.flatTree.length;++i)visMap[i]=0;for(let visUp=layoutRoot;visUp;visUp=visUp.parent)visMap[visUp.flatIndex]=1;let depth,totalNodes=1,parents=[layoutRoot];for(depth=layoutRoot.depth;depth<that.maxDepth;++depth){let directChildren=0;if(parents.forEach((function(parent){directChildren+=parent.children.length})),!(directChildren>0&&totalNodes+directChildren<that.options.scaleConfig.maxNodes))break;{const newParents=[];parents.forEach((function(parent){parent.children.forEach((function(child){visMap[child.flatIndex]=1})),newParents.push.apply(newParents,parent.children)})),parents=newParents,totalNodes+=directChildren}}const isAtRoot=hortis.isAtRoot(that,layoutId),radiusScale=hortis.makeRadiusScale(layoutRoot.depth,depth+1,that.maxDepth+1,that.options.scaleConfig,isAtRoot),togo={visMap:visMap,scale:{left:layoutRoot.leftIndex,right:layoutRoot.leftIndex+layoutRoot.childCount,radiusScale:radiusScale}};return console.log("boundNodes returning ",togo),isInit&&(that.visMap=visMap,that.applier.change("scale",togo.scale)),togo},hortis.isClickable=function(row){return row.children.length>0||row.iNaturalistLink||row.iNaturalistTaxonId},hortis.elementClass=function(row,isSelected,styles,baseStyle){return styles[baseStyle]+(hortis.isClickable(row)?" "+styles.clickable:"")+(isSelected?" "+styles.layoutRoot:"")},hortis.elementStyle=function(attrs,elementType){const opacity=void 0===attrs.opacity?"":" opacity: "+attrs.opacity+";";return"segment"===elementType?"fill: "+attrs.fillColour+";"+opacity:opacity},hortis.phyloPicAttrMap={visibility:"visibility",x:"phyloPicX",y:"phyloPicY",height:"diameter",width:"diameter"},hortis.renderLight=function(that){that.flatTree.forEach((function(row,index){if(that.visMap[index]||that.oldVisMap&&that.oldVisMap[index]){const attrs=hortis.attrsForRow(that,row);attrs.fillColour=that.fillColourForRow(row);const isSelected=row.id===that.model.selectedId,segment=fluid.byId("hortis-segment:"+row.id);segment&&(segment.setAttribute("d",attrs.path),segment.setAttribute("visibility",attrs.visibility),segment.setAttribute("class",hortis.elementClass(row,isSelected,that.options.styles,"segment")),segment.setAttribute("style",hortis.elementStyle(attrs,"segment")));const labelPath=fluid.byId("hortis-labelPath:"+row.id);labelPath&&(labelPath.setAttribute("d",attrs.textPath),labelPath.setAttribute("visibility",attrs.labelVisibility));const label=fluid.byId("hortis-label:"+row.id);label&&(label.setAttribute("visibility",attrs.labelVisibility),label.setAttribute("class",hortis.elementClass(row,isSelected,that.options.styles,"label")),label.setAttribute("style",hortis.elementStyle(attrs,"label")));const pic=fluid.byId("hortis-phyloPic:"+row.id);pic&&fluid.each(hortis.phyloPicAttrMap,(function(source,target){pic.setAttribute(target,attrs[source])}))}}))},hortis.renderSVGTemplate=function(template,terms){return fluid.stringTemplate(template,terms)},hortis.interpolateModels=function(f,m1,m2){return fluid.transform(m1,(function(value,key){return"number"==typeof value?(1-f)*value+f*m2[key]:fluid.isPlainObject(value)?hortis.interpolateModels(f,value,m2[key]):value}))},hortis.undocColourForRow=function(parsedColours,row){const undocFraction=1-row.undocumentedCount/row.childCount,interp=fluid.colour.interpolate(undocFraction,row.highColour||parsedColours.highColour,row.lowColour||parsedColours.lowColour);return fluid.colour.arrayToString(interp)},hortis.obsColourForRow=function(parsedColours,row,rootRow){const fraction=Math.pow(row.observationCount/rootRow.observationCount,.2),interp=fluid.colour.interpolate(fraction,row.lowColour||parsedColours.lowColour,row.highColour||parsedColours.highColour),focusProp=row.focusCount/row.childCount,interp2=fluid.colour.interpolate(focusProp,parsedColours.unfocusedColour,interp);return fluid.colour.arrayToString(interp2)},hortis.pathFromRoot=function(row){const togo=[];for(;row;)togo.unshift(row),row=row.parent;return togo},hortis.lcaRoot=function(parents){let lcaRoot;for(let i=0;;++i){let commonValue=null;for(const key in parents){const seg=parents[key][i];if(void 0===seg){commonValue=null;break}if(null===commonValue)commonValue=seg;else if(commonValue!==seg){commonValue=null;break}}if(null===commonValue)break;lcaRoot=commonValue}return lcaRoot},hortis.updateRowFocus=function(that,rowFocus,transaction){const flatTree=that.flatTree,focusAll=$.isEmptyObject(rowFocus);for(let i=flatTree.length-1;i>=0;--i){const row=flatTree[i];let focusCount;focusCount=focusAll||rowFocus[row.id]?row.childCount:row.children.reduce((function(sum,child){return sum+child.focusCount}),0),row.focusCount=focusCount}let target;if(focusAll)target=flatTree[0];else{const parents=fluid.transform(rowFocus,(function(troo,key){return hortis.pathFromRoot(that.index[key])})),lca=hortis.lcaRoot(parents);target=1===Object.keys(parents).length?lca.parent:lca}void 0!==target.leftIndex&&(transaction.fullSources.map&&focusAll||that.events.changeLayoutId.fire(target.id,"rowFocus"))},hortis.elementToId=function(element){const id=element.id;return id.substring(id.indexOf(":")+1)},hortis.elementToRow=function(that,element){const id=hortis.elementToId(element);return that.index[id]},hortis.backTaxon=function(that){that.model.historyIndex>1&&(that.applier.change("historyIndex",that.model.historyIndex-1),that.events.changeLayoutId.fire(that.taxonHistory[that.model.historyIndex-1],"history"))},hortis.changeLayoutId=function(that,layoutId,source){console.log("changeLayoutId to layoutId ",layoutId),that.applier.change("selectedId",layoutId),"history"!==source&&(that.taxonHistory[that.model.historyIndex]=layoutId,that.applier.change("historyIndex",that.model.historyIndex+1));const row=that.index[layoutId];if(0===row.children.length&&(layoutId="autocomplete"===source?row.parent.id:that.model.layoutId),layoutId!==that.model.layoutId||source){if(that.model.layoutId)return hortis.beginZoom(that,layoutId);that.applier.change("layoutId",layoutId)}return fluid.promise().resolve()},hortis.beginZoom=function(that,rowId){that.container.stop(!0,!0),hortis.clearAllTooltips(that);const initialScale=fluid.copy(that.model.scale),newBound=hortis.boundNodes(that,rowId);newBound.scale.zoomProgress=1,console.log("Begin zoom to rowId "+rowId);const togo=fluid.promise();return that.oldVisMap=that.visMap,that.visMap=newBound.visMap,that.render(),that.container.animate({zoomProgress:1},{easing:"swing",duration:that.model.visible?that.options.zoomDuration:0,step:function(zoomProgress){const interpScale=hortis.interpolateModels(zoomProgress,initialScale,newBound.scale);that.applier.change("scale",interpScale)},complete:function(){console.log("Zoom complete"),delete that.oldVisMap,that.container[0].zoomProgress=0,that.applier.change("layoutId",rowId),that.applier.change("scale.zoomProgress",0),that.render(),togo.resolve()}}),togo},hortis.segmentClicked=function(that,row){that.events.changeLayoutId.fire(row.id)},hortis.nameOverrides={Chromista:"Chromists"},hortis.labelForRow=function(row,commonNames){let name=commonNames&&row.commonName?row.commonName:row.iNaturalistTaxonName;return row.hulqName&&(name+=" - "+row.hulqName),name=hortis.nameOverrides[row.iNaturalistTaxonName]||name,hortis.capitalize(name)},hortis.isAboveLayoutRoot=function(row,that){const layoutId=that.model.layoutId;let layoutRow=that.index[layoutId];for(;layoutRow;){if(layoutRow.id===row.id)return!1;layoutRow=layoutRow.parent}return!0},hortis.attrsForRow=function(that,row){let leftAngle=that.angleScale(row.leftIndex),rightAngle=that.angleScale(row.leftIndex+row.childCount),midAngle=(leftAngle+rightAngle)/2,innerRadius=that.model.scale.radiusScale[row.depth],outerRadius=that.model.scale.radiusScale[row.depth+1];const isAboveLayoutRoot=hortis.isAboveLayoutRoot(row,that),isComplete=fluid.model.isSameValue(leftAngle,0)&&fluid.model.isSameValue(rightAngle,2*Math.PI),isCircle=fluid.model.isSameValue(innerRadius,0)&&isComplete,isVisible=!fluid.model.isSameValue(leftAngle,rightAngle)&&!fluid.model.isSameValue(innerRadius,outerRadius),isOuterSegment=fluid.model.isSameValue(outerRadius-innerRadius,1e3*that.options.scaleConfig.outerDepth),label=hortis.labelForRow(row,that.model.commonNames),outerLength=outerRadius*(rightAngle-leftAngle),midRadius=isCircle||!isAboveLayoutRoot?0:(innerRadius+outerRadius)/2,radius=outerRadius-midRadius;fluid.model.isSameValue(leftAngle,Math.PI)&&(leftAngle+=1e-4);const labelVisibility=isOuterSegment?outerLength>45:outerLength>22*label.length,togo={visibility:isVisible?"visible":"hidden",labelVisibility:isVisible&&labelVisibility?"visible":"hidden",label:hortis.encodeHTML(label),phyloPicX:Math.cos(midAngle)*midRadius-radius,phyloPicY:-Math.sin(midAngle)*midRadius-radius,phyloPicUrl:row.phyloPicUrl,diameter:2*radius};if(isComplete?(togo.textPath=hortis.circularTextPath(outerRadius),togo.path=isCircle?hortis.circularPath(outerRadius):hortis.annularPath(innerRadius,outerRadius)):(togo.textPath=isOuterSegment?hortis.linearTextPath(leftAngle,rightAngle,innerRadius,outerRadius):hortis.segmentTextPath(leftAngle,rightAngle,outerRadius),togo.path=hortis.segmentPath(leftAngle,rightAngle,innerRadius,outerRadius)),that.oldVisMap){const index=row.flatIndex;!that.oldVisMap[index]&&that.visMap[index]?togo.opacity=that.model.scale.zoomProgress:that.oldVisMap[index]&&!that.visMap[index]&&(togo.opacity=1-that.model.scale.zoomProgress)}return togo},hortis.renderSegment=function(that,row){const isSelected=row.id===that.model.selectedId,terms=$.extend({id:"hortis-segment:"+row.id,labelPathId:"hortis-labelPath:"+row.id,labelId:"hortis-label:"+row.id,phyloPicId:"hortis-phyloPic:"+row.id,clazz:hortis.elementClass(row,isSelected,that.options.styles,"segment"),labelPathClass:that.options.styles.labelPath,phyloPicClass:that.options.styles.phyloPic,labelClass:hortis.elementClass(row,isSelected,that.options.styles,"label"),fillColour:that.fillColourForRow(row)},hortis.attrsForRow(that,row));terms.style=hortis.elementStyle(terms,"segment"),terms.labelStyle=hortis.elementStyle(terms,"label");const togo=[{position:0,markup:hortis.renderSVGTemplate(that.options.markup.segment,terms)},{position:2,markup:hortis.renderSVGTemplate(that.options.markup.label,terms)}];return terms.phyloPicUrl&&togo.push({position:1,markup:hortis.renderSVGTemplate(that.options.markup.phyloPic,terms)}),togo},hortis.elementComparator=function(element1,element2){return element1.position-element2.position},hortis.render=function(that){let markup=that.options.markup.segmentHeader,elements=[];for(let i=0;i<that.flatTree.length;++i)(that.visMap[i]||that.oldVisMap&&that.oldVisMap[i])&&(elements=elements.concat(that.renderSegment(that.flatTree[i])));elements.sort(hortis.elementComparator),markup+=fluid.getMembers(elements,"markup").join(""),markup+=that.options.markup.segmentFooter;const container=that.locate("svg");container.empty(),hortis.renderSVGElement(markup,container)},hortis.depthComparator=function(rowa,rowb){return rowa.depth-rowb.depth},hortis.flattenTree=function(tree){const flat=[];return flat.push(tree),hortis.flattenTreeRecurse(tree,flat),flat.sort(hortis.depthComparator),flat.forEach((function(row,flatIndex){row.flatIndex=flatIndex})),flat},hortis.indexTree=function(flatTree){const index={};return flatTree.forEach((function(row){index[row.id]=row})),index},hortis.flattenTreeRecurse=function(tree,toAppend){tree.children.forEach((function(child){child.parent=tree,toAppend.push(child),hortis.flattenTreeRecurse(child,toAppend)}))},hortis.doLayout=function(flatTree){fluid.each(flatTree,(function(node){0===node.depth&&(node.leftIndex=0);let thisLeft=node.leftIndex;node.children.forEach((function(child){child.leftIndex=thisLeft,thisLeft+=child.childCount}))}))},hortis.computeMaxDepth=function(flatTree){return flatTree[flatTree.length-1].depth},hortis.doInitialQuery=function(that){const toSelect=that.options.queryOnStartup||that.options.selectOnStartup;return toSelect?that.lookupTaxon(toSelect):that.flatTree[0]},hortis.computeInitialScale=function(that){const root=hortis.doInitialQuery(that);that.events.changeLayoutId.fire(root.id)};var hortis=fluid.registerNamespace("hortis");fluid.defaults("hortis.autocomplete",{gradeNames:["fluid.newViewComponent"],listeners:{"onCreate.render":"hortis.autocomplete.render"},events:{onConfirm:null},maxSuggestions:20,invokers:{query:"hortis.autocomplete.emptyQuery",renderSuggestion:"fluid.identity",renderInputValue:"fluid.identity"},widgetOptions:{displayMenu:"overlay"}}),hortis.autocomplete.emptyQuery=function(query,callback){callback("")},hortis.autocomplete.render=function(that){var widgetOptions=$.extend({element:that.container[0],id:that.options.id,source:that.query,templates:{suggestion:that.renderSuggestion,inputValue:that.renderInputValue},onConfirm:that.events.onConfirm.fire},that.options.widgetOptions);that.widget=accessibleAutocomplete(widgetOptions),$("input",that.container).attr("spellcheck",!1)},fluid.registerNamespace("fluid.colour"),fluid.colour.hexIndirect={3:"001122",4:"00112233",6:"012345",8:"01234567"},fluid.colour.hexToArray=function(hex){"#"!==hex.charAt(0)&&fluid.fail("hex colour must begin with # - "+hex),hex=hex.substring(1);var digits=fluid.transform(hex.split(""),(function(ch){return parseInt(ch,16)})),indirect=fluid.colour.hexIndirect[hex.length];indirect||fluid.fail("Unsupported number of hex digits in "+hex+": can only supply "+Object.keys(fluid.colour.hexIndirect).join(", ")+" digits");for(var array=[],i=0;i<indirect.length;i+=2){var colour=(16*digits[indirect[i]]+digits[indirect[i+1]])/(6===i?255:1);array.push(colour)}return array},fluid.colour.arrayToString=function(array){return(3===array.length?"rgb(":"rgba(")+array.join(", ")+")"},fluid.colour.interpolate=function(f,c1,c2){return fluid.transform([(1-f)*c1[0]+f*c2[0],(1-f)*c1[1]+f*c2[1],(1-f)*c1[2]+f*c2[2]],Math.round)},fluid.colour.average=function(ca){return ca.reduce((function(total,c){return total[0]+=c[0],total[1]+=c[1],total[2]+=c[2],total}),[0,0,0]).map((function(e){return e/ca.length}))},fluid.colour.rgbToHsl=function(c){var h,s,r=c[0]/255,g=c[1]/255,b=c[2]/255,max=Math.max(r,g,b),min=Math.min(r,g,b),l=(max+min)/2;if(max===min)h=s=0;else{var d=max-min;s=l>.5?d/(2-max-min):d/(max+min),h=max===r?(g-b)/d+(g<b?6:0):max===g?(b-r)/d+2:(r-g)/d+4,h/=6}return[h,s,l]},fluid.colour.hue2rgb=function(p,q,t){return t<0?t+=1:t>1&&(t-=1),t<1/6?p+6*(q-p)*t:t<.5?q:t<2/3?p+(q-p)*(2/3-t)*6:p},fluid.colour.hslToRgb=function(hsl){var r,g,b,h=hsl[0],s=hsl[1],l=hsl[2];if(0===s)r=g=b=l;else{var q=l<.5?l*(1+s):l+s-l*s,p=2*l-q;r=fluid.colour.hue2rgb(p,q,h+1/3),g=fluid.colour.hue2rgb(p,q,h),b=fluid.colour.hue2rgb(p,q,h-1/3)}return[Math.round(255*r),Math.round(255*g),Math.round(255*b)]};var hortis=fluid.registerNamespace("hortis");L.Map.include({latLngToLayerPoint:function(latlng){const togo=this.project(L.latLng(latlng))._subtract(this.getPixelOrigin());return togo.x=fluid.roundToDecimal(togo.x,3),togo.y=fluid.roundToDecimal(togo.y,3),togo}}),fluid.defaults("hortis.leafletMap",{gradeNames:["fluid.viewComponent","{sunburstLoader}.options.mapFlavourGrade"],selectors:{map:".fld-imerss-map",tooltip:".fld-imerss-map-tooltip"},mergePolicy:{"members.map":"replace"},members:{toPlot:{},map:"@expand:L.map({that}.dom.map.0, {that}.options.mapOptions)"},datasets:{},selectionTransactionSource:null,model:{mapInitialised:"@expand:{that}.events.buildMap.fire()",datasetEnabled:"@expand:hortis.datasetEnabledModel({that}.options.datasets)",mapBlockTooltipId:null},events:{buildMap:null,clearMapSelection:null},markup:{tooltip:'<div class="fld-imerss-map-tooltip"></div>',grid:'<div class="fld-imerss-map-grid"></div>',tooltipHeader:"<table>",tooltipRow:'<tr><td class="fl-taxonDisplay-key">%key: </td><td class="fl-taxonDisplay-value">%value</td>',tooltipFooter:"</table>"},listeners:{"buildMap.bindZoom":"hortis.leafletMap.bindZoom({that})","buildMap.fitBounds":"hortis.leafletMap.fitBounds({that}, {that}.options.fitBounds)","buildMap.createTooltip":"hortis.leafletMap.createTooltip({that}, {that}.options.markup)","buildMap.addTiles":"hortis.leafletMap.addTileLayer({that}.map, {that}.options.tileOptions)","clearMapSelection.mapBlock":{changePath:"mapBlockTooltipId",value:null}},invokers:{acquireZoom:"hortis.leafletMap.acquireZoom({that})",fitBounds:"hortis.leafletMap.fitBounds({that}, {arguments}.0, {arguments}.1)"},dynamicComponents:{geoJSONLayers:{sources:"{that}.options.geoJSONMapLayers",type:"hortis.geoJSONMapLayer",options:{layer:"{source}"}}},mapOptions:{zoomSnap:.1},heatLow:"#ffffff"}),fluid.defaults("hortis.leafletMapWithWE",{selectors:{WEOverlay:".fld-imerss-we-overlay"},listeners:{"buildMap.bindWEClick":"hortis.leafletMap.bindWEClick({that})"}}),hortis.leafletMap.bindWEClick=function(map){const overlay=map.locate("WEOverlay");overlay.click((function(){map.map.flyToBounds(hortis.projectBounds.Pepiowelh,{duration:2}),overlay.css("opacity",0),overlay.css("pointer-events","none")}))},hortis.leafletMap.acquireZoom=function(map){map.applier.change("zoom",map.map.getZoom())},hortis.leafletMap.bindZoom=function(map){const leafletMap=map.map;leafletMap.on("zoomend",(function(){map.acquireZoom()})),leafletMap.on("moveend",(function(){console.log("Bounds now ",leafletMap.getBounds())}))},fluid.defaults("hortis.streetmapTiles",{tileOptions:{tileUrl:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",tileAttribution:'&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'}}),fluid.defaults("hortis.GBIFTiles",{tileOptions:{tileUrl:"https://tile.gbif.org/3857/omt/{z}/{x}/{y}@1x.png?style=gbif-classic",tileAttribution:'&copy <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors, © <a href="https://openmaptiles.org/">OpenMapTiles</a>, <a href="/citation-guidelines">GBIF</a>'}}),fluid.defaults("hortis.MtbTiles",{tileOptions:{tileUrl:"http://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.png",tileAttribution:'&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors &amp; USGS'}}),hortis.leafletMap.addTileLayer=function(map,tileOptions){tileOptions&&tileOptions.tileUrl&&L.tileLayer(tileOptions.tileUrl,{attribution:tileOptions.tileAttribution}).addTo(map)},hortis.datasetEnabledModel=function(datasets){return fluid.transform(datasets,(function(){return!0}))},fluid.defaults("hortis.geoJSONMapLayer",{gradeNames:"fluid.component",style:{color:"black",weight:1},listeners:{"onCreate.applyLayer":"hortis.applyGeoJSONMapLayer({that}, {hortis.leafletMap})"}}),hortis.applyGeoJSONMapLayer=function(mapLayer,map){L.geoJSON(mapLayer.options.layer,{style:mapLayer.options.style}).addTo(map.map)},hortis.leafletMap.fitBounds=function(map,fitBounds){fitBounds&&(map.map.fitBounds(fitBounds),map.acquireZoom())},hortis.leafletMap.createTooltip=function(that,markup){const tooltip=$(markup.tooltip).appendTo(that.locate("map"));tooltip.hide(),that.map.createPane("hortis-tooltip",tooltip[0]);const container=that.map.getContainer();$(container).on("click",(function(event){event.target===container&&that.events.clearMapSelection.fire()})),$(document).on("click",(function(event){!event.target.closest(".fld-imerss-nodismiss-map")&&event.target.closest("body")&&that.events.clearMapSelection.fire()}))},hortis.projectBounds={Galiano:[[48.855,-123.65],[49.005,-123.25]],Valdes:[[49,-123.798],[49.144,-123.504]],Xetthecum:[[48.93713,-123.511],[48.9511,-123.498]],Pepiowelh:[[48.565,-123.1575],[48.598,-123.1266]],HoweSound:[[49.16,-124.281],[50.17,-122.05]],SalishSea:[[47.568,-124.2],[49.134,-122.059]]},fluid.defaults("hortis.sunburstLoaderWithMap",{gradeNames:"hortis.sunburstLoader",selectors:{mapHolder:".fld-imerss-map-holder"},events:{sunburstLoaded:null},mapBounds:hortis.projectBounds.Galiano,mapGrades:[],mapFlavourGrade:"hortis.leafletMap.withGrid",markupTemplate:"%resourceBase/html/imerss-viz-map.html",distributeOptions:{sunburstLoaded:{target:"{that sunburst}.options.listeners.onCreate",record:"{hortis.sunburstLoaderWithMap}.events.sunburstLoaded.fire"},flatTree:{target:"{that quantiser}.options.members.flatTree",record:"@expand:fluid.identity({sunburst}.flatTree)"},mapGrades:{target:"{that map}.options.gradeNames",source:"{that}.options.mapGrades"}},components:{map:{type:"hortis.leafletMap",container:"{sunburstLoaderWithMap}.dom.mapHolder",createOnEvent:"sunburstLoaded",options:{gradeNames:"hortis.mapWithSunburst",fitBounds:"{hortis.configHolder}.options.mapBounds",showObsListInTooltip:"{hortis.configHolder}.options.showObsListInTooltip"}}}}),fluid.defaults("hortis.scrollyMapLoader",{gradeNames:"hortis.sunburstLoaderWithMap",mapFlavourGrade:"hortis.leafletMap.withBareRegions",selectors:{mapHolder:"{sunburstLoader}.container"},markupTemplate:"%resourceBase/html/imerss-viz-map-scrolly.html"}),fluid.defaults("hortis.svgPatternLoader",{svgPatterns:"%resourceBase/html/xetthecum-patterns.html",resources:{svgPatterns:{url:"{that}.options.svgPatterns",dataType:"text"}},listeners:{"onResourcesLoaded.injectPatterns":{funcName:"hortis.injectSvgPatterns",args:["{svgPatternLoader}.resources.svgPatterns.resourceText","{that}.options.resourceBase","{that}.container"]}}}),hortis.injectSvgPatterns=function(patternText,resourceBase,container){const expanded=patternText.replace(/%resourceBase/g,resourceBase),patterns=$(expanded);container.append(patterns)},fluid.defaults("hortis.mapLoaderWithoutSunburst",{gradeNames:"hortis.sunburstLoaderWithMap",markupTemplate:"%resourceBase/html/imerss-viz-map-only.html",components:{sunburst:{options:{model:{visible:!1},components:{autocomplete:{type:"fluid.emptySubcomponent"},tabs:{type:"fluid.emptySubcomponent"},checklist:{type:"fluid.emptySubcomponent"}}}}}}),fluid.defaults("hortis.mapWithSunburst",{modelListeners:{mapFocusedTooltipToSunburst:{path:"{map}.model.mapBlockTooltipId",func:"hortis.mapBlockToFocusedTaxa",args:["{change}.value","{map}","{sunburst}"]}},datasets:"{sunburst}.viz.datasets",geoJSONMapLayers:"{sunburstLoaderWithMap}.options.geoJSONMapLayers"}),hortis.mapBlockToFocusedTaxa=function(mapBlockTooltipId,map,sunburst){const togo={};if(mapBlockTooltipId){const bucket=map.toPlot[mapBlockTooltipId];bucket&&fluid.each(bucket.byTaxonId,(function(obs,taxonId){togo[taxonId]=!0}))}const source=map.options.selectionTransactionSource,trans=sunburst.applier.initiate(source);trans.change("rowFocus",null,"DELETE",source),trans.change("rowFocus",togo,null,source),trans.commit()},hortis.WGS84a=6378137,hortis.WGS84b=6356752.3142,hortis.WGS84e2=(hortis.WGS84a*hortis.WGS84a-hortis.WGS84b*hortis.WGS84b)/(hortis.WGS84a*hortis.WGS84a),hortis.longitudeLength=function(latitude){const latrad=Math.PI*latitude/180,sinrad=Math.sin(latrad);return Math.PI*hortis.WGS84a*Math.cos(latrad)/(180*Math.sqrt(1-hortis.WGS84e2*sinrad*sinrad))},hortis.latitudeLength=function(latitude){const latrad=Math.PI*latitude/180,sinrad=Math.sin(latrad);return Math.PI*hortis.WGS84a*(1-hortis.WGS84e2)/(180*Math.pow(1-hortis.WGS84e2*sinrad*sinrad,1.5))},hortis.longToLat=function(lng,lat){return lng*hortis.longitudeLength(lat)/hortis.latitudeLength(lat)},hortis.quantiserDataset=function(){return{maxCount:0,totalCount:0,buckets:{},byTaxonId:{}}};var hortis=fluid.registerNamespace("hortis");hortis.intersect=function(target,source){fluid.each(target,(function(value,key){key in source||delete target[key]}))},hortis.combineDatasets=function(enabledList,quantiserDatasets){var intersect,union={obsCount:0,buckets:{},byTaxonId:{}};return enabledList.forEach((function(enabled){var dataset=quantiserDatasets[enabled];intersect?(hortis.intersect(intersect.buckets,dataset.buckets),hortis.intersect(intersect.byTaxonId,dataset.byTaxonId)):intersect={buckets:fluid.extend({},dataset.buckets),byTaxonId:fluid.extend({},dataset.byTaxonId)},fluid.extend(union.buckets,dataset.buckets),fluid.extend(union.byTaxonId,dataset.byTaxonId),union.obsCount+=dataset.totalCount})),{intersect:intersect,union:union}},hortis.renderDatasetControls=function(datasetEnabled,squareSide,datasets,quantiser,indexVersion){console.log("renderDatasetControls executing for indexVersion "+indexVersion);var togo=[{type:"hortis.datasetControlHeader"}];fluid.each(datasets,(function(dataset,datasetId){togo.push({type:"hortis.datasetControl",datasetId:datasetId,dataset:dataset,quantiserDataset:quantiser.datasets[datasetId]})}));var enabledList=fluid.transforms.setMembershipToArray(datasetEnabled),createFooter=function(prefix,dataset){prefix?(hortis.quantiser.datasetToSummary(dataset,squareSide),dataset.obsCount="Union"===prefix?dataset.obsCount:""):dataset.taxaCount=dataset.area=dataset.obsCount="",togo.push(fluid.extend({type:"hortis.datasetControlFooter",text:prefix?prefix+" of "+enabledList.length+" datasets":""},dataset))};if(enabledList.length>1&&Object.keys(quantiser.datasets).length>0){var combinedDatasets=hortis.combineDatasets(enabledList,quantiser.datasets);createFooter("Intersection",combinedDatasets.intersect),createFooter("Union",combinedDatasets.union)}else createFooter("",{}),createFooter("",{});return togo},fluid.defaults("hortis.datasetControlBase",{gradeNames:"fluid.containerRenderingView",parentContainer:"{leafletMap}.dom.datasetControls"}),fluid.defaults("hortis.datasetControlHeader",{gradeNames:"hortis.datasetControlBase",markup:{container:'<tr class="fld-imerss-dataset-control"><td fl-imerss-dataset-legend-column></td><td fl-imerss-dataset-checkbox-column></td><td fl-imerss-dataset-name-column></td>%extraColumns</tr>',cell:'<td class="%columnClass">%text</td>'},invokers:{renderMarkup:"hortis.datasetControl.renderMarkup({that}.options.markup, true)"}}),fluid.defaults("hortis.datasetControl",{gradeNames:"hortis.datasetControlBase",selectors:{legend:".fld-imerss-dataset-legend",enable:".fld-imerss-dataset-checkbox",name:".fld-imerss-dataset-name"},datasetId:"{source}.datasetId",model:{datasetEnabled:!0},modelRelay:{checkbox:{source:"dom.enable.value",target:"datasetEnabled"},name:{source:"datasetControl.dataset.name",target:"dom.name.text"},datasetEnabled:{target:"datasetEnabled",source:{context:"hortis.leafletMap",segs:["datasetEnabled","{that}.options.datasetId"]}},colour:{source:"datasetControl.dataset.colour",target:"dom.legend.style.backgroundColor"}},invokers:{renderMarkup:"hortis.datasetControl.renderMarkup({that}.options.markup, false, {that}.model.dataset, {quantiser}.datasets, {that}.options.datasetId)"},markup:{container:'<tr class="fld-imerss-dataset-control"><td fl-imerss-dataset-legend-column><span class="fld-imerss-dataset-legend"></span></td><td fl-imerss-dataset-checkbox-column><input class="fld-imerss-dataset-checkbox" type="checkbox" value="true"/></td><td fl-imerss-dataset-name-column><span class="fld-imerss-dataset-name"></span></td>%extraColumns</tr>',cell:'<td class="%columnClass">%text</td>'}}),fluid.defaults("hortis.datasetControlFooter",{gradeNames:"hortis.datasetControlBase",selectors:{text:".fl-imerss-dataset-text",obsCount:".fl-imerss-dataset-obs",taxaCount:".fl-imerss-dataset-taxa",area:".fl-imerss-dataset-area"},markup:{container:'<tr><td></td><td></td><td class="fl-imerss-dataset-text"></td><td class="fl-imerss-dataset-obs"></td><td class="fl-imerss-dataset-taxa"></td></tr>'},modelRelay:{text:{source:"datasetControl.text",target:"dom.text.text"},obsCount:{source:"datasetControl.obsCount",target:"dom.obsCount.text"},taxaCount:{source:"datasetControl.taxaCount",target:"dom.taxaCount.text"}}}),hortis.datasetControl.columnNames={totalCount:{name:"Observations",clazz:"fl-imerss-obs-count-column"},taxaCount:{name:"Taxa",clazz:"fl-imerss-taxa-count-column"}},hortis.datasetControl.renderExtraColumns=function(markup,isHeader,dataset,quantiserDataset){var extraColumns=fluid.transform(hortis.datasetControl.columnNames,(function(columnInfo,key){return fluid.stringTemplate(markup,{columnClass:columnInfo.clazz,text:isHeader?columnInfo.name:quantiserDataset[key]})}));return Object.values(extraColumns).join("\n")},hortis.datasetControl.renderMarkup=function(markup,isHeader,dataset,quantiserDatasets,datasetId){var quantiserDataset=quantiserDatasets&&quantiserDatasets[datasetId],extraColumns=hortis.datasetControl.renderExtraColumns(markup.cell,isHeader,dataset,quantiserDataset);return fluid.stringTemplate(markup.container,{extraColumns:extraColumns})};var hortis=fluid.registerNamespace("hortis");fluid.defaults("hortis.leafletMap.withGrid",{selectors:{grid:".fld-imerss-map-grid",datasetControls:".fld-imerss-dataset-controls",datasetsLabel:".fld-imerss-datasets-label"},baseZoomForOutline:11.9,model:{datasetsLabel:"Data Sources:"},modelListeners:{drawGrid:{path:["indexVersion","datasetEnabled"],func:"{that}.drawGrid"},zoomToOutline:{path:"zoom",listener:"hortis.leafletMap.updateOutlineWidth",args:["{change}.value","{that}.options.baseZoomForOutline","{that}.container.0"]},drawScale:{path:"{quantiser}.model.squareSide",func:"hortis.leafletMap.drawScale",args:["{that}","{change}.value"]},updateTooltip:{path:["mapBlockTooltipId","indexVersion","datasetEnabled"],priority:"after:drawGrid",excludeSource:"init",func:"hortis.leafletMap.withGrid.updateTooltip",args:["{that}","{that}.model.mapBlockTooltipId"]},updateTooltipHighlight:{path:"mapBlockTooltipId",excludeSource:"init",func:"hortis.leafletMap.withGrid.updateTooltipHighlight",args:["{that}","{change}.oldValue"]}},invokers:{drawGrid:"hortis.leafletMap.drawGrid({that}, {that}.quantiser, {that}.model.datasetEnabled)"},gridStyle:{className:"fld-imerss-map-region"},listeners:{"buildMap.addGrid":"hortis.leafletMap.withGrid.addGrid({that})"},modelRelay:{renderDatasetControls:{target:"datasetControls",func:"hortis.renderDatasetControls",args:["{that}.model.datasetEnabled","{that}.quantiser.model.squareSide","{that}.options.datasets","{that}.quantiser","{that}.model.indexVersion"]},datasetsLabel:{source:"datasetsLabel",target:"dom.datasetsLabel.text"}},components:{quantiser:{type:"hortis.quantiser",options:{baseLatitude:"{leafletMap}.options.fitBounds.0.0",datasets:"{leafletMap}.options.datasets",model:{indexVersion:"{leafletMap}.model.indexVersion"}}}},dynamicComponents:{datasetControls:{sources:"{that}.model.datasetControls",type:"{source}.type",options:{model:{datasetControl:"{source}"}}}}}),hortis.leafletMap.updateOutlineWidth=function(zoom,baseZoom,container){const relativeZoom=Math.min(1,Math.pow(2,2*(zoom-baseZoom)));container.style.setProperty("--imerss-stroke-width",2*relativeZoom)},hortis.leafletMap.withGrid.addGrid=function(that){that.map.createPane("hortis-grid"),that.gridGroup=L.layerGroup({pane:"hortis-grid"}).addTo(that.map)},hortis.leafletMap.drawScale=function(map,squareSide){const dimText=squareSide.toFixed(0)+"m";map.container.find(".leaflet-bottom.leaflet-left").text("Block size: "+dimText+" x "+dimText)},hortis.rectFromCorner=function(tl,latres,longres){return[[tl[0],tl[1]],[tl[0],tl[1]+longres],[tl[0]+latres,tl[1]+longres],[tl[0]+latres,tl[1]]]},hortis.leafletMap.drawGrid=function(map,quantiser,datasetEnabled){map.gridGroup.clearLayers();const latres=quantiser.model.latResolution,longres=quantiser.model.longResolution,heatLow=fluid.colour.hexToArray(map.options.heatLow),toPlot=map.toPlot={};fluid.each(quantiser.datasets,(function(dataset,datasetId){if(datasetEnabled[datasetId]){const mapDataset=map.options.datasets[datasetId],heatHigh=fluid.colour.hexToArray(mapDataset.colour);fluid.each(dataset.buckets,(function(bucket,key){const prop=Math.pow(bucket.count/dataset.maxCount,.25),fillColour=fluid.colour.interpolate(prop,heatLow,heatHigh);fluid.model.setSimple(toPlot,[key,"colours",datasetId],fillColour);const plotBucket=toPlot[key];plotBucket.count=plotBucket.count||0,plotBucket.count+=bucket.count,plotBucket.byTaxonId=fluid.extend({},plotBucket.byTaxonId,bucket.byTaxonId)}))}})),fluid.each(toPlot,(function(bucket,key){const colours=fluid.values(bucket.colours),colour=fluid.colour.average(colours),topLeft=hortis.quantiser.indexToCoord(key,latres,longres);bucket.polygon=hortis.rectFromCorner(topLeft,latres,longres),bucket.Lpolygon=L.polygon(bucket.polygon,fluid.extend({},map.options.gridStyle,{fillColor:fluid.colour.arrayToString(colour),pane:"hortis-grid"})),map.gridGroup.addLayer(bucket.Lpolygon),bucket.Lpolygon.on("click",(function(){console.log("Map clicked on key ",key),map.applier.change("mapBlockTooltipId",key)}))})),toPlot[map.model.mapBlockTooltipId]||map.applier.change("mapBlockTooltipId",null)},hortis.leafletMap.tooltipRow=function(map,key,value){return fluid.stringTemplate(map.options.markup.tooltipRow,{key:key,value:value})},hortis.leafletMap.withGrid.updateTooltipHighlight=function(map,oldKey){if(oldKey){const oldBucket=map.toPlot[oldKey];if(oldBucket){oldBucket.Lpolygon.getElement().classList.remove("fl-imerss-highlightBlock")}}},hortis.leafletMap.withGrid.updateTooltip=function(map,key){const tooltip=map.locate("tooltip"),bucket=map.toPlot[key];if(bucket){let text=map.options.markup.tooltipHeader;const dumpRow=function(key,value){text+=hortis.leafletMap.tooltipRow(map,key,value)},resolution=map.quantiser.model.longResolution,dp=Math.max(3,1-Math.log10(resolution)),c=function(value){return value.toFixed(dp)};dumpRow("Observation Count",bucket.count),dumpRow("Species Richness",Object.values(bucket.byTaxonId).length);const p=bucket.polygon,lat0=p[0][0],lat1=p[2][0],lng0=p[0][1],lng1=p[1][1];if(dumpRow("Latitude",c(lat0)+" to "+c(lat1)),dumpRow("Longitude",c(lng0)+" to "+c(lng1)),bucket.count<5&&map.options.showObsListInTooltip){const obs=fluid.flatten(Object.values(bucket.byTaxonId));dumpRow("Observations",fluid.transform(obs,hortis.renderObsId).map((s=>"iNaturalist: "+s)).join("<br/>"))}text+=map.options.markup.tooltipFooter,tooltip[0].innerHTML=text,tooltip.show();const element=bucket.Lpolygon.getElement();element.classList.add("fl-imerss-highlightBlock");element.parentNode.insertBefore(element,null)}else tooltip.hide()},fluid.defaults("hortis.quantiser",{gradeNames:"fluid.modelComponent",baseLatitude:51,model:{longResolution:.005,indexVersion:0},modelRelay:{latResolution:{target:"latResolution",singleTransform:{type:"fluid.transforms.free",args:["{that}.model.longResolution","{that}.options.baseLatitude"],func:"hortis.longToLat"}},squareSide:{target:"squareSide",singleTransform:{type:"fluid.transforms.free",func:"hortis.quantiser.squareSide",args:["{that}.options.baseLatitude","{that}.model.latResolution"]}},index:{target:"indexVersion",singleTransform:{type:"fluid.transforms.free",args:["{that}","{that}.options.datasets","{that}.model.latResolution","{that}.model.longResolution","{that}.model.squareSide","{that}.model.indexVersion"],func:"hortis.quantiser.indexTree"}}},members:{datasets:{}},events:{indexUpdated:null},invokers:{datasetToSummary:"hortis.quantiser.datasetToSummary({arguments}.0, {arguments}.1)",indexObs:"hortis.quantiser.indexObs({that}, {arguments}.0, {arguments}.1, {arguments}.2, {arguments}.3, {arguments}.4)"}}),hortis.quantiser.squareSide=function(baseLatitude,latResolution){return hortis.latitudeLength(baseLatitude)*latResolution},hortis.quantiser.indexToCoord=function(index,latres,longres){const coords=index.split("|");return[coords[0]*latres,coords[1]*longres]},hortis.quantiser.coordToIndex=function(coord,latres,longres){if(coord){return Math.floor(coord[0]/latres)+"|"+Math.floor(coord[1]/longres)}return"null"},hortis.datasetIdFromObs=function(obsId){const colpos=obsId.indexOf(":");return obsId.substring(0,colpos)},hortis.localIdFromObs=function(obsId){const colpos=obsId.indexOf(":");return obsId.substring(colpos+1)},hortis.quantiser.indexObs=function(that,coord,obsId,rowId,latResolution,longResolution){const coordIndex=hortis.quantiser.coordToIndex(coord,latResolution,longResolution),datasetId=hortis.datasetIdFromObs(obsId),dataset=that.datasets[datasetId];if(dataset||fluid.fail("Found observation with unknown dataset "+datasetId),dataset.byTaxonId[rowId]=!0,dataset.totalCount++,"null"!==coordIndex){let bucket=dataset.buckets[coordIndex];bucket||(bucket=dataset.buckets[coordIndex]={count:0,byTaxonId:{}}),bucket.count++,dataset.maxCount=Math.max(dataset.maxCount,bucket.count);let bucketTaxa=bucket.byTaxonId[rowId];bucketTaxa||(bucketTaxa=bucket.byTaxonId[rowId]=[]),bucketTaxa.push(obsId)}},hortis.quantiser.datasetToSummary=function(dataset,squareSide){const squareArea=squareSide*squareSide/1e6;dataset.taxaCount=Object.keys(dataset.byTaxonId).length,dataset.area=(Object.keys(dataset.buckets).length*squareArea).toFixed(2)},hortis.quantiser.indexTree=function(that,datasets,latResolution,longResolution,squareSide,indexVersion){that.datasets=fluid.transform(datasets,hortis.quantiserDataset);for(let i=that.flatTree.length-1;i>=0;--i){const row=that.flatTree[i];if(row.coords){const coords=JSON.parse(row.coords);fluid.each(coords,(function(coord,obsId){that.indexObs(coord,obsId,row.id,latResolution,longResolution)}))}}return fluid.each(that.datasets,(function(dataset){that.datasetToSummary(dataset,squareSide)})),indexVersion+1};var hortis=fluid.registerNamespace("hortis");hortis.addStyle=function(text){const style=document.createElement("style");style.type="text/css",style.innerText=text,document.getElementsByTagName("head")[0].appendChild(style)},fluid.defaults("hortis.leafletMap.withRegionsBase",{modelListeners:{selectedRegions:[{namespace:"map",path:"selectedRegions",func:"hortis.leafletMap.showSelectedRegions",args:["{that}","{change}.value"]}]},events:{selectRegion:null},members:{classes:"{sunburst}.viz.classes",communities:"{sunburst}.viz.communities",toPlot:"{sunburst}.viz.communities",regions:"{sunburst}.viz.classes"},listeners:{"clearMapSelection.regions":"hortis.clearSelectedRegions({that})","selectRegion.regionSelection":"hortis.leafletMap.regionSelection({that}, {arguments}.0, {arguments}.1)"}}),fluid.defaults("hortis.leafletMap.withBareRegions",{gradeNames:"hortis.leafletMap.withRegionsBase",members:{map:null},model:{},events:{},listeners:{"buildMap.bindZoom":"fluid.identity","buildMap.fitBounds":"fluid.identity","buildMap.createTooltip":"fluid.identity","buildMap.addTiles":"fluid.identity"}}),hortis.regionOpacity=function(region){return"--imerss-"+hortis.normaliseToClass(region)+"-opacity"},hortis.regionBorder=function(region){return"--imerss-"+hortis.normaliseToClass(region)+"-stroke"},hortis.leafletMap.showSelectedRegions=function(map,selectedRegions){const style=map.container[0].style,noSelection=null===map.model.mapBlockTooltipId;Object.keys(map.regions).forEach((function(key){const lineFeature=map.classes[key].color;style.setProperty(hortis.regionOpacity(key),selectedRegions[key]||noSelection?"1.0":"0.4"),style.setProperty(hortis.regionBorder(key),selectedRegions[key]?"#FEF410":lineFeature?fluid.colour.arrayToString(lineFeature):"none")}))},hortis.leafletMap.selectedRegions=function(selectedRegion,regions){return fluid.transform(regions,(function(junk,key){return!!selectedRegion&&key===selectedRegion}))},hortis.leafletMap.regionSelection=function(map,className,community){map.applier.change("mapBlockTooltipId",community),map.applier.change("selectedRegions",hortis.leafletMap.selectedRegions(className,map.classes)),map.applier.change("selectedCommunities",hortis.leafletMap.selectedRegions(community,map.communities))},hortis.clearSelectedRegions=function(map){map.applier.change("selectedRegions",hortis.leafletMap.selectedRegions(null,map.classes)),map.applier.change("selectedCommunities",hortis.leafletMap.selectedRegions(null,map.communities))};var hortis=fluid.registerNamespace("hortis");fluid.defaults("hortis.leafletMap.withRegions",{gradeNames:"hortis.leafletMap.withRegionsBase",selectors:{legendKeys:".fld-imerss-map-legend-keys"},modelListeners:{legend:{path:"selectedRegions.*",func:"hortis.legendKey.selectRegion",args:["{that}","{change}.value","{change}.path"]}},selectionTransactionSource:"map",model:{selectionRoute:"map"},members:{features:"{sunburst}.viz.features",outerPanel:"{sunburst}.dom.mapOuterPanel"},listeners:{"buildMap.addRegions":"hortis.leafletMap.withRegions.addRegions({that})","buildMap.drawRegions":"hortis.leafletMap.withRegions.drawRegions({that})","buildMap.drawLegend":"hortis.legendKey.drawLegend({that})","onCreate.listenTaxonLinks":"hortis.listenTaxonLinks({sunburst})","onCreate.validateTaxonLinks":"hortis.validateTaxonLinks({sunburst}, {that})","selectRegion.renderOuterPanel":"hortis.leafletMap.renderOuterPanel({that})"},components:{bannerManager:{type:"hortis.bannerManager",container:"body",options:{model:{selectedCommunities:"{hortis.leafletMap}.model.selectedCommunities"}}}}}),fluid.registerNamespace("hortis.legendKey"),hortis.legendKey.rowTemplate='<div class="fld-imerss-legend-row fld-imerss-nodismiss-map %rowClass"><span class="fld-imerss-legend-icon"></span><span class="fld-imerss-legend-preview %previewClass" style="%previewStyle"></span><span class="fld-imerss-legend-label">%keyLabel</span></div>',hortis.legendKey.blockTemplate='<div class="fld-imerss-legend-block"><span class="fld-imerss-legend-block-name fld-imerss-nodismiss-map">%community</span>%rows</div>',hortis.legendKey.renderMarkup=function(markup,clazz,className){const style=hortis.fillColorToStyle(clazz.fillColor||clazz.color),normal=hortis.normaliseToClass(className);return fluid.stringTemplate(markup,{rowClass:"fld-imerss-legend-row-"+normal,previewClass:"fld-imerss-class-"+normal,previewStyle:"background-color: "+style.fillColor,keyLabel:className})},hortis.legendKey.drawLegend=function(map){const blocks=fluid.transform(map.communities,(function(community,key){const clazzRows=fluid.transform(community.classes,(function(troo,className){return hortis.legendKey.renderMarkup(hortis.legendKey.rowTemplate,map.classes[className],className)}));return fluid.stringTemplate(hortis.legendKey.blockTemplate,{community:key,rows:Object.values(clazzRows).join("\n")})})),markup=Object.values(blocks).join("\n"),legendKeys=map.locate("legendKeys");legendKeys.html(markup),map.clazzToLegendNodes=fluid.transform(map.classes,(function(troo,className){const rowSel=".fld-imerss-legend-row-"+hortis.normaliseToClass(className);legendKeys.find(rowSel).click((function(){map.events.selectRegion.fire(className,map.classes[className].community)}))}))},hortis.legendKey.selectRegion=function(map,value,path){const className=fluid.peek(path);map.locate("legendKeys").find(".fld-imerss-legend-row-"+hortis.normaliseToClass(className)).toggleClass("fld-imerss-selected",value)},hortis.fillColorToStyle=function(fillColor){return{fillColor:fluid.colour.arrayToString(fillColor),fillOpacity:1}},fluid.defaults("hortis.bannerManager",{gradeNames:"fluid.viewComponent",selectors:{banner:".fl-xetthecum-banner"},modelListeners:{"selectedCommunities.*":{func:"hortis.bannerManager.toggleClass",args:["{that}.dom.banner","{change}.value","{change}.path"]}}}),hortis.normaliseToClass=function(str){return str.toLowerCase().replace(/ /g,"-")},hortis.bannerManager.toggleClass=function(banner,state,path){const community=fluid.peek(path);banner.toggleClass("fld-imerss-banner-"+hortis.normaliseToClass(community),state)},hortis.leafletMap.seColumns=["What","Where","Importance","Protection","Source"],hortis.leafletMap.hulqNameTemplate=' / <span aria-label="%label" title="%label" class="fl-imerss-hulq-name">%hulqName</span>',hortis.leafletMap.outerPanelPhoto='<div class="fl-imerss-photo %photoClass"></div>',hortis.leafletMap.outerPanelCommunity='<div class="fld-imerss-map-community">Community:<br/>%community%hulqBlock</div>',hortis.leafletMap.outerPanelClass='<div class="fld-imerss-map-class">%clazz%hulqBlock</div>',hortis.leafletMap.outerPanelBlock='<div class="fld-imerss-map-panel-block fld-taxonDisplay-expandable-header fl-taxonDisplay-runon-header">%blockName'+hortis.expandButtonMarkup+'</div><div class="fld-taxonDisplay-expandable-remainder fl-taxonDisplay-runon-remainder">%block</div>',hortis.leafletMap.renderHulqName=function(row){return fluid.stringTemplate(hortis.leafletMap.hulqNameTemplate,{hulqName:row.hulqName,label:"Meaning: "+hortis.encodeHTML(row.hulqMeaning)+" Source: "+hortis.encodeHTML(row.hulqSource)})},hortis.textToMarkup=function(text){return hortis.encodeHTML(text).replace(/\n/g,"<br/>")},hortis.taxonLinkRegex=/\[([^\[]+)\]\(([^\)]*)\)/gm,hortis.convertTaxonLinks=function(text){return text.replace(hortis.taxonLinkRegex,(function(match,p1,p2){return'<a class="fld-imerss-taxon-link" href="'+p2+'">'+p1+"</a>"}))},hortis.linkToTaxon=function(sunburst,taxonLink){const targetTaxon=taxonLink.substring("#taxon:".length);return sunburst.lookupTaxon(targetTaxon)},hortis.validateTaxonLinks=function(sunburst,map){fluid.each(map.communities,(function(community,key){const text=community.culturalValues;let match;do{if(match=hortis.taxonLinkRegex.exec(text),match){const taxonLink=match[2];hortis.linkToTaxon(sunburst,taxonLink)||console.log("Failed to look up taxon "+taxonLink+" for community key "+key)}}while(match)}))},hortis.withTaxonLink=function(sunburst,e,func){const target=e.target.getAttribute("href");if(e.preventDefault(),console.log("Got event target ",target),target.startsWith("#taxon:")){const row=hortis.linkToTaxon(sunburst,target);row&&func(row)}},hortis.listenTaxonLinks=function(sunburst){$(document).on("click",".fld-imerss-taxon-link",(function(e){hortis.withTaxonLink(sunburst,e,(function(row){sunburst.events.changeLayoutId.fire(row.id)}))})),$(document).on("mouseenter",".fld-imerss-taxon-link",(function(e){hortis.withTaxonLink(sunburst,e,(function(row){sunburst.mouseEvent=e,sunburst.applier.change("hoverId",row.id)}))})),$(document).on("mouseleave",".fld-imerss-taxon-link",(function(){sunburst.applier.change("hoverId",null)}))},hortis.leafletMap.renderMapOuterPanel=function(map){const selectedClazz=fluid.keyForValue(map.model.selectedRegions,!0),clazz=map.classes[selectedClazz];let topPanel="";clazz.hasImage&&(topPanel+=fluid.stringTemplate(hortis.leafletMap.outerPanelPhoto,{photoClass:"fld-imerss-class-image-"+hortis.normaliseToClass(selectedClazz)}));const communityName=map.model.mapBlockTooltipId,community=map.communities[communityName];topPanel+=fluid.stringTemplate(hortis.leafletMap.outerPanelCommunity,{community:map.model.mapBlockTooltipId,hulqBlock:community.hulqName?hortis.leafletMap.renderHulqName(community):""}),topPanel+=fluid.stringTemplate(hortis.leafletMap.outerPanelClass,{clazz:selectedClazz,hulqBlock:clazz.hulqName?hortis.leafletMap.renderHulqName(clazz):""});let bottomPanel="";if(community.culturalValues){const cultureBlock=hortis.convertTaxonLinks(hortis.textToMarkup(community.culturalValues))+'<br/><br/><div class="fld-imerss-map-class-se-col">Sources:</div>'+hortis.textToMarkup(community.culturalValuesSources);bottomPanel+=fluid.stringTemplate(hortis.leafletMap.outerPanelBlock,{blockName:"Cultural Values",block:cultureBlock})}if(clazz["sE-Tagline"]){let ecoBlock='<div class="fld-imerss-map-class-tagline">'+clazz["sE-Tagline"]+"</div>";hortis.leafletMap.seColumns.forEach((function(col){ecoBlock+='<div class="fld-imerss-map-class-se-col">'+col+": </div>",ecoBlock+='<div class="fld-imerss-map-class-se-val">'+clazz["sE-"+col]+"</div>"}));bottomPanel+=fluid.stringTemplate(hortis.leafletMap.outerPanelBlock,{blockName:"Ecological Values",block:ecoBlock})}return topPanel+bottomPanel},hortis.leafletMap.renderOuterPanel=function(map){map.outerPanel.html(hortis.leafletMap.renderMapOuterPanel(map))},hortis.leafletMap.withRegions.addRegions=function(that){that.map.createPane("hortis-regions"),that.regionGroup=L.layerGroup({pane:"hortis-regions"}).addTo(that.map)},hortis.leafletMap.withRegions.drawRegions=function(map){const regionClass=function(className){return"fld-imerss-region-"+hortis.normaliseToClass(className)};map.applier.change("selectedRegions",hortis.leafletMap.selectedRegions(null,map.classes)),map.regionGroup.clearLayers(),map.liveFeatures=map.features.map((function(feature){const className=feature.properties.clazz,community=feature.properties.COMMUNITY,clazz=map.classes[className],options=clazz.fillColor?{style:hortis.fillColorToStyle(clazz.fillColor),weight:3,stroke:"yellow"}:{style:{color:fluid.colour.arrayToString(clazz.color),weight:3}};options.className=regionClass(className)+" fld-imerss-region";const Lpolygon=L.geoJSON(feature,options);return map.regionGroup.addLayer(Lpolygon),Lpolygon.on("click",(function(){console.log("Map clicked on community ",community," region ",className),map.events.selectRegion.fire(className,community)})),{Lpolygon:Lpolygon,properties:feature.properties}}));const highlightStyle=Object.keys(map.regions).map((function(key){return"."+regionClass(key)+" {\n fill-opacity: var("+hortis.regionOpacity(key)+");\n stroke: var("+hortis.regionBorder(key)+");\n}\n"}));hortis.addStyle(highlightStyle.join("\n"))};var hortis=fluid.registerNamespace("hortis");hortis.encodeHTML=function(str){return str.replace(/[&<>'"]/g,(function(tag){return{"&":"&amp;","<":"&lt;",">":"&gt;","'":"&#39;",'"':"&quot;"}[tag]}))},hortis.renderSVGElement=function(markup,parentContainer){var element=$.parseXML(markup).documentElement;return parentContainer.append(element),element},hortis.renderNumber=function(number){return Math.abs(number)<1e-5?"0":number.toFixed(3)},hortis.emitPath=function(elements){var togo="";return elements.forEach((function(elem){togo+="string"==typeof elem?elem:hortis.renderNumber(elem)})),togo},hortis.circularPath=function(radius){var r=radius;return hortis.emitPath(["M",-r," ",0,"A",r," ",r," 0 1 0 ",r," ",0,"A",r," ",r," 0 1 0 ",-r," ",0])},hortis.annularPath=function(innerRadius,outerRadius){var ir=innerRadius,or=outerRadius;return hortis.emitPath(["M",-or," ",0,"A",or," ",or," 0 1 0 ",or," ",0,"A",or," ",or," 0 1 0 ",-or," ",0,"Z","M",-ir," ",0,"A",ir," ",ir," 0 1 1 ",ir," ",0,"A",ir," ",ir," 0 1 1 ",-ir," ",0,"Z"])},hortis.segmentPath=function(startAngle,endAngle,innerRadius,outerRadius){var cs=Math.cos(startAngle),ss=-Math.sin(startAngle),ce=Math.cos(endAngle),se=-Math.sin(endAngle),i=innerRadius,o=outerRadius,lfa=(+(endAngle-startAngle>=Math.PI)).toString();return hortis.emitPath(["M",cs*i," ",ss*i,"A",i," ",i," 0 ",lfa," 0 ",ce*i," ",se*i,"L",ce*o," ",se*o,"A",o," ",o," 0 ",lfa," 1 ",cs*o," ",ss*o,"Z"])},hortis.linearTextPath=function(leftAngle,rightAngle,innerRadius,outerRadius){var midAngle=(leftAngle+rightAngle)/2,c=Math.cos(midAngle),s=-Math.sin(midAngle),sr=c>0?innerRadius:outerRadius,fr=c>0?outerRadius:innerRadius;return hortis.emitPath(["M",c*sr," ",s*sr,"L",c*fr," ",s*fr])},hortis.segmentTextPath=function(startAngle,endAngle,outerRadius){var cs=Math.cos(startAngle),ss=-Math.sin(startAngle),ce=Math.cos(endAngle),se=-Math.sin(endAngle),ar=outerRadius-20,lfa=(+(endAngle-startAngle>=Math.PI)).toString();return hortis.emitPath(["M",cs*ar," ",ss*ar,"A",ar," ",ar," 0 ",lfa," 0 ",ce*ar," ",se*ar])},hortis.circularTextPath=function(outerRadius){var ar=outerRadius-20;return hortis.emitPath(["M","-0.1 ",-ar,"A",ar," ",ar," 0 1 0 ","0.1 ",-ar])};var hortis=fluid.registerNamespace("hortis");fluid.defaults("hortis.tabs",{gradeNames:["fluid.viewComponent"],tabOptions:{},model:{selectedTab:null},listeners:{"onCreate.initTabs":{this:"{that}.container",method:"tabs",args:"{that}.options.tabOptions"},"onCreate.bindEvents":{funcName:"hortis.tabs.bindEvents"}}}),hortis.tabs.findTab=function(that,tabId){return fluid.find(that.options.tabIds,(function(id,key){return id===tabId?key:void 0}))},hortis.tabs.bindEvents=function(that){that.container.on("tabsactivate",(function(event,ui){const tabId=ui.newTab.find("a").attr("href").substring(1),tab=hortis.tabs.findTab(that,tabId);that.applier.change("selectedTab",tab)}));const initialIndex=Object.keys(that.options.tabIds).indexOf(that.model.selectedTab);-1!==initialIndex&&that.container.tabs("option","active",initialIndex)};var hortis=fluid.registerNamespace("hortis");hortis.checklistItem=function(entry,selectedId){const record=entry.row,rowid=' data-row-id="'+record.id+'"',rank=record.species?"species":record.rank,header="<li "+("species"===rank&&record.id===selectedId?' class="fl-checklist-selected"':"")+">";let name="<p "+rowid+' class="flc-checklist-rank-'+rank+'">'+hortis.encodeHTML(record.iNaturalistTaxonName)+"</p>";record.commonName&&(name+=" - <p "+rowid+' class="flc-checklist-common-name">'+record.commonName+"</p>"),record.hulqName&&(name+=" - <p "+rowid+' class="flc-checklist-hulq-name"><em>'+record.hulqName+"</em></p>");return header+name+hortis.checklistList(entry.children)+"</li>"},hortis.checklistList=function(entries,selectedId){return entries.length?"<ul>"+entries.map((function(entry){return hortis.checklistItem(entry,selectedId)})).join("")+"</ul>":""},hortis.checklistRowForId=function(that,id){return that.container.find("[data-row-id="+id+"]").closest("li")},hortis.updateChecklistSelection=function(that,newSelectedId,oldSelectedId,index){hortis.checklistRowForId(that,oldSelectedId).removeClass("fl-checklist-selected");const row=index[newSelectedId];if(row&&row.species){hortis.checklistRowForId(that,newSelectedId).addClass("fl-checklist-selected")}},hortis.filterFocused=function(entries){return fluid.transform(entries,(function(entry){return entry.row.focusCount>0?{row:entry.row,children:hortis.filterFocused(entry.children)}:fluid.NO_VALUE}))||[]},hortis.acceptChecklistRow=function(row,filterRanks){const acceptBasic=!filterRanks||filterRanks.includes(row.rank)||row.species,rejectSpecies="species"===row.rank&&row.children.length>0;return acceptBasic&&!rejectSpecies},hortis.filterRanks=function(rows,filterRanks){const togo=[];return fluid.each(rows,(function(row){if(hortis.acceptChecklistRow(row,filterRanks))togo.push({row:row,children:hortis.filterRanks(row.children,filterRanks)});else{const dChildren=hortis.filterRanks(row.children,filterRanks);Array.prototype.push.apply(togo,dChildren)}})),togo},hortis.generateChecklist=function(element,rootId,selectedId,index,filterRanks){console.log("Generating checklist for id "+rootId);const rootChildren=rootId?[index[rootId]]:[],filteredRanks=hortis.filterRanks(rootChildren,filterRanks),filteredFocus=hortis.filterFocused(filteredRanks),markup=hortis.checklistList(filteredFocus,selectedId);element[0].innerHTML=markup},fluid.defaults("hortis.checklist",{gradeNames:["hortis.withPanelLabel","fluid.viewComponent"],filterRanks:!1,selectors:{hoverable:"p",checklist:".fld-imerss-checklist",upArrow:".fld-imerss-checklist-up"},invokers:{generateChecklist:{funcName:"hortis.generateChecklist",args:["{that}.dom.checklist","{layoutHolder}.model.layoutId","{layoutHolder}.model.selectedId","{layoutHolder}.index","{that}.options.filterRanks"]}},modelListeners:{updateSelected:{path:["{layoutHolder}.model.selectedId"],args:["{that}","{change}.value","{change}.oldValue","{layoutHolder}.index"],func:"hortis.updateChecklistSelection"},generateChecklist:{path:["{layoutHolder}.model.layoutId","{layoutHolder}.model.rowFocus"],func:"{that}.generateChecklist"},arrowClick:{path:"dom.upArrow.click",funcName:"hortis.checklist.moveUp",args:["{layoutHolder}"]}},modelRelay:{source:"{layoutHolder}.model.isAtRoot",target:"dom.upArrow.visible",func:function(x){return!x}},listeners:{"onCreate.bindHover":"hortis.checklist.bindHover({that}, {layoutHolder})"}}),hortis.checklist.focusedColour=fluid.colour.hexToArray("#333"),hortis.checklist.unfocusedColour=fluid.colour.hexToArray("#ccc"),hortis.checklist.moveUp=function(layoutHolder){const layoutId=layoutHolder.model.layoutId,row=layoutId?layoutHolder.index[layoutId]:null,parentId=row&&row.parent&&row.parent.id;layoutHolder.events.changeLayoutId.fire(parentId)},hortis.checklist.bindHover=function(that,layoutHolder){const hoverable=that.options.selectors.hoverable;that.container.on("mouseenter",hoverable,(function(e){const id=this.dataset.rowId;layoutHolder.mouseEvent=e,layoutHolder.applier.change("hoverId",id)})),that.container.on("mouseleave",hoverable,(function(){layoutHolder.applier.change("hoverId",null)})),that.container.on("click",hoverable,(function(){const id=this.dataset.rowId;layoutHolder.events.changeLayoutId.fire(id)}))};var hortis=fluid.registerNamespace("hortis");fluid.defaults("hortis.xetthecumSunburstLoader",{gradeNames:"fluid.viewComponent",bioPanelLabel:"Biodiversity",mapPanelLabel:"Ecological Communities",distributeOptions:{sunburstLabel:{target:"{that hortis.sunburst}.options.model.panelLabel",source:"{that}.options.bioPanelLabel"},checklistLabel:{target:"{that hortis.checklist}.options.model.panelLabel",source:"{that}.options.bioPanelLabel"},mapWithLabel:{record:"hortis.withPanelLabel",target:"{that hortis.leafletMap}.options.gradeNames"},mapLabel:{target:"{that hortis.leafletMap}.options.model.panelLabel",source:"{that}.options.mapPanelLabel"},outerPanelSelector:{target:"{that hortis.sunburst}.options.selectors.mapOuterPanel",record:".fld-imerss-map-outer-panel"}},components:{infoPanelManager:{type:"hortis.infoPanelManager",container:"{sunburstLoader}.container",createOnEvent:"sunburstLoaded",options:{listeners:{"{hortis.leafletMap}.events.selectRegion":{namespace:"updateInfoPanel",changePath:"{infoPanelManager}.model.visiblePanel",value:"map"},"{sunburst}.events.changeLayoutId":[{namespace:"clearMapSelection",listener:"hortis.clearMapSelectionConditionally",args:["{hortis.leafletMap}","{arguments}.0","{arguments}.1"]},{namespace:"changeLayoutId",changePath:"{infoPanelManager}.model.visiblePanel",value:"taxa"}]}}}}}),hortis.clearMapSelectionConditionally=function(map,layoutId,source){console.log("ClearMapSelectionConditionally with layoutId ",layoutId," source "+source),"rowFocus"!==source&&map.events.clearMapSelection.fire()},fluid.defaults("hortis.infoPanelManager",{gradeNames:"fluid.viewComponent",selectors:{map:".fld-imerss-map-outer-panel-wrapper",taxa:".fld-imerss-taxonDisplay-wrapper"},panels:{map:!0,taxa:!0},model:{visiblePanel:"taxa",visiblePanels:{}},modelRelay:{visiblePanels:{target:"visiblePanels",func:(panel,panels)=>fluid.transform(panels,((troo,thisPanel)=>panel===thisPanel)),args:["{that}.model.visiblePanel","{that}.options.panels"]},visibleMap:{target:"dom.map.visible",source:"visiblePanels.map"},visibleTaxa:{target:"dom.taxa.visible",source:"visiblePanels.taxa"}}});
57
+ function(factory){"use strict";"function"==typeof define&&define.amd?define(["jquery","../keycode","../position","../unique-id","../version","../widget"],factory):factory(jQuery)}((function($){"use strict";return $.widget("ui.tooltip",{version:"1.13.1",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var title=$(this).attr("title");return $("<a>").text(title).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(elem,id){var describedby=(elem.attr("aria-describedby")||"").split(/\s+/);describedby.push(id),elem.data("ui-tooltip-id",id).attr("aria-describedby",String.prototype.trim.call(describedby.join(" ")))},_removeDescribedBy:function(elem){var id=elem.data("ui-tooltip-id"),describedby=(elem.attr("aria-describedby")||"").split(/\s+/),index=$.inArray(id,describedby);-1!==index&&describedby.splice(index,1),elem.removeData("ui-tooltip-id"),(describedby=String.prototype.trim.call(describedby.join(" ")))?elem.attr("aria-describedby",describedby):elem.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=$("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=$([])},_setOption:function(key,value){var that=this;this._super(key,value),"content"===key&&$.each(this.tooltips,(function(id,tooltipData){that._updateContent(tooltipData.element)}))},_setOptionDisabled:function(value){this[value?"_disable":"_enable"]()},_disable:function(){var that=this;$.each(this.tooltips,(function(id,tooltipData){var event=$.Event("blur");event.target=event.currentTarget=tooltipData.element[0],that.close(event,!0)})),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter((function(){var element=$(this);if(element.is("[title]"))return element.data("ui-tooltip-title",element.attr("title")).removeAttr("title")})))},_enable:function(){this.disabledTitles.each((function(){var element=$(this);element.data("ui-tooltip-title")&&element.attr("title",element.data("ui-tooltip-title"))})),this.disabledTitles=$([])},open:function(event){var that=this,target=$(event?event.target:this.element).closest(this.options.items);target.length&&!target.data("ui-tooltip-id")&&(target.attr("title")&&target.data("ui-tooltip-title",target.attr("title")),target.data("ui-tooltip-open",!0),event&&"mouseover"===event.type&&target.parents().each((function(){var blurEvent,parent=$(this);parent.data("ui-tooltip-open")&&((blurEvent=$.Event("blur")).target=blurEvent.currentTarget=this,that.close(blurEvent,!0)),parent.attr("title")&&(parent.uniqueId(),that.parents[this.id]={element:this,title:parent.attr("title")},parent.attr("title",""))})),this._registerCloseHandlers(event,target),this._updateContent(target,event))},_updateContent:function(target,event){var content,contentOption=this.options.content,that=this,eventType=event?event.type:null;if("string"==typeof contentOption||contentOption.nodeType||contentOption.jquery)return this._open(event,target,contentOption);(content=contentOption.call(target[0],(function(response){that._delay((function(){target.data("ui-tooltip-open")&&(event&&(event.type=eventType),this._open(event,target,response))}))})))&&this._open(event,target,content)},_open:function(event,target,content){var tooltipData,tooltip,delayedShow,a11yContent,positionOption=$.extend({},this.options.position);function position(event){positionOption.of=event,tooltip.is(":hidden")||tooltip.position(positionOption)}content&&((tooltipData=this._find(target))?tooltipData.tooltip.find(".ui-tooltip-content").html(content):(target.is("[title]")&&(event&&"mouseover"===event.type?target.attr("title",""):target.removeAttr("title")),tooltipData=this._tooltip(target),tooltip=tooltipData.tooltip,this._addDescribedBy(target,tooltip.attr("id")),tooltip.find(".ui-tooltip-content").html(content),this.liveRegion.children().hide(),(a11yContent=$("<div>").html(tooltip.find(".ui-tooltip-content").html())).removeAttr("name").find("[name]").removeAttr("name"),a11yContent.removeAttr("id").find("[id]").removeAttr("id"),a11yContent.appendTo(this.liveRegion),this.options.track&&event&&/^mouse/.test(event.type)?(this._on(this.document,{mousemove:position}),position(event)):tooltip.position($.extend({of:target},this.options.position)),tooltip.hide(),this._show(tooltip,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(delayedShow=this.delayedShow=setInterval((function(){tooltip.is(":visible")&&(position(positionOption.of),clearInterval(delayedShow))}),13)),this._trigger("open",event,{tooltip:tooltip})))},_registerCloseHandlers:function(event,target){var events={keyup:function(event){if(event.keyCode===$.ui.keyCode.ESCAPE){var fakeEvent=$.Event(event);fakeEvent.currentTarget=target[0],this.close(fakeEvent,!0)}}};target[0]!==this.element[0]&&(events.remove=function(){var targetElement=this._find(target);targetElement&&this._removeTooltip(targetElement.tooltip)}),event&&"mouseover"!==event.type||(events.mouseleave="close"),event&&"focusin"!==event.type||(events.focusout="close"),this._on(!0,target,events)},close:function(event){var tooltip,that=this,target=$(event?event.currentTarget:this.element),tooltipData=this._find(target);tooltipData?(tooltip=tooltipData.tooltip,tooltipData.closing||(clearInterval(this.delayedShow),target.data("ui-tooltip-title")&&!target.attr("title")&&target.attr("title",target.data("ui-tooltip-title")),this._removeDescribedBy(target),tooltipData.hiding=!0,tooltip.stop(!0),this._hide(tooltip,this.options.hide,(function(){that._removeTooltip($(this))})),target.removeData("ui-tooltip-open"),this._off(target,"mouseleave focusout keyup"),target[0]!==this.element[0]&&this._off(target,"remove"),this._off(this.document,"mousemove"),event&&"mouseleave"===event.type&&$.each(this.parents,(function(id,parent){$(parent.element).attr("title",parent.title),delete that.parents[id]})),tooltipData.closing=!0,this._trigger("close",event,{tooltip:tooltip}),tooltipData.hiding||(tooltipData.closing=!1))):target.removeData("ui-tooltip-open")},_tooltip:function(element){var tooltip=$("<div>").attr("role","tooltip"),content=$("<div>").appendTo(tooltip),id=tooltip.uniqueId().attr("id");return this._addClass(content,"ui-tooltip-content"),this._addClass(tooltip,"ui-tooltip","ui-widget ui-widget-content"),tooltip.appendTo(this._appendTo(element)),this.tooltips[id]={element:element,tooltip:tooltip}},_find:function(target){var id=target.data("ui-tooltip-id");return id?this.tooltips[id]:null},_removeTooltip:function(tooltip){clearInterval(this.delayedShow),tooltip.remove(),delete this.tooltips[tooltip.attr("id")]},_appendTo:function(target){var element=target.closest(".ui-front, dialog");return element.length||(element=this.document[0].body),element},_destroy:function(){var that=this;$.each(this.tooltips,(function(id,tooltipData){var event=$.Event("blur"),element=tooltipData.element;event.target=event.currentTarget=element[0],that.close(event,!0),$("#"+id).remove(),element.data("ui-tooltip-title")&&(element.attr("title")||element.attr("title",element.data("ui-tooltip-title")),element.removeData("ui-tooltip-title"))})),this.liveRegion.remove()}}),!1!==$.uiBackCompat&&$.widget("ui.tooltip",$.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var tooltipData=this._superApply(arguments);return this.options.tooltipClass&&tooltipData.tooltip.addClass(this.options.tooltipClass),tooltipData}}),$.ui.tooltip}));"use strict";var fluid=fluid||{};!function($){fluid.thatistBridge=function(name,peer){var togo=function(funcname){for(var segs=funcname.split("."),move=peer,i=0;i<segs.length;++i)move=move[segs[i]];var args=[this];2===arguments.length&&(args=args.concat($.makeArray(arguments[1])));var ret=move.apply(null,args);return this.that=function(){return ret},ret&&ret.constructor&&"fluid.componentConstructor"===ret.constructor.name?this:ret};return $.fn[name]=togo,togo},fluid.thatistBridge("fluid",fluid);var canHaveDefaultTabindex=function(elements){return!(elements.length<=0)&&$(elements[0]).is("a, input, button, select, area, textarea, object")};fluid.tabindex=function(target,toIndex){return target=$(target),null!=toIndex?function(elements,toIndex){return elements.each((function(i,item){$(item).attr("tabindex",toIndex)}))}(target,toIndex):function(elements){if(!(elements.length<=0)){if(!fluid.tabindex.hasAttr(elements))return canHaveDefaultTabindex(elements)?Number(0):void 0;var value=elements.attr("tabindex");return Number(value)}}(target)},fluid.tabindex.remove=function(target){return(target=$(target)).each((function(i,item){$(item).removeAttr("tabindex")}))},fluid.tabindex.hasAttr=function(target){if((target=$(target)).length<=0)return!1;var togo=target.map((function(){var attributeNode=this.getAttributeNode("tabindex");return!!attributeNode&&attributeNode.specified}));return 1===togo.length?togo[0]:togo},fluid.tabindex.has=function(target){return target=$(target),fluid.tabindex.hasAttr(target)||canHaveDefaultTabindex(target)},fluid.a11y=$.a11y||{},fluid.a11y.orientation={HORIZONTAL:0,VERTICAL:1,BOTH:2};var UP_DOWN_KEYMAP={next:$.ui.keyCode.DOWN,previous:$.ui.keyCode.UP},LEFT_RIGHT_KEYMAP={next:$.ui.keyCode.RIGHT,previous:$.ui.keyCode.LEFT};fluid.tabbable=function(target){target=$(target),target.each((function(idx,item){(!(item=$(item)).fluid("tabindex.has")||item.fluid("tabindex")<0)&&item.fluid("tabindex",0)}))};var CONTEXT_KEY="selectionContext",unselectElement=function(selectedElement,selectionContext){!function(selectedElement,handler){handler&&selectedElement&&handler(selectedElement)}(selectedElement,selectionContext.options.onUnselect)},selectElement=function(elementToSelect,selectionContext){var element;unselectElement(selectionContext.selectedElement(),selectionContext),elementToSelect=(element=elementToSelect).jquery?element[0]:element;var newIndex=selectionContext.selectables.index(elementToSelect);-1!==newIndex&&(selectionContext.activeItemIndex=newIndex,function(elementToSelect,handler){handler&&handler(elementToSelect)}(elementToSelect,selectionContext.options.onSelect))},reifyIndex=async function(sc_that){var elements=sc_that.selectables;if(sc_that.activeItemIndex>=elements.length&&(sc_that.activeItemIndex=sc_that.options.noWrap?elements.length-1:0),sc_that.activeItemIndex<0&&-32768!==sc_that.activeItemIndex&&(sc_that.activeItemIndex=sc_that.options.noWrap?0:elements.length-1),sc_that.activeItemIndex>=0)return fluid.focus(elements[sc_that.activeItemIndex])},prepareShift=async function(selectionContext){var selElm=selectionContext.selectedElement();selElm&&await fluid.blur(selElm),unselectElement(selectionContext.selectedElement(),selectionContext),-32768===selectionContext.activeItemIndex&&(selectionContext.activeItemIndex=-1)},focusNextElement=async function(selectionContext){return await prepareShift(selectionContext),++selectionContext.activeItemIndex,reifyIndex(selectionContext)},focusPreviousElement=async function(selectionContext){return await prepareShift(selectionContext),--selectionContext.activeItemIndex,reifyIndex(selectionContext)},arrowKeyHandler=function(selectionContext,keyMap){return async function(evt){evt.which===keyMap.next?(await focusNextElement(selectionContext),evt.preventDefault()):evt.which===keyMap.previous&&(await focusPreviousElement(selectionContext),evt.preventDefault())}},makeElementsSelectable=function(container,defaults,userOptions){var selectionContext,options=$.extend(!0,{},defaults,userOptions),keyMap=function(direction){var keyMap;return direction===fluid.a11y.orientation.HORIZONTAL?keyMap=LEFT_RIGHT_KEYMAP:direction===fluid.a11y.orientation.VERTICAL&&(keyMap=UP_DOWN_KEYMAP),keyMap}(options.direction),selectableElements=options.selectableElements?options.selectableElements:container.find(options.selectableSelector),that={container:container,activeItemIndex:-32768,selectables:selectableElements,focusIsLeavingContainer:!1,options:options};return that.selectablesUpdated=async function(focusedItem){var selectionContext;if("number"==typeof that.options.selectablesTabindex&&that.selectables.fluid("tabindex",that.options.selectablesTabindex),that.selectables.off("focus."+CONTEXT_KEY),that.selectables.off("blur."+CONTEXT_KEY),that.selectables.on("focus."+CONTEXT_KEY,(selectionContext=that,function(evt){return $(evt.target).fluid("tabindex",0),selectElement(evt.target,selectionContext),evt.stopPropagation()})),that.selectables.on("blur."+CONTEXT_KEY,function(selectionContext){return function(evt){return $(evt.target).fluid("tabindex",selectionContext.options.selectablesTabindex),unselectElement(evt.target,selectionContext),evt.stopPropagation()}}(that)),keyMap&&that.options.noBubbleListeners&&(that.selectables.off("keydown."+CONTEXT_KEY),that.selectables.on("keydown."+CONTEXT_KEY,arrowKeyHandler(that,keyMap))),!focusedItem)return reifyIndex(that);selectElement(focusedItem,that)},that.refresh=async function(){return that.options.selectableSelector||fluid.fail("Cannot refresh selectable context which was not initialised by a selector"),that.selectables=container.find(options.selectableSelector),that.selectablesUpdated()},that.selectedElement=function(){return that.activeItemIndex<0?null:that.selectables[that.activeItemIndex]},keyMap&&!that.options.noBubbleListeners&&container.on("keydown",arrowKeyHandler(that,keyMap)),container.on("keydown",(selectionContext=that,function(evt){evt.which===$.ui.keyCode.TAB&&(function(selectionContext){-32768!==selectionContext.activeItemIndex&&(selectionContext.options.onLeaveContainer?selectionContext.options.onLeaveContainer(selectionContext.selectables[selectionContext.activeItemIndex]):selectionContext.options.onUnselect&&selectionContext.options.onUnselect(selectionContext.selectables[selectionContext.activeItemIndex])),selectionContext.options.rememberSelectionState||(selectionContext.activeItemIndex=-32768)}(selectionContext),evt.shiftKey&&(selectionContext.focusIsLeavingContainer=!0))})),container.on("focus",function(selectionContext){return async function(evt){var shouldOrig=selectionContext.options.autoSelectFirstItem,shouldSelect="function"==typeof shouldOrig?shouldOrig():shouldOrig;return selectionContext.focusIsLeavingContainer&&(shouldSelect=!1),shouldSelect&&evt.target===selectionContext.container.get(0)&&(-32768===selectionContext.activeItemIndex&&(selectionContext.activeItemIndex=0),await fluid.focus(selectionContext.selectables[selectionContext.activeItemIndex])),evt.stopPropagation()}}(that)),container.on("blur",function(selectionContext){return function(evt){return selectionContext.focusIsLeavingContainer=!1,evt.stopPropagation()}}(that)),that.promise=that.selectablesUpdated(),that};fluid.selectable=function(target,options){target=$(target);var that=makeElementsSelectable(target,fluid.selectable.defaults,options);return fluid.setScopedData(target,CONTEXT_KEY,that),that},fluid.selectable.select=async function(target,toSelect){return fluid.focus(toSelect)},fluid.selectable.selectNext=async function(target){return target=$(target),focusNextElement(fluid.getScopedData(target,CONTEXT_KEY))},fluid.selectable.selectPrevious=async function(target){return target=$(target),focusPreviousElement(fluid.getScopedData(target,CONTEXT_KEY))},fluid.selectable.currentSelection=function(target){target=$(target);var that=fluid.getScopedData(target,CONTEXT_KEY);return $(that.selectedElement())},fluid.selectable.defaults={direction:fluid.a11y.orientation.VERTICAL,selectablesTabindex:-1,autoSelectFirstItem:!0,rememberSelectionState:!0,selectableSelector:".selectable",selectableElements:null,onSelect:null,onUnselect:null,onLeaveContainer:null,noWrap:!1};var makeActivationHandler=function(binding){return function(evt){var target=evt.target;if(fluid.enabled(target)&&((evt.which?evt.which:evt.keyCode)===binding.key&&binding.activateHandler&&function(binding,evt){if(!binding.modifier)return!0;var modifierKey=binding.modifier,isCtrlKeyPresent=modifierKey&&evt.ctrlKey,isAltKeyPresent=modifierKey&&evt.altKey,isShiftKeyPresent=modifierKey&&evt.shiftKey;return isCtrlKeyPresent||isAltKeyPresent||isShiftKeyPresent}(binding,evt))){var event=$.Event("fluid-activate");$(target).trigger(event,[binding.activateHandler]),event.isDefaultPrevented()&&evt.preventDefault()}}};fluid.activatable=function(target,fn,options){!function(elements,onActivateHandler,defaultKeys,options){var bindings=[];$(defaultKeys).each((function(index,key){bindings.push({modifier:null,key:key,activateHandler:onActivateHandler})})),options&&options.additionalBindings&&(bindings=bindings.concat(options.additionalBindings)),fluid.initEnablement(elements);for(var i=0;i<bindings.length;++i){var binding=bindings[i];elements.on("keydown",makeActivationHandler(binding))}elements.on("fluid-activate",(function(evt,handler){return(handler=handler||onActivateHandler)?handler(evt):null}))}(target=$(target),fn,fluid.activatable.defaults.keys,options)},fluid.activate=function(target){$(target).trigger("fluid-activate")},fluid.activatable.defaults={keys:[$.ui.keyCode.ENTER,$.ui.keyCode.SPACE]}}(jQuery);var fluid=fluid||{};fluid.version="Infusion 4.0.0",fluid.Error=Error,fluid.environment={fluid:fluid},fluid.global=fluid.global||"undefined"!=typeof window?window:"undefined"!=typeof self?self:{},fluid.invokeLater=function(func){return setTimeout(func,0)},fluid.defeatLogging=!0,fluid.activityTracing=!1,fluid.activityTrace=[];var activityParser=/(%\w+)/g;function transformInternal(source,togo,key,transformations){for(var transit=source[key],j=0;j<transformations.length;++j)transit=transformations[j](transit,key);transit!==fluid.NO_VALUE&&(togo[key]=transit)}fluid.renderActivityArgument=function(arg){return fluid.isComponent(arg)?fluid.dumpComponentAndPath(arg):arg},fluid.renderOneActivity=function(activity,nowhile){for(var togo=!0===nowhile?[]:[" while "],message=activity.message,index=activityParser.lastIndex=0;;){var match=activityParser.exec(message);if(!match)break;var key=match[1].substring(1);togo.push(message.substring(index,match.index)),togo.push(fluid.renderActivityArgument(activity.args[key])),index=activityParser.lastIndex}return index<message.length&&togo.push(message.substring(index)),togo},fluid.renderActivity=function(activityStack,renderer){return renderer=renderer||fluid.renderOneActivity,fluid.transform(activityStack,renderer)},fluid.singleThreadLocal=function(initFunc){var value=initFunc();return function(newValue){return void 0===newValue?value:value=newValue}},fluid.threadLocal=fluid.singleThreadLocal,fluid.globalThreadLocal=fluid.threadLocal((function(){return{}})),fluid.getActivityStack=function(){var root=fluid.globalThreadLocal();return root.activityStack||(root.activityStack=[]),root.activityStack},fluid.describeActivity=fluid.getActivityStack,fluid.logActivity=function(activity){activity=activity||fluid.describeActivity();var rendered=fluid.renderActivity(activity).reverse();rendered.length>0&&(fluid.log("Current activity: "),fluid.each(rendered,(function(args){fluid.log.apply(null,args)})))},fluid.pushActivity=function(type,message,args){var record={type:type,message:message,args:args,time:(new Date).getTime()};fluid.activityTracing&&fluid.activityTrace.push(record),fluid.passLogLevel(fluid.logLevel.TRACE)&&fluid.log.apply(null,fluid.renderOneActivity(record,!0)),fluid.getActivityStack().push(record)},fluid.popActivity=function(popframes){popframes=popframes||1,fluid.activityTracing&&fluid.activityTrace.push({pop:popframes});var activityStack=fluid.getActivityStack(),popped=activityStack.length-popframes;activityStack.length=popped<0?0:popped},fluid.FluidError=function(){var togo=Error.apply(this,arguments);this.message=togo.message;try{throw togo}catch(togo){this.stack=togo.stack}return this},fluid.FluidError.prototype=Object.create(Error.prototype),fluid.logFailure=function(args,activity){fluid.log.apply(null,[fluid.logLevel.FAIL,"ASSERTION FAILED: "].concat(args)),fluid.logActivity(activity)},fluid.renderLoggingArg=function(arg){return void 0===arg?"undefined":fluid.isPrimitive(arg)||!fluid.isPlainObject(arg)?arg:JSON.stringify(arg)},fluid.builtinFail=function(args){var message=fluid.transform(args,fluid.renderLoggingArg).join("");throw new fluid.FluidError("Assertion failure - check console for more details: "+message)},fluid.fail=function(...messages){var activity=fluid.makeArray(fluid.describeActivity());fluid.popActivity(activity.length),fluid.failureEvent?fluid.failureEvent.fire(messages,activity):(fluid.logFailure(messages,activity),fluid.builtinFail(messages,activity))},fluid.notrycatch=!1,fluid.tryCatch=function(tryfun,catchfun,finallyfun){if(finallyfun=finallyfun||fluid.identity,fluid.notrycatch){var togo=tryfun();return finallyfun(),togo}try{return tryfun()}catch(e){if(!catchfun)throw e;catchfun(e)}finally{finallyfun()}},fluid.expect=function(name,target,members){fluid.transform(fluid.makeArray(members),(function(key){void 0===target[key]&&fluid.fail(name+" missing required member "+key)}))},fluid.isLogging=function(){return logLevelStack[0].priority>fluid.logLevel.IMPORTANT.priority},fluid.isLogLevel=function(arg){return fluid.isMarker(arg)&&void 0!==arg.priority},fluid.passLogLevel=function(testLogLevel){return testLogLevel.priority<=logLevelStack[0].priority},fluid.setLogging=function(enabled){var logLevel;"boolean"==typeof enabled?logLevel=fluid.logLevel[enabled?"INFO":"IMPORTANT"]:fluid.isLogLevel(enabled)?logLevel=enabled:fluid.fail("Unrecognised fluid logging level ",enabled),logLevelStack.unshift(logLevel),fluid.defeatLogging=!fluid.isLogging()},fluid.setLogLevel=fluid.setLogging,fluid.popLogging=function(){var togo=1===logLevelStack.length?logLevelStack[0]:logLevelStack.shift();return fluid.defeatLogging=!fluid.isLogging(),togo},fluid.doBrowserLog=function(args){"undefined"!=typeof console&&(console.debug?console.debug.apply(console,args):"function"==typeof console.log&&console.log.apply(console,args))},fluid.log=function(){var directArgs=fluid.makeArray(arguments),userLogLevel=fluid.logLevel.INFO;fluid.isLogLevel(directArgs[0])&&(userLogLevel=directArgs.shift()),fluid.passLogLevel(userLogLevel)&&fluid.loggingEvent.fire(directArgs)},fluid.isValue=function(value){return null!=value},fluid.isPrimitive=function(value){var valueType=typeof value;return!value||"string"===valueType||"boolean"===valueType||"number"===valueType||"function"===valueType},fluid.isJQuery=function(totest){return Boolean(totest&&totest.jquery&&totest.constructor&&totest.constructor.prototype&&totest.constructor.prototype.jquery)},fluid.isArrayable=function(totest){return Boolean(totest)&&("[object Array]"===Object.prototype.toString.call(totest)||fluid.isJQuery(totest))},fluid.isPlainObject=function(totest,strict){var string=Object.prototype.toString.call(totest);return"[object Array]"===string?!strict:"[object Object]"===string&&(!totest.constructor||!totest.constructor.prototype||Object.prototype.hasOwnProperty.call(totest.constructor.prototype,"isPrototypeOf"))},fluid.typeCode=function(totest){return fluid.isPrimitive(totest)||!fluid.isPlainObject(totest)?"primitive":fluid.isArrayable(totest)?"array":"object"},fluid.isIoCReference=function(ref){return"string"==typeof ref&&"{"===ref.charAt(0)},fluid.isReferenceOrExpander=function(ref){return ref&&(fluid.isIoCReference(ref)||ref.expander)},fluid.isDOMNode=function(obj){return obj&&"number"==typeof obj.nodeType},fluid.isComponent=function(obj){return obj&&obj.constructor===fluid.componentConstructor},fluid.isUncopyable=function(totest){return fluid.isPrimitive(totest)||!fluid.isPlainObject(totest)},fluid.isApplicable=function(totest){return totest.apply&&"function"==typeof totest.apply},fluid.identity=function(arg){return arg},fluid.notImplemented=function(){fluid.fail("This operation is not implemented")},fluid.firstDefined=function(a,b){return void 0===a?b:a},fluid.freshContainer=function(tocopy){return fluid.isArrayable(tocopy)?[]:{}},fluid.testStrategyRecursion=function(funcName,segs){segs.length>fluid.strategyRecursionBailout&&fluid.fail("Runaway recursion encountered in "+funcName+" - reached path depth of "+fluid.strategyRecursionBailout+" via path of "+segs.join(".")+"this object is probably circularly connected. Either adjust your object structure to remove the circularity or increase fluid.strategyRecursionBailout")},fluid.copyRecurse=function(tocopy,segs){return fluid.testStrategyRecursion("fluid.copy",segs),fluid.isUncopyable(tocopy)?tocopy:fluid.transform(tocopy,(function(value,key){segs.push(key);var togo=fluid.copyRecurse(value,segs);return segs.pop(),togo}))},fluid.copy=function(tocopy){return fluid.copyRecurse(tocopy,[])},fluid.extend=$.extend,fluid.makeArray=function(arg){var togo=[];if(null!=arg)if(fluid.isPrimitive(arg)||fluid.isPlainObject(arg,!0)||"number"!=typeof arg.length)togo.push(arg);else for(var i=0;i<arg.length;++i)togo[i]=arg[i];return togo},fluid.pushArray=function(holder,member,topush){var array=holder[member]?holder[member]:holder[member]=[];Array.isArray(topush)?array.push.apply(array,topush):array.push(topush)},fluid.transform=function(source,...transformations){if(fluid.isPrimitive(source))return source;var togo=fluid.freshContainer(source);if(fluid.isArrayable(source))for(var i=0;i<source.length;++i)transformInternal(source,togo,i,transformations);else for(var key in source)transformInternal(source,togo,key,transformations);return togo},fluid.forEachInRange=function(array,start,end,func){for(var i=start;i<end;++i)func(array[i],i)},fluid.peek=function(array){return 0===array.length?void 0:array[array.length-1]},fluid.each=function(source,func){if(fluid.isArrayable(source))for(var i=0;i<source.length;++i)func(source[i],i);else for(var key in source)func(source[key],key)},fluid.make_find=function(find_if){var target=!find_if&&void 0;return function(source,func,deffolt){var disp;if(fluid.isArrayable(source)){for(var i=0;i<source.length;++i)if((disp=func(source[i],i))!==target)return find_if?source[i]:disp}else for(var key in source)if((disp=func(source[key],key))!==target)return find_if?source[key]:disp;return deffolt}},fluid.find=fluid.make_find(!1),fluid.find_if=fluid.make_find(!0),fluid.accumulate=function(list,fn,arg){for(var i=0;i<list.length;++i)arg=fn(list[i],arg,i);return arg},fluid.add=function(a,b){return a+b},fluid.remove_if=function(source,fn,target){if(fluid.isArrayable(source))for(var i=source.length-1;i>=0;--i)fn(source[i],i)&&(target&&target.unshift(source[i]),source.splice(i,1));else for(var key in source)fn(source[key],key)&&(target&&(target[key]=source[key]),delete source[key]);return target||source},fluid.generate=function(n,generator,applyFunc){for(var togo=[],i=0;i<n;++i)togo[i]=applyFunc?generator(i):generator;return togo},fluid.iota=function(count,first){first=first||0;for(var togo=[],i=0;i<count;++i)togo[togo.length]=first++;return togo},fluid.getMembers=function(holder,name){return fluid.transform(holder,(function(member){return fluid.get(member,name)}))},fluid.filterKeys=function(toFilter,keys,exclude){return fluid.remove_if($.extend({},toFilter),(function(value,key){return exclude^-1===keys.indexOf(key)}))},fluid.censorKeys=function(toCensor,keys){return fluid.filterKeys(toCensor,keys,!0)},fluid.keys=function(obj){var togo=[];for(var key in obj)togo.push(key);return togo},fluid.values=function(obj){var togo=[];for(var key in obj)togo.push(obj[key]);return togo},fluid.contains=function(obj,value){return obj?fluid.isArrayable(obj)?-1!==obj.indexOf(value):fluid.find(obj,(function(thisValue){if(value===thisValue)return!0})):void 0},fluid.keyForValue=function(obj,value){return fluid.find(obj,(function(thisValue,key){if(value===thisValue)return key}))},fluid.arrayToHash=function(array){var togo={};return fluid.each(array,(function(el){togo[el]=!0})),togo},fluid.stableSort=function(array,func){for(var i=0;i<array.length;i++){var j,k=array[i];for(j=i;j>0&&func(k,array[j-1])<0;j--)array[j]=array[j-1];array[j]=k}},fluid.hashToArray=function(hash,keyName,func){var togo=[];return fluid.each(hash,(function(el,key){var newEl=el;void 0!==keyName&&((newEl={})[keyName]=key),func?newEl=func(newEl,el,key)||newEl:newEl!==el&&$.extend(!0,newEl,el),togo.push(newEl)})),togo},fluid.flatten=function(array){var togo=[];return fluid.each(array,(function(element){fluid.isArrayable(element)?togo=togo.concat(element):togo.push(element)})),togo},fluid.clear=function(target){if(fluid.isArrayable(target))target.length=0;else for(var i in target)delete target[i]},fluid.compareStringLength=function(ascending){return ascending?function(a,b){return a.length-b.length}:function(a,b){return b.length-a.length}},fluid.parseInteger=function(string){return isFinite(string)&&string%1==0?Number(string):NaN},fluid.roundToDecimal=function(num,scale,method){return scale=scale&&scale>=0?Math.round(scale):0,Number("ceil"===method||"floor"===method?Math[method](num+"e"+scale)+"e-"+scale:(num>=0?1:-1)*(Math.round(Math.abs(num)+"e"+scale)+"e-"+scale))},fluid.debounce=function(func,wait,immediate){var timeout,result;return function(){var context=this,args=arguments,later=function(){timeout=null,immediate||(result=func.apply(context,args))},callNow=immediate&&!timeout;return clearTimeout(timeout),timeout=setTimeout(later,wait),callNow&&(result=func.apply(context,args)),result}},fluid.freezeRecursive=function(tofreeze,segs){return segs=segs||[],fluid.testStrategyRecursion("fluid.freezeRecursive",segs),fluid.isPlainObject(tofreeze)?(fluid.each(tofreeze,(function(value,key){segs.push(key),fluid.freezeRecursive(value,segs),segs.pop()})),Object.freeze(tofreeze)):tofreeze},fluid.marker=function(){},fluid.makeMarker=function(value,extra){var togo=Object.create(fluid.marker.prototype);return togo.value=value,fluid.extend(togo,extra),Object.freeze(togo)},fluid.NO_VALUE=fluid.makeMarker("NO_VALUE"),fluid.EXPAND=fluid.makeMarker("EXPAND"),fluid.isMarker=function(totest,type){return totest instanceof fluid.marker&&(!type||totest.value===type.value)},fluid.logLevelsSpec={FATAL:0,FAIL:5,WARN:10,IMPORTANT:12,INFO:15,TRACE:20},fluid.logLevel=fluid.transform(fluid.logLevelsSpec,(function(value,key){return fluid.makeMarker(key,{priority:value})}));var logLevelStack=[fluid.logLevel.IMPORTANT];fluid.model={},fluid.model.copyModel=function(target,source){fluid.clear(target),$.extend(!0,target,source)},fluid.model.parseEL=function(EL){return""===EL?[]:String(EL).split(".")},fluid.model.composePath=function(prefix,suffix){return""===prefix?suffix:""===suffix?prefix:prefix+"."+suffix},fluid.model.composeSegments=function(){return fluid.makeArray(arguments).join(".")},fluid.lastDotIndex=function(path){return path.lastIndexOf(".")},fluid.model.getToTailPath=function(path){var lastdot=fluid.lastDotIndex(path);return-1===lastdot?"":path.substring(0,lastdot)},fluid.model.getTailPath=function(path){var lastdot=fluid.lastDotIndex(path);return path.substring(lastdot+1)},fluid.path=fluid.model.composeSegments,fluid.composePath=fluid.model.composePath,fluid.requireDataBinding=function(){fluid.fail("Please include DataBinding.js in order to operate complex model accessor configuration")},fluid.model.setWithStrategy=fluid.model.getWithStrategy=fluid.requireDataBinding,fluid.model.resolvePathSegment=function(root,segment,create,origEnv){if(!origEnv&&root.resolvePathSegment){var togo=root.resolvePathSegment(segment);if(void 0!==togo)return togo}return create&&void 0===root[segment]?root[segment]={}:root[segment]},fluid.model.parseToSegments=function(EL,parseEL,copy){return"number"==typeof EL||"string"==typeof EL?parseEL(EL):copy?fluid.makeArray(EL):EL},fluid.model.pathToSegments=function(EL,config){var parser=config&&config.parser?config.parser.parse:fluid.model.parseEL;return fluid.model.parseToSegments(EL,parser)},fluid.model.accessImpl=function(root,EL,newValue,config,initSegs,returnSegs,traverser){var segs=fluid.model.pathToSegments(EL,config),initPos=0;if(initSegs&&(initPos=initSegs.length,segs=initSegs.concat(segs)),root=traverser(root,segs,initPos,config,newValue===fluid.NO_VALUE?0:1),newValue===fluid.NO_VALUE)return returnSegs?{root:root,segs:segs}:root;root[fluid.peek(segs)]=newValue},fluid.model.accessSimple=function(root,EL,newValue,environment,initSegs,returnSegs){return fluid.model.accessImpl(root,EL,newValue,environment,initSegs,returnSegs,fluid.model.traverseSimple)},fluid.model.traverseSimple=function(root,segs,initPos,environment,uncess){for(var origEnv=environment,limit=segs.length-uncess,i=0;i<limit;++i){if(!root)return;var segment=segs[i];root=environment&&environment[segment]?environment[segment]:fluid.model.resolvePathSegment(root,segment,1===uncess,origEnv),environment=null}return root},fluid.model.setSimple=function(root,EL,newValue,environment,initSegs){fluid.model.accessSimple(root,EL,newValue,environment,initSegs,!1)},fluid.model.getSimple=function(root,EL,environment,initSegs){return null==EL||0===EL.length?root:fluid.model.accessSimple(root,EL,fluid.NO_VALUE,environment,initSegs,!1)},fluid.getImmediate=function(root,segs,i){for(var limit=void 0===i?segs.length:i+1,j=0;j<limit;++j)root=root?root[segs[j]]:void 0;return root},fluid.decodeAccessorArg=function(arg3){return arg3&&arg3!==fluid.model.defaultGetConfig&&arg3!==fluid.model.defaultSetConfig?"environment"===arg3.type?arg3.value:void 0:null},fluid.set=function(root,EL,newValue,config,initSegs){var env=fluid.decodeAccessorArg(config);void 0===env?fluid.model.setWithStrategy(root,EL,newValue,config,initSegs):fluid.model.setSimple(root,EL,newValue,env,initSegs)},fluid.get=function(root,EL,config,initSegs){var env=fluid.decodeAccessorArg(config);return void 0===env?fluid.model.getWithStrategy(root,EL,config,initSegs):fluid.model.accessImpl(root,EL,fluid.NO_VALUE,env,null,!1,fluid.model.traverseSimple)},fluid.getGlobalValue=function(path,env){if(path)return env=env||fluid.environment,fluid.get(fluid.global,path,{type:"environment",value:env})},fluid.bind=function(obj,fnName,args){return obj[fnName].apply(obj,fluid.makeArray(args))},fluid.proxyComponentArgs=fluid.identity,fluid.invokeGlobalFunction=function(functionPath,args,environment){var func=fluid.getGlobalValue(functionPath,environment);if(func){var argsArray=fluid.isArrayable(args)?args:fluid.makeArray(args);return fluid.proxyComponentArgs(argsArray),func.apply(null,argsArray)}fluid.fail("Error invoking global function: "+functionPath+" could not be located")},fluid.registerGlobalFunction=function(functionPath,func,env){env=env||fluid.environment,fluid.set(fluid.global,functionPath,func,{type:"environment",value:env})},fluid.setGlobalValue=fluid.registerGlobalFunction,fluid.registerNamespace=function(path,env){env=env||fluid.environment;var existing=fluid.getGlobalValue(path,env);return existing||(existing={},fluid.setGlobalValue(path,existing,env)),existing},fluid.dumpEl=fluid.identity,fluid.renderTimestamp=fluid.identity,fluid.generateUniquePrefix=function(){return Math.floor(1e12*Math.random()).toString(36)+"-"};var fluid_prefix=fluid.generateUniquePrefix();fluid.fluidInstance=fluid_prefix;var fluid_guid=1;fluid.allocateGuid=function(){return fluid_prefix+fluid_guid++},fluid.registerNamespace("fluid.event"),fluid.extremePriority=4e9,fluid.priorityTypes={first:-1,last:1,before:0,after:0},fluid.extremalPriorities={none:0,transaction:10,testing:20,authoring:30},fluid.parsePriorityConstraint=function(constraint,fixedOnly,site){var segs=constraint.split(":"),type=segs[0],lookup=fluid.priorityTypes[type];return void 0===lookup&&fluid.fail("Invalid constraint type in priority field "+constraint+": the only supported values are "+fluid.keys(fluid.priorityTypes).join(", ")+" or numeric"),fixedOnly&&0===lookup&&fluid.fail("Constraint type in priority field "+constraint+" is not supported in a "+site+" record - you must use either a numeric value or first, last"),{type:segs[0],target:segs[1]}},fluid.parsePriority=function(priority,count,fixedOnly,site){var togo={count:count||0,fixed:null,constraint:null,site:site};"number"==typeof(priority=priority||0)?togo.fixed=-priority:togo.constraint=fluid.parsePriorityConstraint(priority,fixedOnly,site);var multiplier=togo.constraint?fluid.priorityTypes[togo.constraint.type]:0;if(0!==multiplier){var target=togo.constraint.target||"none",extremal=fluid.extremalPriorities[target];void 0===extremal&&fluid.fail("Unrecognised extremal priority target "+target+": the currently supported values are "+fluid.keys(fluid.extremalPriorities).join(", ")+": register your value in fluid.extremalPriorities"),togo.fixed=multiplier*(fluid.extremePriority+extremal)}return null!==togo.fixed&&(togo.fixed+=togo.count/1024),togo},fluid.renderPriority=function(parsed){return parsed.constraint?parsed.constraint.target?parsed.constraint.type+":"+parsed.constraint.target:parsed.constraint.type:Math.floor(parsed.fixed)},fluid.compareByPriority=function(recA,recB){return null!==recA.priority.fixed&&null!==recB.priority.fixed?recA.priority.fixed-recB.priority.fixed:(null===recA.priority.fixed)-(null===recB.priority.fixed)},fluid.honourConstraint=function(array,firstConstraint,c){var constraint=array[c].priority.constraint,matchIndex=fluid.find(array,(function(element,index){return element.namespace===constraint.target?index:void 0}),-1);if(-1===matchIndex)return!0;if(matchIndex>=firstConstraint)return!1;for(var target=matchIndex+("after"===constraint.type?1:0),temp=array[c],shift=c;shift>=target;--shift)array[shift]=array[shift-1];return array[target]=temp,!0},fluid.sortByPriority=function(array){fluid.stableSort(array,fluid.compareByPriority);for(var firstConstraint=fluid.find(array,(function(element,index){return element.priority.constraint&&0===fluid.priorityTypes[element.priority.constraint.type]?index:void 0}),array.length);;){if(firstConstraint===array.length)return array;for(var oldFirstConstraint=firstConstraint,c=firstConstraint;c<array.length;++c){fluid.honourConstraint(array,firstConstraint,c)&&++firstConstraint}if(firstConstraint===oldFirstConstraint){var holders=array.slice(firstConstraint);fluid.fail("Could not find targets for any constraints in "+holders[0].priority.site+" ",holders,": none of the targets ("+fluid.getMembers(holders,"priority.constraint.target").join(", ")+") matched any namespaces of the elements in (",array.slice(0,firstConstraint),") - this is caused by either an invalid or circular reference")}}},fluid.parsePriorityRecords=function(records,name){var array=fluid.hashToArray(records,"namespace",(function(newElement,oldElement){$.extend(newElement,oldElement),newElement.priority=fluid.parsePriority(oldElement.priority,0,!1,name)}));return fluid.sortByPriority(array),array},fluid.event.identifyListener=function(listener,soft){return"string"==typeof listener||listener.$$fluid_guid||soft||(listener.$$fluid_guid=fluid.allocateGuid()),listener.$$fluid_guid},fluid.event.impersonateListener=function(origListener,newListener){fluid.event.identifyListener(origListener),newListener.$$fluid_guid=origListener.$$fluid_guid},fluid.event.sortListeners=function(listeners){var togo=[];return fluid.each(listeners,(function(oneNamespace){for(var headHard,i=0;i<oneNamespace.length;++i){var thisListener=oneNamespace[i];thisListener.softNamespace||headHard||(headHard=thisListener)}headHard?togo.push(headHard):togo=togo.concat(oneNamespace)})),fluid.sortByPriority(togo)},fluid.event.resolveListener=function(listener){var listenerName=listener.globalName||("string"==typeof listener?listener:null);if(listenerName){var listenerFunc=fluid.getGlobalValue(listenerName);listenerFunc?listener=listenerFunc:fluid.fail("Unable to look up name "+listenerName+" as a global function")}return listener},fluid.nameComponent=function(that){return that?fluid.dumpComponentAndPath(that):"[unknown component]"},fluid.event.nameEvent=function(that,eventName){return eventName+" of "+fluid.nameComponent(that)},fluid.event.firer=function(){},fluid.makeEventFirer=function(options){var that,name=(options=options||{}).name||"<anonymous>",lazyInit=function(){that.listeners={},that.byId={},that.sortedListeners=[],that.onDestroy=null,that.addListener=function(listener,namespace,priority,softNamespace,listenerId){var record;if(that.destroyed&&fluid.fail("Cannot add listener to destroyed event firer "+that.name),listener){fluid.isPlainObject(listener,!0)&&!fluid.isApplicable(listener)&&(listener=(record=listener).listener,namespace=record.namespace,priority=record.priority,softNamespace=record.softNamespace,listenerId=record.listenerId),"string"==typeof listener&&(listener={globalName:listener});var id=listenerId||fluid.event.identifyListener(listener);namespace=namespace||id,record=$.extend(record||{},{namespace:namespace,listener:listener,softNamespace:softNamespace,listenerId:listenerId,priority:fluid.parsePriority(priority,that.sortedListeners.length,!1,"listeners")}),that.byId[id]=record,(that.listeners[namespace]=fluid.makeArray(that.listeners[namespace]))[softNamespace?"push":"unshift"](record),that.sortedListeners=fluid.event.sortListeners(that.listeners)}},that.addListener.apply(null,arguments)};return that=Object.create(fluid.event.firer.prototype),fluid.extend(that,{eventId:fluid.allocateGuid(),name:name,ownerId:options.ownerId,typeName:"fluid.event.firer",destroy:function(){that.destroyed=!0,fluid.each(that.onDestroy,(function(func){func()}))},addListener:function(){lazyInit.apply(null,arguments)},removeListener:function(listener){if(that.listeners){var namespace,id,record;"string"==typeof listener?(namespace=listener,(record=that.listeners[namespace])||(id=namespace,namespace=null)):"function"==typeof listener&&((id=fluid.event.identifyListener(listener,!0))||fluid.fail("Cannot remove unregistered listener function ",listener," from event "+that.name));var rec=that.byId[id],softNamespace=rec&&rec.softNamespace;namespace=namespace||rec&&rec.namespace||id,delete that.byId[id],(record=that.listeners[namespace])&&(softNamespace?fluid.remove_if(record,(function(thisLis){return thisLis.listener.$$fluid_guid===id||thisLis.listenerId===id})):record.shift(),0===record.length&&delete that.listeners[namespace]),that.sortedListeners=fluid.event.sortListeners(that.listeners)}},fire:function(){var listeners=that.sortedListeners;if(options.promise&&(that.promisePayload=arguments[0]),listeners&&!that.destroyed)for(var i=0;i<listeners.length;++i){var lisrec=listeners[i];"function"!=typeof lisrec.listener&&(lisrec.listener=fluid.event.resolveListener(lisrec.listener));var value,listener=lisrec.listener,ret=listener.apply(null,arguments);if((options.preventable&&!1===ret||that.destroyed)&&(value=!1),void 0!==value)return value}}}),options.promise&&(that.then=function(func){"promisePayload"in that?func(that.promisePayload):that.addListener(func)}),that},fluid.event.addPrimitiveListener=function(holder,name,func){var existing=holder[name];existing||(existing=holder[name]=[]),existing.push(func)},fluid.fireEvent=function(component,eventName,args){var firer=component.events&&component.events[eventName];firer&&firer.fire.apply(null,fluid.makeArray(args))},fluid.event.addListenerToFirer=function(firer,value,namespace,wrapper){if(wrapper=wrapper||fluid.identity,fluid.isArrayable(value))for(var i=0;i<value.length;++i)fluid.event.addListenerToFirer(firer,value[i],namespace,wrapper);else"function"==typeof value||"string"==typeof value?wrapper(firer).addListener(value,namespace):value&&"object"==typeof value&&wrapper(firer).addListener(value.listener,namespace||value.namespace,value.priority,value.softNamespace,value.listenerId)},fluid.event.resolveListenerRecord=function(records){return{records:records}},fluid.expandImmediate=function(material){fluid.fail("fluid.expandImmediate could not be loaded - please include FluidIoC.js in order to operate IoC-driven event with descriptor "+material)},fluid.mergeListeners=function(that,events,listeners){fluid.each(listeners,(function(value,key){var firer,namespace;if(fluid.isIoCReference(key))(firer=fluid.expandImmediate(key,that))||fluid.fail("Error in listener record: key "+key+' could not be looked up to an event firer - did you miss out "events." when referring to an event firer?');else{var keydot=key.indexOf(".");-1!==keydot&&(namespace=key.substring(keydot+1),key=key.substring(0,keydot)),events[key]||fluid.fail("Listener registered for event "+key+" which is not defined for this component"),firer=events[key]}var record=fluid.event.resolveListenerRecord(value,that,key,namespace,!0);fluid.event.addListenerToFirer(firer,record.records,namespace,record.adderWrapper)}))},fluid.eventFromRecord=function(eventSpec,eventKey,that){var event;return eventSpec&&("string"!=typeof eventSpec||fluid.isIoCReference(eventSpec))?fluid.event.resolveEvent?event=fluid.event.resolveEvent(that,eventKey,eventSpec):fluid.fail("fluid.event.resolveEvent could not be loaded - please include FluidIoC.js in order to operate IoC-driven event with descriptor ",eventSpec):event=fluid.makeEventFirer({name:fluid.event.nameEvent(that,eventKey),preventable:"preventable"===eventSpec,promise:"promise"===eventSpec,ownerId:that.id}),event},fluid.mergeListenerPolicy=function(target,source,key){return"string"!=typeof key&&fluid.fail("Error in listeners declaration - the keys in this structure must resolve to event names - got "+key+" from ",source),!fluid.isIoCReference(key)&&-1!==key.indexOf(".")?source||target:fluid.arrayConcatPolicy(target,source)},fluid.makeMergeListenersPolicy=function(merger,modelRelay){return function(target,source){return target=target||{},modelRelay&&(fluid.isArrayable(source)||"target"in source&&("string"==typeof source.target||source.target.segs))?target[""]=merger(target[""],source,""):fluid.each(source,(function(listeners,key){target[key]=merger(target[key],listeners,key)})),target}},fluid.validateListenersImplemented=function(that){var errors=[];return fluid.each(that.events,(function(event,name){fluid.each(event.sortedListeners,(function(lisrec){lisrec.listener!==fluid.notImplemented&&"fluid.notImplemented"!==lisrec.listener.globalName||errors.push({name:name,namespace:lisrec.namespace,componentSource:fluid.model.getSimple(that.options.listeners,[name+"."+lisrec.namespace,0,"componentSource"])})}))})),errors},fluid.arrayConcatPolicy=function(target,source){return fluid.makeArray(target).concat(fluid.makeArray(source))},fluid.loggingEvent=fluid.makeEventFirer({name:"logging event"}),fluid.addTimestampArg=function(args){var arg0=fluid.renderTimestamp(new Date)+": ";args.unshift(arg0)},fluid.loggingEvent.addListener(fluid.doBrowserLog,"log"),fluid.loggingEvent.addListener(fluid.identity,"filterArgs","before:log"),fluid.loggingEvent.addListener(fluid.addTimestampArg,"addTimestampArg","after:filterArgs"),fluid.upgradeError=function(originError,whileMsg){var error=originError instanceof Error?originError:fluid.isPrimitive(originError)?{message:originError}:fluid.extend({},originError);return error.message=error.message+whileMsg,error},fluid.failureEvent=fluid.makeEventFirer({name:"failure event"}),fluid.failureEvent.addListener(fluid.builtinFail,"fail"),fluid.failureEvent.addListener(fluid.logFailure,"log","before:fail"),fluid.componentConstructor=function(){},Object.defineProperty(fluid.componentConstructor,"name",{value:"fluid.componentConstructor"}),fluid.typeTag=function(type,id){var that=Object.create(fluid.componentConstructor.prototype);return that.typeName=type,that.id=id||fluid.allocateGuid(),that};var gradeTick=1,gradeTickStore={};function regenerateCursor(source,segs,limit,sourceStrategy){for(var i=0;i<limit;++i)source=sourceStrategy(source,segs[i],i,fluid.makeArray(segs));return source}function regenerateSources(sources,segs,limit,sourceStrategies){for(var togo=[],i=0;i<sources.length;++i){var thisSource=regenerateCursor(sources[i],segs,limit,sourceStrategies[i]);void 0!==thisSource&&togo.push(thisSource)}return togo}fluid.defaultsStore={},fluid.flattenGradeName=function(gradeName){return"string"==typeof gradeName?gradeName:JSON.stringify(gradeName)},fluid.resolveGradesImpl=function(gs,gradeNames){for(var i=(gradeNames=fluid.makeArray(gradeNames)).length-1;i>=0;--i){var gradeName=gradeNames[i],flatGradeName=fluid.flattenGradeName(gradeName);if(gradeName&&!gs.gradeHash[flatGradeName]){var options=(fluid.isReferenceOrExpander(gradeName)?null:fluid.rawDefaults(gradeName))||{},thisTick=gradeTickStore[gradeName]||gradeTick-1;gs.lastTick=Math.max(gs.lastTick,thisTick),gs.gradeHash[flatGradeName]=!0,gs.gradeChain.push(gradeName);for(var oGradeNames=fluid.makeArray(options.gradeNames),j=oGradeNames.length-1;j>=0;--j)fluid.resolveGradesImpl(gs,oGradeNames[j])}}return gs},fluid.resolveGradeStructure=function(defaultName,gradeNames){var gradeStruct={lastTick:0,gradeChain:[],gradeHash:{}};return fluid.resolveGradesImpl(gradeStruct,[defaultName].concat(fluid.makeArray(gradeNames))),gradeStruct.gradeChain.reverse(),gradeStruct},fluid.hasGrade=function(options,gradeName){return!(!options||!options.gradeNames)&&fluid.contains(options.gradeNames,gradeName)},fluid.resolveGrade=function(defaults,defaultName,gradeNames){var gradeStruct=fluid.resolveGradeStructure(defaultName,gradeNames),mergeArgs=fluid.transform(gradeStruct.gradeChain,fluid.rawDefaults,fluid.copy);fluid.remove_if(mergeArgs,(function(options){return!options}));for(var mergePolicy={},i=0;i<mergeArgs.length;++i)mergeArgs[i]&&mergeArgs[i].mergePolicy&&(mergePolicy=$.extend(!0,mergePolicy,mergeArgs[i].mergePolicy));mergeArgs=[mergePolicy,{}].concat(mergeArgs);var mergedDefaults=fluid.merge.apply(null,mergeArgs);return mergedDefaults.gradeNames=gradeStruct.gradeChain,fluid.freezeRecursive(mergedDefaults),{defaults:mergedDefaults,lastTick:gradeStruct.lastTick}},fluid.mergedDefaultsCache={},fluid.gradeNamesToKey=function(defaultName,gradeNames){return defaultName+"|"+gradeNames.join("|")},fluid.getMergedDefaults=function(defaultName,gradeNames){gradeNames=fluid.makeArray(gradeNames);var key=fluid.gradeNamesToKey(defaultName,gradeNames),mergedDefaults=fluid.mergedDefaultsCache[key];if(mergedDefaults){for(var lastTick=0,searchGrades=mergedDefaults.defaults.gradeNames,i=0;i<searchGrades.length;++i)lastTick=Math.max(lastTick,gradeTickStore[searchGrades[i]]||0);lastTick>mergedDefaults.lastTick&&(fluid.passLogLevel(fluid.logLevel.TRACE)&&fluid.log(fluid.logLevel.TRACE,"Clearing cache for component "+defaultName+" with gradeNames ",searchGrades),mergedDefaults=null)}if(!mergedDefaults){var defaults=fluid.rawDefaults(defaultName);if(!defaults)return defaults;mergedDefaults=fluid.mergedDefaultsCache[key]=fluid.resolveGrade(defaults,defaultName,gradeNames)}return mergedDefaults.defaults},fluid.NO_ARGUMENTS=fluid.makeMarker("NO_ARGUMENTS"),fluid.upgradePrimitiveFunc=function(rec,key){if(rec&&fluid.isPrimitive(rec)){var togo={};return togo[key||("string"==typeof rec&&"{"!==rec.charAt(0)?"funcName":"func")]=rec,togo.args=fluid.NO_ARGUMENTS,togo}return rec},fluid.annotateListeners=function(componentName,options){options.listeners=fluid.transform(options.listeners,(function(record){var togo=fluid.makeArray(record);return fluid.transform(togo,(function(onerec){return(onerec=fluid.upgradePrimitiveFunc(onerec,"listener")).componentSource=componentName,onerec}))})),options.invokers=fluid.transform(options.invokers,(function(record){return(record=fluid.upgradePrimitiveFunc(record))&&(record.componentSource=componentName),record}))},fluid.workflowCache={},fluid.workflowCacheSorted=[],fluid.resortWorkflows=function(workflowType,baseIndex){var thisCache=fluid.workflowCache[workflowType],parsed=fluid.parsePriorityRecords(thisCache,workflowType+" workflows");return parsed.forEach((function(oneParsed,index){thisCache[oneParsed.namespace].index=index+baseIndex})),parsed},fluid.indexOneWorkflows=function(gradeName,workflowType,workflows,baseIndex){return fluid.each(workflows,(function(oneWorkflow,workflowKey){fluid.model.setSimple(fluid.workflowCache,[workflowType,workflowKey],{workflowType:workflowType,workflowName:workflowKey,priority:oneWorkflow.priority,gradeName:gradeName,workflowOptions:oneWorkflow})})),fluid.resortWorkflows(workflowType,baseIndex)},fluid.clearGradeWorkflows=function(gradeName,workflowType){var cacheForType=fluid.workflowCache[workflowType];fluid.each(cacheForType,(function(oneWorkflow,workflowKey){oneWorkflow.gradeName===gradeName&&delete cacheForType[workflowKey]}))},fluid.indexGradeWorkflows=function(gradeName,options){fluid.clearGradeWorkflows(gradeName,"global"),fluid.clearGradeWorkflows(gradeName,"local");var sortedGlobal=fluid.indexOneWorkflows(gradeName,"global",fluid.getImmediate(options,["workflows","global"]),0),globalWorkflowCount=sortedGlobal.length,sortedLocal=fluid.indexOneWorkflows(gradeName,"local",fluid.getImmediate(options,["workflows","local"]),globalWorkflowCount);fluid.workflowCacheSorted=sortedGlobal.concat(sortedLocal)},fluid.rawDefaults=function(componentName){var entry=fluid.defaultsStore[componentName];return entry&&entry.options},fluid.registerRawDefaults=function(componentName,options){fluid.pushActivity("registerRawDefaults","registering defaults for grade %componentName with options %options",{componentName:componentName,options:options});var optionsCopy=fluid.expandCompact?fluid.expandCompact(options):fluid.copy(options);fluid.annotateListeners(componentName,optionsCopy),fluid.indexGradeWorkflows(componentName,optionsCopy),delete optionsCopy.workflows;var callerInfo=fluid.getCallerInfo&&fluid.getCallerInfo(6);fluid.freezeRecursive(optionsCopy),fluid.defaultsStore[componentName]={options:optionsCopy,callerInfo:callerInfo},gradeTickStore[componentName]=gradeTick++,fluid.popActivity()},fluid.doIndexDefaults=function(defaultName,defaults,index,indexSpec){for(var requiredGrades=fluid.makeArray(indexSpec.gradeNames),i=0;i<requiredGrades.length;++i)if(!fluid.hasGrade(defaults,requiredGrades[i]))return;for(var keys=("function"==typeof indexSpec.indexFunc?indexSpec.indexFunc:fluid.getGlobalValue(indexSpec.indexFunc))(defaults)||[],j=0;j<keys.length;++j)fluid.pushArray(index,keys[j],defaultName)},fluid.indexDefaults=function(indexName,indexSpec){var index={};for(var defaultName in fluid.defaultsStore){var defaults=fluid.getMergedDefaults(defaultName);fluid.doIndexDefaults(defaultName,defaults,index,indexSpec)}return index},fluid.defaults=function(componentName,options){if(void 0===options)return fluid.getMergedDefaults(componentName);options&&options.options&&fluid.fail("Probable error in options structure for "+componentName+' with option named "options" - perhaps you meant to write these options at top level in fluid.defaults? - ',options),fluid.registerRawDefaults(componentName,options);var gradedDefaults=fluid.getMergedDefaults(componentName);fluid.hasGrade(gradedDefaults,"fluid.function")||fluid.makeComponentCreator(componentName)},fluid.validateCreatorGrade=function(message,componentName){var defaults=fluid.getMergedDefaults(componentName);if(defaults&&defaults.gradeNames&&0!==defaults.gradeNames.length){if(!defaults.argumentMap){for(var blankGrades=[],i=0;i<defaults.gradeNames.length;++i){var gradeName=defaults.gradeNames[i];fluid.rawDefaults(gradeName)||blankGrades.push(gradeName)}0===blankGrades.length?fluid.fail(message+" type "+componentName+" which is not derived from fluid.component"):fluid.fail("The grade hierarchy of component with type "+componentName+" is incomplete - it inherits from the following grade(s): "+blankGrades.join(", ")+" for which the grade definitions are corrupt or missing. Please check the files which might include these grades and ensure they are readable and have been loaded by this instance of Infusion")}}else fluid.fail(message+" type "+componentName+" which does not have any gradeNames defined")},fluid.makeComponentCreator=function(componentName){var creator=function(){return fluid.validateCreatorGrade("Cannot make component creator for",componentName),fluid.initFreeComponent(componentName,arguments)},existing=fluid.getGlobalValue(componentName);existing&&$.extend(creator,existing),fluid.setGlobalValue(componentName,creator)},fluid.emptyPolicy=fluid.freezeRecursive({}),fluid.derefMergePolicy=function(policy){return(policy?policy["*"]:fluid.emptyPolicy)||fluid.emptyPolicy},fluid.compileMergePolicy=function(mergePolicy){var builtins={},defaultValues={},togo={builtins:builtins,defaultValues:defaultValues};return mergePolicy?(fluid.each(mergePolicy,(function(value,key){var parsed={},builtin=!0;if("function"==typeof value)parsed.func=value;else if("object"==typeof value)parsed=value;else if(fluid.isDefaultValueMergePolicy(value))fluid.set(defaultValues,key,"{that}.options."+value),togo.hasDefaults=!0,builtin=!1;else for(var split=value.split(/\s*,\s*/),i=0;i<split.length;++i)parsed[split[i]]=!0;builtin&&fluid.set(builtins,fluid.composePath(key,"*"),parsed)})),togo):togo},fluid.isDefaultValueMergePolicy=function(policy){return"string"==typeof policy&&-1===policy.indexOf(",")&&!/replace|nomerge|noexpand/.test(policy)},fluid.mergeOneImpl=function(thisTarget,thisSource,j,sources,newPolicy,newPolicyHolder,i,segs){var togo=thisTarget,primitiveTarget=fluid.isPrimitive(thisTarget);return void 0!==thisSource&&(newPolicy.func||null===thisSource||!fluid.isPlainObject(thisSource)||newPolicy.nomerge?(sources[j]=void 0,togo=newPolicy.func?newPolicy.func.call(null,thisTarget,thisSource,newPolicyHolder,segs,i):thisSource):primitiveTarget&&(togo=thisTarget=fluid.freshContainer(thisSource))),togo},fluid.fetchMergeChildren=function(target,i,segs,sources,mergePolicy,options){for(var thisPolicy=fluid.derefMergePolicy(mergePolicy),j=sources.length-1;j>=0;--j){var source=sources[j];if(void 0!==source&&(fluid.each(source,(function(newSource,name){var childPolicy=fluid.concreteTrundler(mergePolicy,name);(!(name in target)||options.evaluateFully&&void 0===childPolicy&&!fluid.isPrimitive(target[name]))&&(segs[i]=name,options.strategy(target,name,i+1,segs,sources,mergePolicy))})),thisPolicy.replace))break}return target},fluid.inEvaluationMarker=Object.freeze({__CURRENTLY_IN_EVALUATION__:!0}),fluid.strategyRecursionBailout=50,fluid.makeMergeStrategy=function(options){var strategy=function(target,name,i,segs,sources,policy){if(i>fluid.strategyRecursionBailout&&fluid.fail("Overflow/circularity in options merging, current path is ",segs," at depth ",i,' - please protect components from merging using the "nomerge" merge policy'),!fluid.isPrimitive(target)){var oldTarget;if(fluid.isTracing&&fluid.tracing.pathCount.push(fluid.path(segs.slice(0,i))),(name in target||options.fullyEvaluated)&&(oldTarget=target[name],!options.evaluateFully))return oldTarget;void 0===sources&&(segs=fluid.makeArray(segs),sources=regenerateSources(options.sources,segs,i-1,options.sourceStrategies),policy=regenerateCursor(options.mergePolicy,segs,i-1,fluid.concreteTrundler));var start,limit,mul,newPolicyHolder=fluid.concreteTrundler(policy,name),newPolicy=fluid.derefMergePolicy(newPolicyHolder);newPolicy.replace?(start=1-sources.length,limit=0,mul=-1):(start=0,limit=sources.length-1,mul=1);for(var thisTarget,newSources=[],j=start;j<=limit;++j){var k=mul*j,thisSource=options.sourceStrategies[k](sources[k],name,i,segs);if(void 0!==thisSource&&(fluid.isPrimitive(thisSource)||(newSources[k]=thisSource),void 0===oldTarget)){if(-1===mul){thisTarget=target[name]=thisSource;break}thisTarget=fluid.mergeOneImpl(thisTarget,thisSource,j,newSources,newPolicy,newPolicyHolder,i,segs,options),target[name]=thisTarget}}return void 0!==oldTarget&&(thisTarget=oldTarget),newSources.length>0&&fluid.isPlainObject(thisTarget)&&fluid.fetchMergeChildren(thisTarget,i,segs,newSources,newPolicyHolder,options),thisTarget}};return options.strategy=strategy,strategy},fluid.driveStrategy=function(root,pathSegs,strategy){pathSegs=fluid.makeArray(pathSegs);for(var i=0;i<pathSegs.length;++i){if(!root)return;root=strategy(root,pathSegs[i],i+1,pathSegs)}return root},fluid.concreteTrundler=function(source,seg){return source?source[seg]:void 0},fluid.merge=function(policy,...sources){var compiled=fluid.compileMergePolicy(policy).builtins,options=fluid.makeMergeOptions(compiled,sources,{});return options.initter(),options.target},fluid.makeMergeOptions=function(policy,sources,userOptions){var options={mergePolicy:policy,sources:sources};return(options=$.extend(options,userOptions)).target=options.target||fluid.freshContainer(options.sources[0]),options.sourceStrategies=options.sourceStrategies||fluid.generate(options.sources.length,fluid.concreteTrundler),options.initter=function(){options.evaluateFully=!0,fluid.fetchMergeChildren(options.target,0,[],options.sources,options.mergePolicy,options),options.fullyEvaluated=!0},fluid.makeMergeStrategy(options),options},fluid.transformOptions=function(options,transRec){return fluid.expect("Options transformation record",transRec,["transformer","config"]),fluid.getGlobalValue(transRec.transformer).call(null,options,transRec.config)},fluid.findMergeBlocks=function(mergeBlocks,recordType){return fluid.remove_if(fluid.makeArray(mergeBlocks),(function(block){return block.recordType!==recordType}))},fluid.transformOptionsBlocks=function(mergeBlocks,transformOptions,recordTypes){fluid.each(recordTypes,(function(recordType){var blocks=fluid.findMergeBlocks(mergeBlocks,recordType);fluid.each(blocks,(function(block){var source=block.source?"source":"target";block[block.simple||"target"===source?"target":"source"]=fluid.transformOptions(block[source],transformOptions)}))}))},fluid.dedupeDistributionNamespaces=function(mergeBlocks){var byNamespace={};fluid.remove_if(mergeBlocks,(function(mergeBlock){var ns=mergeBlock.namespace;if(ns){if(byNamespace[ns]&&byNamespace[ns]!==mergeBlock.contextThat.id)return!0;byNamespace[ns]=mergeBlock.contextThat.id}}))},fluid.mergeRecordTypes={defaults:1e3,defaultValueMerge:900,lensedComponents:800,subcomponentRecord:700,user:600,distribution:100},fluid.model.applyChangeRequest=function(model,request){var segs=request.segs;if(0===segs.length)"ADD"===request.type?$.extend(!0,model,request.value):fluid.clear(model);else if("ADD"===request.type)fluid.model.setSimple(model,request.segs,request.value);else{for(var i=0;i<segs.length-1;++i)if(!(model=model[segs[i]]))return;delete model[fluid.peek(segs)]}},fluid.destroyValue=function(target,segs){target&&fluid.model.applyChangeRequest(target,{type:"DELETE",segs:segs})},fluid.mergeComponentOptions=function(that,potentia,lightMerge){fluid.validateCreatorGrade("Cannot construct component of",lightMerge.type);var sharedMergePolicy={},mergeBlocks=fluid.expandComponentOptions(sharedMergePolicy,potentia,lightMerge,that),options={},sourceStrategies=[],sources=[],baseMergeOptions={target:options,sourceStrategies:sourceStrategies},updateBlocks=function(){fluid.each(mergeBlocks,(function(block){fluid.isPrimitive(block.priority)&&(block.priority=fluid.parsePriority(block.priority,0,!1,block.recordType))})),fluid.sortByPriority(mergeBlocks),fluid.dedupeDistributionNamespaces(mergeBlocks),sourceStrategies.length=0,sources.length=0,fluid.each(mergeBlocks,(function(block){sourceStrategies.push(block.strategy),sources.push(block.target)}))};updateBlocks();var compiledPolicy,mergePolicy,mergeOptions=fluid.makeMergeOptions(sharedMergePolicy,sources,baseMergeOptions);function computeMergePolicy(){mergePolicy=fluid.driveStrategy(options,"mergePolicy",mergeOptions.strategy),mergePolicy=$.extend({},fluid.rootMergePolicy,mergePolicy),compiledPolicy=fluid.compileMergePolicy(mergePolicy),$.extend(!0,sharedMergePolicy,compiledPolicy.builtins)}mergeOptions.mergeBlocks=mergeBlocks,mergeOptions.updateBlocks=updateBlocks,mergeOptions.destroyValue=function(segs){for(var i=0;i<mergeBlocks.length;++i)mergeBlocks[i].immutableTarget||fluid.destroyValue(mergeBlocks[i].target,segs);fluid.destroyValue(baseMergeOptions.target,segs)},computeMergePolicy(),mergeOptions.computeMergePolicy=computeMergePolicy,compiledPolicy.hasDefaults&&(mergeBlocks.push(fluid.generateExpandBlock({options:compiledPolicy.defaultValues,recordType:"defaultValueMerge",priority:fluid.mergeRecordTypes.defaultValueMerge},that,{})),updateBlocks()),that.options=options,fluid.driveStrategy(options,"gradeNames",mergeOptions.strategy),fluid.deliverOptionsStrategy(that,options,mergeOptions),fluid.computeComponentAccessor(that,potentia.localRecord);var transformOptions=fluid.driveStrategy(options,"transformOptions",mergeOptions.strategy);return transformOptions&&(fluid.transformOptionsBlocks(mergeBlocks,transformOptions,["user","subcomponentRecord"]),updateBlocks()),baseMergeOptions.target.mergePolicy||computeMergePolicy(),mergeOptions},fluid.defaults("fluid.function",{}),fluid.invokeGradedFunction=function(name,spec){var defaults=fluid.defaults(name);defaults&&defaults.argumentMap&&fluid.hasGrade(defaults,"fluid.function")||fluid.fail("Cannot look up name "+name+" to a function with registered argumentMap - got defaults ",defaults);var args=[];return fluid.each(defaults.argumentMap,(function(value,key){args[value]=spec[key]})),fluid.invokeGlobalFunction(name,args)},fluid.noNamespaceDistributionPrefix="no-namespace-distribution-",fluid.mergeOneDistribution=function(target,source,key){var namespace=source.namespace||key||fluid.noNamespaceDistributionPrefix+fluid.allocateGuid();source.namespace=namespace,target[namespace]=$.extend(!0,{},target[namespace],source)},fluid.distributeOptionsPolicy=function(target,source){if(target=target||{},fluid.isArrayable(source))for(var i=0;i<source.length;++i)fluid.mergeOneDistribution(target,source[i]);else"string"==typeof source.target?fluid.mergeOneDistribution(target,source):fluid.each(source,(function(oneSource,key){fluid.mergeOneDistribution(target,oneSource,key)}));return target},fluid.mergingArray=function(){},fluid.mergingArray.prototype=[],fluid.deferringMergePolicy=function(target,source,mergePolicyHolder){return target=target||{},fluid.each(source,(function(oneSource,key){target[key]||(target[key]=new fluid.mergingArray),fluid.derefMergePolicy(mergePolicyHolder[key]).replace&&void 0!==oneSource&&(target[key].length=0),oneSource instanceof fluid.mergingArray?target[key].push.apply(target[key],oneSource):void 0!==oneSource&&target[key].push(oneSource)})),target},fluid.invokerStrategies=fluid.arrayToHash(["func","funcName","listener","this","method","changePath","value"]),fluid.invokersMergePolicy=function(target,source){return target=target||{},fluid.each(source,(function(oneInvoker,name){if(oneInvoker){oneInvoker=fluid.upgradePrimitiveFunc(oneInvoker);var oneT=target[name];for(var key in oneT||(oneT=target[name]={}),fluid.invokerStrategies)if(key in oneInvoker)for(var key2 in fluid.invokerStrategies)oneT[key2]=void 0;$.extend(oneT,oneInvoker)}else target[name]=oneInvoker})),target},fluid.rootMergePolicy=fluid.freezeRecursive({gradeNames:fluid.arrayConcatPolicy,distributeOptions:fluid.distributeOptionsPolicy,members:{noexpand:!0,func:fluid.deferringMergePolicy},invokers:{noexpand:!0,func:fluid.invokersMergePolicy},components:{noexpand:!0,func:fluid.deferringMergePolicy},dynamicComponents:{noexpand:!0,func:fluid.deferringMergePolicy},transformOptions:"replace",listeners:fluid.makeMergeListenersPolicy(fluid.mergeListenerPolicy)}),fluid.defaults("fluid.component",{mergePolicy:fluid.rootMergePolicy,argumentMap:{options:0},workflows:{local:{concludeComponentObservation:{funcName:"fluid.concludeComponentObservation",priority:"first"},concludeComponentInit:{funcName:"fluid.concludeComponentInit",waitIO:!0,priority:"last"}}},events:{onCreate:"promise",onDestroy:"promise",afterDestroy:"promise"}}),fluid.computeNickName=function(typeName){var segs=fluid.model.parseEL(typeName);return fluid.peek(segs)},fluid.isDestroyed=function(that,strict){return"destroyed"===that.lifecycleStatus||!strict&&"destroying"===that.lifecycleStatus},fluid.computeGlobalMemberName=function(type,id){return fluid.computeNickName(type)+"-"+id},fluid.adaptTransactionFailure=function(transRec){var returned=!1;transRec.promise.then(null,(function(e){if(!returned)throw e;0===transRec.promise.onReject.length&&fluid.fireUnhandledRejection(transRec.promise,e)})),returned=!0},fluid.initFreeComponent=function(type,initArgs){var id=fluid.allocateGuid(),path=[fluid.computeGlobalMemberName(type,id)],userRecord={recordType:"user",type:type},upDefaults=fluid.defaults(type),argMap=fluid.defaults(void 0!==upDefaults.argumentMap.container?"fluid.viewComponent":"fluid.component").argumentMap;fluid.each(argMap,(function(index,name){var arg=initArgs[index];userRecord[name]="options"===name?fluid.expandCompact(arg,!0):arg}));var potentia={type:"create",path:path,componentId:id,records:[userRecord]},transRec=fluid.registerPotentia(potentia),shadow=fluid.commitPotentiae(transRec.transactionId);return fluid.adaptTransactionFailure(transRec),shadow&&shadow.that};var charStart="(?:[\\w\\u00c0-\\uFFFF*_-";fluid.simpleCSSMatcher={regexp:new RegExp("([#.]?)("+charStart+"]|\\\\.)+)","g"),charToTag:{"":"tag","#":"id",".":"clazz"}},fluid.IoCSSMatcher={regexp:new RegExp("([&#]?)("+charStart+"]|\\.|\\/)+)","g"),charToTag:{"":"context","&":"context","#":"id"}};var childSeg=new RegExp("\\s*(>)?\\s*","g");fluid.parseSelector=function(selstring,strategy){var togo=[];selstring=selstring.trim();var regexp=strategy.regexp;regexp.lastIndex=0;for(var lastIndex=0;;){for(var atNode=[],first=!0;;){var segMatch=regexp.exec(selstring);if(!segMatch)break;if(segMatch.index!==lastIndex){if(!first)break;fluid.fail("Error in selector string - cannot match child selector expression starting at "+selstring.substring(lastIndex))}var thisNode={},text=segMatch[2],targetTag=strategy.charToTag[segMatch[1]];targetTag&&(thisNode[targetTag]=text),atNode[atNode.length]=thisNode,lastIndex=regexp.lastIndex,first=!1}childSeg.lastIndex=lastIndex;var fullAtNode={predList:atNode},childMatch=childSeg.exec(selstring);if(childMatch&&childMatch.index===lastIndex||fluid.fail("Error in selector string - can not match child selector expression at "+selstring.substring(lastIndex)),">"===childMatch[1]&&(fullAtNode.child=!0),togo[togo.length]=fullAtNode,childSeg.lastIndex>=selstring.length)break;lastIndex=childSeg.lastIndex,regexp.lastIndex=childSeg.lastIndex}return togo},fluid.flattenObjectPaths=function(originalObject){var flattenedObject={};return fluid.each(originalObject,(function(value,key){if(null!==value&&"object"==typeof value){var flattenedSubObject=fluid.flattenObjectPaths(value);fluid.each(flattenedSubObject,(function(subValue,subKey){flattenedObject[key+"."+subKey]=subValue})),"function"==typeof fluid.get(value,"toString")&&(flattenedObject[key]=value.toString())}else flattenedObject[key]=value})),flattenedObject},fluid.stringTemplate=function(template,values){var flattenedValues=fluid.flattenObjectPaths(values),keys=fluid.keys(flattenedValues);keys=keys.sort(fluid.compareStringLength());for(var i=0;i<keys.length;++i)for(var key=keys[i],templatePlaceholder="%"+key,replacementValue=flattenedValues[key],indexOfPlaceHolder=-1;-1!==(indexOfPlaceHolder=template.indexOf(templatePlaceholder));)template=template.slice(0,indexOfPlaceHolder)+replacementValue+template.slice(indexOfPlaceHolder+templatePlaceholder.length);return template},fluid.promise=function(){var that={onResolve:[],onReject:[],onCancel:[],then:function(onResolve,onReject,onCancel){return fluid.promise.pushHandler(that,onResolve,"onResolve","resolve"),fluid.promise.pushHandler(that,onReject,"onReject","reject"),fluid.promise.pushHandler(that,onCancel,"onCancel","cancel"),that},resolve:function(value){return that.disposition?"cancel"!==that.disposition&&fluid.fail("Error: resolving promise ",that,' which has already received "'+that.disposition+'"'):that.complete("resolve",that.onResolve,value),that},reject:function(reason){return that.disposition?"cancel"!==that.disposition&&fluid.fail("Error: rejecting promise ",that,'which has already received "'+that.disposition+'"'):(0===that.onReject.length&&fluid.armUnhandledRejection(that,reason),that.complete("reject",that.onReject,reason)),that},cancel:function(reason){that.disposition||that.complete("cancel",that.onCancel,reason)},complete:function(which,queue,arg){that.disposition=which,that.value=arg;for(var i=0;i<queue.length;++i)queue[i](arg);delete that.onResolve,delete that.onReject,delete that.onCancel}};return that},fluid.promise.pushHandler=function(promise,handler,eventName,disposition){handler&&(promise.disposition?promise.disposition===disposition&&(handler(promise.value),promise.directHandle=disposition):promise[eventName].push(handler))},fluid.armUnhandledRejection=function(promise,reason){fluid.invokeLater((function(){"reject"!==promise.directHandle&&fluid.fireUnhandledRejection(promise,reason)}))},fluid.fireUnhandledRejection=function(promise,reason){fluid.unhandledRejectionEvent.fire(reason,promise)},fluid.unhandledRejectionEvent=fluid.makeEventFirer({name:"Global unhandled rejection handler"}),fluid.logUnhandledRejection=function(reason){fluid.log(fluid.logLevel.WARN,"Unhandled promise rejection: ",reason)},fluid.unhandledRejectionEvent.addListener(fluid.logUnhandledRejection,"log"),fluid.isPromise=function(totest){return totest&&"function"==typeof totest.then},fluid.toPromise=function(promiseOrValue){if(fluid.isPromise(promiseOrValue))return promiseOrValue;var togo=fluid.promise();return togo.resolve(promiseOrValue),togo},fluid.promise.follow=function(source,target){source.then(target.resolve,target.reject),target.then(null,null,source.cancel)},fluid.promise.map=function(source,func){var promise=fluid.toPromise(source),togo=fluid.promise();return promise.then((function(value){var mapped=func(value);fluid.isPromise(mapped)?fluid.promise.follow(mapped,togo):togo.resolve(mapped)}),(function(error){togo.reject(error)})),togo},fluid.promise.makeSequencer=function(sources,options,strategy){fluid.isArrayable(sources)||fluid.fail("fluid.promise sequence algorithms must be supplied an array as source");var sequencer={sources:sources,resolvedSources:[],index:0,strategy:strategy,options:options,returns:[],sequenceStarted:!1,sequenceCancelled:!1,promise:fluid.promise()};return sequencer.promise.then(null,null,(function(){fluid.promise.cancelSequencer(sequencer)})),sequencer.promise.sequencer=sequencer,sequencer},fluid.promise.cancelSequencer=function(sequencer){sequencer.sequenceCancelled=!0,sequencer.resolvedSources.forEach((function(source){fluid.isPromise(source)&&source.cancel()}))},fluid.promise.progressSequence=function(that,retValue){that.returns.push(retValue),that.index++,fluid.promise.resumeSequence(that)},fluid.promise.processSequenceReject=function(that,error){for(var i=that.index-1;i>=0;--i){var resolved=that.resolvedSources[i];error=(fluid.isPromise(resolved)&&"function"==typeof resolved.accumulateRejectionReason?resolved.accumulateRejectionReason:fluid.identity)(error)}that.promise.reject(error)},fluid.promise.resumeSequence=function(that){if(that.sequenceStarted=!0,!that.sequenceCancelled)if(that.index===that.sources.length)that.promise.resolve(that.strategy.resolveResult(that));else{var value=that.strategy.invokeNext(that);that.resolvedSources[that.index]=value,fluid.isPromise(value)?value.then((function(retValue){fluid.promise.progressSequence(that,retValue)}),(function(error){fluid.promise.processSequenceReject(that,error)})):fluid.promise.progressSequence(that,value)}},fluid.promise.makeSequenceStrategy=function(){return{invokeNext:function(that){var source=that.sources[that.index];return"function"==typeof source?source(that.options):source},resolveResult:function(that){return that.returns}}},fluid.promise.sequence=function(sources,options){var sequencer=fluid.promise.makeSequencer(sources,options,fluid.promise.makeSequenceStrategy());return fluid.promise.resumeSequence(sequencer),sequencer.promise},fluid.promise.makeTransformerStrategy=function(){return{invokeNext:function(that){var lisrec=that.sources[that.index];return lisrec.listener=fluid.event.resolveListener(lisrec.listener),lisrec.listener.apply(null,[that.returns[that.index],that.options])},resolveResult:function(that){return that.returns[that.index]}}},fluid.promise.makeTransformer=function(listeners,payload,options){listeners.unshift({listener:function(){return payload}});var sequencer=fluid.promise.makeSequencer(listeners,options,fluid.promise.makeTransformerStrategy());return sequencer.returns.push(null),sequencer},fluid.promise.filterNamespaces=function(listeners,namespaces){return namespaces?fluid.remove_if(fluid.makeArray(listeners),(function(element){return element.namespace&&!element.softNamespace&&!fluid.contains(namespaces,element.namespace)})):listeners},fluid.promise.fireTransformEvent=function(event,payload,options){var listeners=(options=options||{}).reverse?fluid.makeArray(event.sortedListeners).reverse():fluid.makeArray(event.sortedListeners);listeners=fluid.promise.filterNamespaces(listeners,options.filterNamespaces);var sequencer=fluid.promise.makeTransformer(listeners,payload,options),canceller=sequencer.promise.cancel,remover=function(){fluid.remove_if(event.onDestroy,(function(func){return func===canceller}))};return fluid.event.addPrimitiveListener(event,"onDestroy",canceller),sequencer.promise.then(remover,remover,remover),fluid.promise.resumeSequence(sequencer),sequencer.promise},fluid.renderTimestamp=function(date){var zeropad=function(num,width){width||(width=2);var numstr=void 0===num?"":num.toString();return"00000".substring(5-width+numstr.length)+numstr};return zeropad(date.getHours())+":"+zeropad(date.getMinutes())+":"+zeropad(date.getSeconds())+"."+zeropad(date.getMilliseconds(),3)},fluid.isTracing=!1,fluid.registerNamespace("fluid.tracing"),fluid.tracing.pathCount=[],fluid.tracing.summarisePathCount=function(pathCount){pathCount=pathCount||fluid.tracing.pathCount;for(var togo={},i=0;i<pathCount.length;++i){var path=pathCount[i];togo[path]?++togo[path]:togo[path]=1}var toReallyGo=[];return fluid.each(togo,(function(el,path){toReallyGo.push({path:path,count:el})})),toReallyGo.sort((function(a,b){return b.count-a.count})),toReallyGo},fluid.tracing.condensePathCount=function(prefixes,pathCount){prefixes=fluid.makeArray(prefixes);var prefixCount={};fluid.each(prefixes,(function(prefix){prefixCount[prefix]=0}));var togo=[];return fluid.each(pathCount,(function(el){var path=el.path;fluid.find(prefixes,(function(prefix){if(0===path.indexOf(prefix))return prefixCount[prefix]+=el.count,!0}))||togo.push(el)})),fluid.each(prefixCount,(function(count,path){togo.unshift({path:path,count:count})})),togo},fluid.obtainException=function(){return new Error("Trace exception")},fluid.registerNamespace("fluid.exceptionDecoders"),fluid.decodeStack=function(){var e=fluid.obtainException();return fluid.exceptionDecoders.standard(e)},fluid.exceptionDecoders.standard=function(e){var lines=e.stack.replace(/(?:\n@:0)?\s+$/m,"").replace(/^\(/gm,"{anonymous}(").split("\n");return fluid.transform(lines,(function(line){var atind=(line=line.replace(/\)/g,"")).indexOf("at ");return-1===atind?[line]:[line.substring(atind+"at ".length),line.substring(0,atind)]}))},fluid.getCallerInfo=function(atDepth){atDepth=atDepth||3;var stack=fluid.decodeStack(),element=stack&&stack[atDepth]&&stack[atDepth][0];if(element){var lastslash=element.lastIndexOf("/");-1===lastslash&&(lastslash=0);var nextColon=element.indexOf(":",lastslash);return{path:element.substring(0,lastslash),filename:element.substring(lastslash+1,nextColon),index:element.substring(nextColon+1)}}return null},fluid.generatePadding=function(c,count){for(var togo="",i=0;i<count;++i)togo+=c;return togo},fluid.SYNTHETIC_PROPERTY=Object.freeze({}),fluid.getSafeProperty=function(obj,key){var desc=Object.getOwnPropertyDescriptor(obj,key);return desc&&!desc.get?obj[key]:fluid.SYNTHETIC_PROPERTY},fluid.prettyPrintJSONImpl=function(obj,small,options){function out(str){options.output+=str}var big=small+options.indentChars,isFunction="function"==typeof obj;if(void 0!==options.maxRenderChars&&options.output.length>options.maxRenderChars)return!0;if(null===obj)out("null");else if(void 0===obj)out("undefined");else if(obj===fluid.SYNTHETIC_PROPERTY)out("[Synthetic property]");else if(fluid.isPrimitive(obj)&&!isFunction)out(JSON.stringify(obj));else{if(-1!==options.stack.indexOf(obj))return void out("(CIRCULAR)");var i;if(options.stack.push(obj),fluid.isArrayable(obj))if(0===obj.length)out("[]");else{for(out("[\n"+big),i=0;i<obj.length;++i){if(fluid.prettyPrintJSONImpl(obj[i],big,options))return!0;i!==obj.length-1&&out(",\n"+big)}out("\n"+small+"]")}else{out("{"+(isFunction?" Function":"")+"\n"+big);var keys=fluid.keys(obj);for(i=0;i<keys.length;++i){var key=keys[i],value=fluid.getSafeProperty(obj,key);if(out(JSON.stringify(key)+": "),fluid.prettyPrintJSONImpl(value,big,options))return!0;i!==keys.length-1&&out(",\n"+big)}out("\n"+small+"}")}options.stack.pop()}},fluid.prettyPrintJSON=function(obj,options){return(options=$.extend({indent:4,stack:[],output:""},options)).indentChars=fluid.generatePadding(" ",options.indent),fluid.prettyPrintJSONImpl(obj,"",options),options.output},fluid.dumpEl=function(element){var togo;if(!element)return"null";if(3===element.nodeType||8===element.nodeType)return"[data: "+element.data+"]";if(9===element.nodeType)return"[document: location "+element.location+"]";if(!element.nodeType&&fluid.isArrayable(element)){togo="[";for(var i=0;i<element.length;++i)togo+=fluid.dumpEl(element[i]),i<element.length-1&&(togo+=", ");return togo+"]"}return togo=(element=$(element)).get(0).tagName,element.id&&(togo+="#"+element.id),element.attr("class")&&(togo+="."+element.attr("class")),togo},fluid.debugger=function(){},fluid.defaults("fluid.debuggingProbe",{gradeNames:["fluid.component"]}),fluid.probeToDistribution=function(probe){var instantiator=fluid.globalInstantiator,parsed=fluid.parseContextReference(probe.target),segs=fluid.model.parseToSegments(parsed.path,instantiator.parseEL,!0);"options"!==segs[0]&&segs.unshift("options");var parsedPriority=fluid.parsePriority(probe.priority);return parsedPriority.constraint&&!parsedPriority.constraint.target&&(parsedPriority.constraint.target="authoring"),{target:"{/ "+parsed.context+"}."+instantiator.composeSegments.apply(null,segs),record:{func:probe.func,funcName:probe.funcName,args:probe.args,priority:fluid.renderPriority(parsedPriority)}}},fluid.registerProbes=function(probes){var probeDistribution=fluid.transform(probes,fluid.probeToDistribution),memberName="fluid_debuggingProbe_"+fluid.allocateGuid();return fluid.construct([memberName],{type:"fluid.debuggingProbe",distributeOptions:probeDistribution}),memberName},fluid.deregisterProbes=function(probeName){fluid.destroy([probeName])};var fluid=fluid||{};async function applyOp(node,func){if(node=$(node)[0]){var promise=new Promise((function(resolve){node.addEventListener(func,resolve,{once:!0})}));return node[func](),promise}}fluid.uaMatch=function(ua){ua=ua.toLowerCase();var match=/(chrome)[ \/]([\w.]+)/.exec(ua)||/(webkit)[ \/]([\w.]+)/.exec(ua)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua)||/(msie) ([\w.]+)/.exec(ua)||ua.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua)||[];return{browser:match[1]||"",version:match[2]||"0"}},fluid.assignJQueryBrowser=function($){if(!$.browser){var matched=fluid.uaMatch(navigator.userAgent),browser={};matched.browser&&(browser[matched.browser]=!0,browser.version=matched.version),browser.chrome?browser.webkit=!0:browser.webkit&&(browser.safari=!0),$.browser=browser}},fluid.assignJQueryBrowser(jQuery),fluid.getScopedData=function(target,key){var data=$(target).data("fluid-scoped-data");return data?data[key]:void 0},fluid.setScopedData=function(target,key,value){$(target).each((function(){var data=$.data(this,"fluid-scoped-data")||{};data[key]=value,$.data(this,"fluid-scoped-data",data)}))},fluid.lastFocusedElement=null,$(document).on("focusin",(function(event){fluid.lastFocusedElement=event.target})),fluid.enabled=function(target,state){if(target=$(target),void 0===state)return!1!==fluid.getScopedData(target,"enablement");$("*",target).add(target).each((function(){void 0!==fluid.getScopedData(this,"enablement")?fluid.setScopedData(this,"enablement",state):/select|textarea|input/i.test(this.nodeName)&&$(this).prop("disabled",!state)})),fluid.setScopedData(target,"enablement",state)},fluid.initEnablement=function(target){fluid.setScopedData(target,"enablement",!0)},fluid.resolveEventTarget=function(event){for(;event.originalEvent&&event.originalEvent.target;)event=event.originalEvent;return event.target},$.each(["focus","blur"],(function(i,name){fluid[name]=function(elem){return applyOp(elem,name)}})),fluid.visitComponentChildren=function(that,visitor,options,segs){segs=segs||[];var shadow=fluid.shadowForComponent(that);for(var name in shadow.childComponents){var component=shadow.childComponents[name];if(!options.visited||!options.visited[component.id]){if(segs.push(name),options.visited&&(options.visited[component.id]=!0),visitor(component,name,segs,segs.length-1))return!0;options.flat||fluid.visitComponentChildren(component,visitor,options,segs),segs.pop()}}},fluid.getContextHash=function(instantiator,that){var shadow=instantiator.idToShadow[that.id];return shadow&&shadow.contextHash},fluid.componentHasGrade=function(that,gradeName){var contextHash=fluid.getContextHash(fluid.globalInstantiator,that);return!(!contextHash||!contextHash[gradeName])},fluid.visitComponentsForMatching=function(that,options,visitor){var instantiator=fluid.getInstantiator(that);options=$.extend({visited:{},instantiator:instantiator},options);var thatStack=[that],contextHashes=[fluid.getContextHash(instantiator,that)];fluid.visitComponentChildren(that,(function(component,name,segs){thatStack.length=1,contextHashes.length=1;for(var i=0;i<segs.length;++i){var child=thatStack[i][segs[i]];thatStack[i+1]=child,contextHashes[i+1]=fluid.getContextHash(instantiator,child)||{}}return visitor(component,thatStack,contextHashes,segs,segs.length)}),options,[])},fluid.getMemberNames=function(instantiator,thatStack){if(0===thatStack.length)return[];var path=instantiator.idToPath(fluid.peek(thatStack).id),segs=instantiator.parseEL(path);return segs.unshift.apply(segs,fluid.generate(thatStack.length-segs.length,"")),segs},fluid.visitComponentsForVisibility=function(instantiator,thatStack,visitor,options){options=options||{visited:{},flat:!0,instantiator:instantiator};for(var memberNames=fluid.getMemberNames(instantiator,thatStack),i=thatStack.length-1;i>=0;--i){var that=thatStack[i];if(options.visited[that.id]=!0,visitor(that,memberNames[i],memberNames,i))return;if(fluid.visitComponentChildren(that,visitor,options,memberNames))return;memberNames.pop()}},fluid.mountStrategy=function(prefix,root,toMount){var offset=prefix.length;return function(target,name,i,segs){if(!(i<=prefix.length)){for(var j=0;j<prefix.length;++j)if(segs[j]!==prefix[j])return;return toMount(target,name,i-prefix.length,segs.slice(offset))}}},fluid.invokerFromRecord=function(invokerec,name,that){fluid.pushActivity("makeInvoker","beginning instantiation of invoker with name %name and record %record as child of %that",{name:name,record:invokerec,that:that});var invoker=invokerec?fluid.makeInvoker(that,invokerec,name):void 0;return fluid.popActivity(),invoker},fluid.memberFromRecord=function(memberrecs,name,that){for(var togo,shadow=fluid.shadowForComponent(that),i=0;i<memberrecs.length;++i){var expanded=fluid.expandImmediate(memberrecs[i],that,shadow.localRecord);togo=fluid.isPlainObject(togo)?$.extend(!0,togo,expanded):expanded}return togo},fluid.resourceFromRecord=function(resourceRec,name,that){var resourceFetcher=fluid.getForComponent(that,"resourceFetcher"),resourceSpec=resourceFetcher.resourceSpecs[name],oneFetcher=new fluid.fetchResources.FetchOne(resourceSpec,resourceFetcher),existing=that.resources[name];if(existing&&existing!==fluid.inEvaluationMarker)return existing;var promise=oneFetcher.resourceSpec.promise;return promise.disposition||fluid.currentTreeTransaction().pendingIO.push(promise),oneFetcher},fluid.recordStrategy=function(that,options,optionsStrategy,recordPath,recordMaker,prefix,exceptions){prefix=prefix||[];var fullyEvaluated=!1;return{strategy:function(target,name,i){if(1===i&&!fullyEvaluated){var record=fluid.driveStrategy(options,[recordPath,name],optionsStrategy);if(void 0===record){if(!(prefix.length>0))return;fluid.fail("Reference to "+recordPath+" record with name "+name+" which is not registered for component "+fluid.dumpComponentAndPath(that))}fluid.set(target,[name],fluid.inEvaluationMarker);var member=recordMaker(record,name,that);return fluid.set(target,[name],member),member}},initter:function(){var records=fluid.driveStrategy(options,recordPath,optionsStrategy)||{};for(var name in records)exceptions&&exceptions[name]||fluid.getForComponent(that,prefix.concat([name]));fullyEvaluated=!0}}},fluid.makeDistributionRecord=function(contextThat,sourceRecord,sourcePath,targetSegs,exclusions,sourceType){sourceType=sourceType||"distribution",fluid.pushActivity("makeDistributionRecord","Making distribution record from source record %sourceRecord path %sourcePath to target path %targetSegs",{sourceRecord:sourceRecord,sourcePath:sourcePath,targetSegs:targetSegs});var source=fluid.copy(fluid.get(sourceRecord,sourcePath));fluid.each(exclusions,(function(exclusion){fluid.model.applyChangeRequest(source,{segs:exclusion,type:"DELETE"})}));var record={options:{}};return fluid.model.applyChangeRequest(record,{segs:targetSegs,type:"ADD",value:source}),fluid.checkComponentRecord(record,fluid.componentRecordExpected),fluid.popActivity(),$.extend(record,{contextThat:contextThat,recordType:sourceType})},fluid.filterBlocks=function(contextThat,sourceBlocks,sourceSegs,targetSegs,exclusions,removeSource){var togo=[];return fluid.each(sourceBlocks,(function(block){var source=fluid.get(block.source,sourceSegs);if(void 0!==source){togo.push(fluid.makeDistributionRecord(contextThat,block.source,sourceSegs,targetSegs,exclusions,"distribution"));var rescued=$.extend({},source);removeSource&&fluid.model.applyChangeRequest(block.source,{segs:sourceSegs,type:"DELETE"}),fluid.each(exclusions,(function(exclusion){var orig=fluid.get(rescued,exclusion);fluid.set(block.source,sourceSegs.concat(exclusion),orig)}))}})),togo},fluid.noteCollectedDistribution=function(parentShadow,memberName,distribution){fluid.model.setSimple(parentShadow,["collectedDistributions",memberName,distribution.id],!0)},fluid.isCollectedDistribution=function(parentShadow,memberName,distribution){return fluid.model.getSimple(parentShadow,["collectedDistributions",memberName,distribution.id])},fluid.clearCollectedDistributions=function(parentShadow,memberName){fluid.model.applyChangeRequest(parentShadow,{segs:["collectedDistributions",memberName],type:"DELETE"})},fluid.collectDistributions=function(distributedBlocks,parentShadow,distribution,thatStack,contextHashes,memberNames,i){var lastMember=fluid.peek(memberNames);!fluid.isCollectedDistribution(parentShadow,lastMember,distribution)&&fluid.matchIoCSelector(distribution.selector,thatStack,contextHashes,memberNames,i)&&(distributedBlocks.push.apply(distributedBlocks,fluid.copy(distribution.blocks)),fluid.noteCollectedDistribution(parentShadow,lastMember,distribution))},fluid.registerCollectedClearer=function(shadow,parentShadow,memberName){!shadow.collectedClearer&&parentShadow&&(shadow.collectedClearer=function(){fluid.clearCollectedDistributions(parentShadow,memberName)})},fluid.receiveDistributions=function(parentThat,gradeNames,memberName,that){var instantiator=fluid.getInstantiator(parentThat||that),thatStack=instantiator.getThatStack(parentThat||that);thatStack.unshift(fluid.rootComponent);var memberNames=fluid.getMemberNames(instantiator,thatStack),shadows=fluid.transform(thatStack,(function(thisThat){return instantiator.idToShadow[thisThat.id]})),parentShadow=shadows[shadows.length-(parentThat?1:2)],contextHashes=fluid.getMembers(shadows,"contextHash");parentThat?(memberNames.push(memberName),contextHashes.push(fluid.gradeNamesToHash(gradeNames)),thatStack.push(that)):fluid.registerCollectedClearer(fluid.peek(shadows),parentShadow,fluid.peek(memberNames));for(var distributedBlocks=[],i=0;i<thatStack.length-1;++i)fluid.each(shadows[i].distributions,(function(distribution){fluid.collectDistributions(distributedBlocks,parentShadow,distribution,thatStack,contextHashes,memberNames,i)}));return distributedBlocks},fluid.computeTreeDistance=function(path1,path2){for(var i=0;i<path1.length&&i<path2.length&&path1[i]===path2[i];)++i;return path1.length+path2.length-2*i},fluid.computeDistributionPriority=function(targetThat,distributedBlock){if(!distributedBlock.priority){var instantiator=fluid.getInstantiator(targetThat),targetStack=instantiator.getThatStack(targetThat),targetPath=fluid.getMemberNames(instantiator,targetStack),sourceStack=instantiator.getThatStack(distributedBlock.contextThat),sourcePath=fluid.getMemberNames(instantiator,sourceStack),distance=fluid.computeTreeDistance(targetPath,sourcePath);distributedBlock.priority=fluid.mergeRecordTypes.distribution-distance}return distributedBlock},fluid.applyDistributions=function(that,preBlocks,targetShadow){var distributedBlocks=fluid.transform(preBlocks,(function(preBlock){return fluid.generateExpandBlock(preBlock,that,targetShadow.mergePolicy)}),(function(distributedBlock){return fluid.computeDistributionPriority(that,distributedBlock)})),mergeOptions=targetShadow.mergeOptions;return mergeOptions.mergeBlocks.push.apply(mergeOptions.mergeBlocks,distributedBlocks),mergeOptions.updateBlocks(),distributedBlocks},fluid.matchIoCSelector=function(selector,thatStack,contextHashes,memberNames,i){for(var thatpos=thatStack.length-1,selpos=selector.length-1;;){for(var isChild=selector[selpos].child,mustMatchHere=thatpos===thatStack.length-1||isChild,that=thatStack[thatpos],selel=selector[selpos],match=!0,j=0;j<selel.predList.length;++j){var pred=selel.predList[j],context=pred.context;if(context&&"*"!==context&&!contextHashes[thatpos][context]&&memberNames[thatpos]!==context){match=!1;break}if(pred.id&&that.id!==pred.id){match=!1;break}}if(0===selpos&&thatpos>i&&mustMatchHere&&isChild&&(match=!1),match){if(0===selpos)return!0;--thatpos,--selpos}else{if(mustMatchHere)return!1;--thatpos}if(thatpos<i)return!1}},fluid.queryIoCSelector=function(root,selector,flat){var parsed=fluid.parseSelector(selector,fluid.IoCSSMatcher),togo=[];return fluid.visitComponentsForMatching(root,{flat:flat},(function(that,thatStack,contextHashes){fluid.matchIoCSelector(parsed,thatStack,contextHashes,[],1)&&togo.push(that)})),togo},fluid.isIoCSSSelector=function(context){return-1!==context.indexOf(" ")},fluid.pushDistributions=function(targetHead,selector,target,blocks){var targetShadow=fluid.shadowForComponent(targetHead),id=fluid.allocateGuid(),distribution={id:id,target:target,selector:selector,blocks:blocks};return Object.freeze(distribution),Object.freeze(distribution.blocks),distribution.blocks.forEach((function(block){fluid.freezeRecursive(block.options)})),fluid.pushArray(targetShadow,"distributions",distribution),id},fluid.clearDistribution=function(targetHeadId,id){var targetHeadShadow=fluid.globalInstantiator.idToShadow[targetHeadId];targetHeadShadow&&fluid.remove_if(targetHeadShadow.distributions,(function(distribution){return distribution.id===id}))},fluid.clearDistributions=function(shadow){fluid.each(shadow.outDistributions,(function(outDist){fluid.clearDistribution(outDist.targetHeadId,outDist.distributionId)}))},fluid.extractSelectorHead=function(parsedSelector){var predList=parsedSelector[0].predList,context=predList[0].context;return predList.length=0,context},fluid.parseExpectedOptionsPath=function(path,role){var segs=fluid.model.parseEL(path);return"options"!==segs[0]&&fluid.fail("Error in options distribution path ",path," - only "+role+' paths beginning with "options" are supported'),segs.slice(1)},fluid.replicateProperty=function(source,property,targets){void 0!==source[property]&&fluid.each(targets,(function(target){target[property]=source[property]}))},fluid.undistributableOptions=["gradeNames","distributeOptions","argumentMap","mergePolicy"],fluid.distributeOptionsOne=function(that,record,targetRef,selector,context){fluid.pushActivity("distributeOptions","parsing distributeOptions block %record %that ",{that:that,record:record});var targetHead=fluid.resolveContext(context,that);targetHead||fluid.fail("Error in options distribution record ",record," - could not resolve context {"+context+"} to a head component");var preBlocks,thatShadow=fluid.shadowForComponent(that),targetSegs=fluid.model.parseEL(targetRef.path);if(void 0!==record.record)preBlocks=[fluid.makeDistributionRecord(that,record.record,[],targetSegs,[])];else{var source=fluid.parseContextReference(record.source);"that"!==source.context&&fluid.fail("Error in options distribution record ",record," only a source context of {that} is supported");var sourceSegs=fluid.parseExpectedOptionsPath(source.path,"source"),fullExclusions=fluid.makeArray(record.exclusions).concat(0===sourceSegs.length?fluid.undistributableOptions:[]),exclusions=fluid.transform(fullExclusions,(function(exclusion){return fluid.model.parseEL(exclusion)}));preBlocks=fluid.filterBlocks(that,thatShadow.mergeOptions.mergeBlocks,sourceSegs,targetSegs,exclusions,record.removeSource),thatShadow.mergeOptions.updateBlocks()}if(fluid.replicateProperty(record,"priority",preBlocks),fluid.replicateProperty(record,"namespace",preBlocks),selector){var distributionId=fluid.pushDistributions(targetHead,selector,record.target,preBlocks);thatShadow.outDistributions=thatShadow.outDistributions||[],thatShadow.outDistributions.push({targetHeadId:targetHead.id,distributionId:distributionId})}else{var targetShadow=fluid.shadowForComponent(targetHead);fluid.applyDistributions(that,preBlocks,targetShadow)}fluid.popActivity()},fluid.distributeOptions=function(that,optionsStrategy){var records=fluid.driveStrategy(that.options,"distributeOptions",optionsStrategy);fluid.each(records,(function(record){"string"!=typeof record.target&&fluid.fail("Error in options distribution record ",record,' a member named "target" must be supplied holding an IoC reference'),"string"==typeof record.source^void 0===record.record&&fluid.fail("Error in options distribution record ",record,': must supply either a member "source" holding an IoC reference or a member "record" holding a literal record');var selector,context,targetRef=fluid.parseContextReference(record.target);(fluid.isIoCSSSelector(targetRef.context)?(selector=fluid.parseSelector(targetRef.context,fluid.IoCSSMatcher),context=fluid.extractSelectorHead(selector)):context=targetRef.context,"/"===context||"that"===context)?fluid.distributeOptionsOne(that,record,targetRef,selector,context):fluid.currentTreeTransaction().deferredDistributions.push({that:that,record:record,targetRef:targetRef,selector:selector,context:context})}))},fluid.contextName=1,fluid.memberName=2,fluid.gradeNamesToHash=function(gradeNames){var contextHash={};return fluid.each(gradeNames,(function(gradeName){fluid.isReferenceOrExpander(gradeName)||(contextHash[gradeName]=fluid.contextName,contextHash[fluid.computeNickName(gradeName)]=fluid.contextName)})),contextHash},fluid.applyToContexts=function(hash,key,disposition){var existing=hash[key];hash[key]=(existing||0)|disposition},fluid.applyToScope=function(scope,key,value,disposition){(!scope[key]||disposition&fluid.memberName)&&(scope[key]=value)},fluid.cacheShadowGrades=function(that,shadow){var contextHash=fluid.gradeNamesToHash(that.options&&that.options.gradeNames||[that.typeName]);fluid.applyToContexts(contextHash,shadow.memberName,fluid.memberName),shadow.contextHash=contextHash,fluid.each(contextHash,(function(disposition,context){shadow.ownScope[context]=that,shadow.parentShadow&&"fluid.rootComponent"!==shadow.parentShadow.that.typeName&&fluid.applyToScope(shadow.parentShadow.childrenScope,context,that,disposition)}))},fluid.deliverOptionsStrategy=function(that,target,mergeOptions){var shadow=fluid.shadowForComponent(that,shadow);fluid.cacheShadowGrades(that,shadow),shadow.mergeOptions=mergeOptions},fluid.collectDistributedGrades=function(rec){var distributedBlocks=fluid.receiveDistributions(null,null,null,rec.that);if(distributedBlocks.length>0){var readyBlocks=fluid.applyDistributions(rec.that,distributedBlocks,rec.shadow),gradeNamesList=fluid.transform(fluid.getMembers(readyBlocks,["source","gradeNames"]),fluid.makeArray);fluid.accumulateDynamicGrades(rec,fluid.flatten(gradeNamesList))}},fluid.applyDynamicGrades=function(rec){rec.oldGradeNames=fluid.makeArray(rec.gradeNames);var newDefaults=fluid.copy(fluid.getMergedDefaults(rec.that.typeName,rec.gradeNames));rec.gradeNames.length=0,rec.gradeNames.push.apply(rec.gradeNames,newDefaults.gradeNames),fluid.each(rec.gradeNames,(function(gradeName){fluid.isReferenceOrExpander(gradeName)||(rec.seenGrades[gradeName]=!0)}));var shadow=rec.shadow;fluid.cacheShadowGrades(rec.that,shadow),shadow.mergeOptions.destroyValue(["mergePolicy"]),shadow.mergeOptions.destroyValue(["components"]),shadow.mergeOptions.destroyValue(["invokers"]),rec.defaultsBlock.source=newDefaults,shadow.mergeOptions.updateBlocks(),shadow.mergeOptions.computeMergePolicy(),fluid.accumulateDynamicGrades(rec,newDefaults.gradeNames)},fluid.accumulateDynamicGrades=function(rec,newGradeNames){fluid.each(newGradeNames,(function(gradeName){var flatGradeName=fluid.flattenGradeName(gradeName);rec.seenGrades[flatGradeName]||(fluid.isReferenceOrExpander(gradeName)?(rec.rawDynamic.push(gradeName),rec.seenGrades[flatGradeName]=!0):fluid.contains(rec.oldGradeNames,gradeName)||rec.plainDynamic.push(gradeName))}))},fluid.accumulateContextAwareGrades=function(that,rec){var newContextAware=[];if(fluid.contains(rec.gradeNames,"fluid.contextAware")){var contextAwarenessOptions=fluid.getForComponent(that,["options","contextAwareness"]);newContextAware=fluid.contextAware.check(that,contextAwarenessOptions);var lostGrade=fluid.find_if(rec.contextAware,(function(gradeName){return!fluid.contains(newContextAware,gradeName)}));lostGrade&&fluid.fail("Failure operating contextAwareness definition ",contextAwarenessOptions," for component "+fluid.dumpComponentAndPath(that)+": grade name "+lostGrade+" returned by an earlier round of checks was lost through a context change caused by a raw dynamic grade"),rec.contextAware=newContextAware}return newContextAware},fluid.computeDynamicGrades=function(that,shadow,strategy){delete that.options.gradeNames;var gradeNames=fluid.driveStrategy(that.options,"gradeNames",strategy);gradeNames.length=0;var rec={that:that,shadow:shadow,defaultsBlock:fluid.findMergeBlocks(shadow.mergeOptions.mergeBlocks,"defaults")[0],gradeNames:gradeNames,seenGrades:{},plainDynamic:[],contextAware:[],rawDynamic:[]};fluid.each(shadow.mergeOptions.mergeBlocks,(function(block){gradeNames.push.apply(gradeNames,fluid.makeArray(block.target&&block.target.gradeNames)),fluid.applyDynamicGrades(rec)})),fluid.collectDistributedGrades(rec);for(var checkContextAware=!0;;){for(;rec.plainDynamic.length>0;)gradeNames.push.apply(gradeNames,rec.plainDynamic),rec.plainDynamic.length=0,fluid.applyDynamicGrades(rec),fluid.collectDistributedGrades(rec);if(checkContextAware){var newContextAware=fluid.accumulateContextAwareGrades(that,rec);rec.plainDynamic=rec.plainDynamic.concat(newContextAware),checkContextAware=!1}else{if(!(rec.rawDynamic.length>0))break;var toexpand=rec.rawDynamic.shift(),expanded=fluid.expandImmediate(toexpand,that,shadow.localRecord);"function"==typeof expanded&&(expanded=expanded()),expanded&&(rec.plainDynamic=rec.plainDynamic.concat(expanded)),checkContextAware=!0}}fluid.remove_if(gradeNames,fluid.isReferenceOrExpander),shadow.collectedClearer&&(shadow.collectedClearer(),delete shadow.collectedClearer)},fluid.computeComponentAccessor=function(that,localRecord){var instantiator=fluid.globalInstantiator,shadow=fluid.shadowForComponent(that);shadow.localRecord=localRecord;var options=that.options,strategy=shadow.mergeOptions.strategy,optionsStrategy=fluid.mountStrategy(["options"],options,strategy);shadow.invokerStrategy=fluid.recordStrategy(that,options,strategy,"invokers",fluid.invokerFromRecord),shadow.eventStrategyBlock=fluid.recordStrategy(that,options,strategy,"events",fluid.eventFromRecord,["events"]);var eventStrategy=fluid.mountStrategy(["events"],that,shadow.eventStrategyBlock.strategy);if(shadow.memberStrategy=fluid.recordStrategy(that,options,strategy,"members",fluid.memberFromRecord,null,{model:!0,modelRelay:!0}),shadow.getConfig={strategies:[fluid.concreteStrategy,fluid.model.funcResolverStrategy,optionsStrategy,shadow.invokerStrategy.strategy,shadow.memberStrategy.strategy,eventStrategy]},fluid.computeDynamicGrades(that,shadow,strategy,shadow.mergeOptions.mergeBlocks),shadow.contextHash["fluid.resourceLoader"]){shadow.resourceStrategyBlock=fluid.recordStrategy(that,options,strategy,"resources",fluid.resourceFromRecord,["resources"]);var resourceStrategy=fluid.mountStrategy(["resources"],that,shadow.resourceStrategyBlock.strategy);shadow.getConfig.strategies.push(resourceStrategy),that.resources={}}if(fluid.distributeOptions(that,strategy),shadow.contextHash["fluid.resolveRoot"]){var memberName;if(shadow.contextHash["fluid.resolveRootSingle"]){var singleRootType=fluid.getForComponent(that,["options","singleRootType"]);singleRootType||fluid.fail("Cannot register object with grades "+Object.keys(shadow.contextHash).join(", ")+" as fluid.resolveRootSingle since it has not defined option singleRootType"),memberName=fluid.typeNameToMemberName(singleRootType)}else memberName=fluid.computeGlobalMemberName(that.typeName,that.id);var parent=fluid.resolveRootComponent;parent[memberName]&&instantiator.clearComponent(parent,memberName),instantiator.recordKnownComponent(parent,that,memberName,!1)}return shadow.getConfig},fluid.shadowForComponent=function(component){var instantiator=fluid.getInstantiator(component);return instantiator&&component?instantiator.idToShadow[component.id]:null},fluid.pathInEvaluation=function(path,paths){var index=paths.indexOf(path);return-1!==index&&index!==paths.length-1},fluid.getForComponent=function(component,path){var segs=fluid.model.pathToSegments(path);if(0===segs.length)return component;var instantiator=fluid.globalInstantiator,shadow=fluid.shadowForComponent(component);if(!shadow)return fluid.get(component,path);var next=fluid.get(component,segs[0],shadow.getConfig);if(fluid.isComponent(next))return fluid.getForComponent(next,segs.slice(1));var inEvaluationPaths=instantiator.inEvaluationPaths,inEvaluationPath=component.id+":"+path;if(!fluid.pathInEvaluation(inEvaluationPath,inEvaluationPaths)){inEvaluationPaths.push(inEvaluationPath);var togo=fluid.get(component,path,shadow.getConfig);return inEvaluationPaths.pop(),togo}fluid.fail("Error in component configuration - a circular reference was found during evaluation of path "+path+" for component "+fluid.dumpComponentAndPath(component)+": a circular set of references was found - for more details, see the activity records following this message in the console")},fluid.concreteStrategy=function(component,thisSeg,index,segs){var atval=component[thisSeg];return atval===fluid.inEvaluationMarker&&fluid.fail('Error in component configuration - a circular reference was found during evaluation of path segment "'+thisSeg+" of path ",segs,'": for more details, see the activity records following this message in the console, or issue fluid.setLogging(fluid.logLevel.TRACE) when running your application'),index>1?atval:void 0===atval&&component.hasOwnProperty(thisSeg)?fluid.NO_VALUE:atval},fluid.frameworkGrades=["fluid.component","fluid.modelComponent","fluid.viewComponent","fluid.rendererComponent"],fluid.filterBuiltinGrades=function(gradeNames){return fluid.remove_if(fluid.makeArray(gradeNames),(function(gradeName){return-1!==fluid.frameworkGrades.indexOf(gradeName)}))},fluid.dumpGradeNames=function(that){return that.options&&that.options.gradeNames?" gradeNames: "+JSON.stringify(fluid.filterBuiltinGrades(that.options.gradeNames)):""},fluid.dumpThat=function(that){return'{ typeName: "'+that.typeName+" id: "+that.id+'"'+fluid.dumpGradeNames(that)+"}"},fluid.dumpThatStack=function(thatStack,instantiator){return fluid.transform(thatStack,(function(that){var path=instantiator.idToPath(that.id);return fluid.dumpThat(that)+(path?" - path: "+path:"")})).join("\n")},fluid.dumpComponentPath=function(that){var path=fluid.pathForComponent(that);return path?fluid.pathUtil.composeSegments.apply(null,path):"** no path registered for component **"},fluid.dumpComponentAndPath=function(that){return"component "+fluid.dumpThat(that)+" at path "+fluid.dumpComponentPath(that)},fluid.resolveContext=function(context,that,fast){if("that"===context)return that;if("/"===context)return fluid.rootComponent;if("object"==typeof context){var innerContext=fluid.resolveContext(context.context,that,fast);fluid.isComponent(innerContext)||fluid.triggerMismatchedPathError(context.context,that);var rawValue=fluid.getForComponent(innerContext,context.path),expanded=fluid.expandOptions(rawValue,that);return fluid.isComponent(expanded)||fluid.fail("Unable to resolve recursive context expression "+fluid.renderContextReference(context)+": the directly resolved value of "+rawValue+" did not resolve to a component in the scope of component ",that,": got ",expanded),expanded}var foundComponent,instantiator=fluid.globalInstantiator;if(fast)return instantiator.idToShadow[that.id].ownScope[context];var thatStack=instantiator.getFullStack(that);return fluid.visitComponentsForVisibility(instantiator,thatStack,(function(component,memberName){var scopeValue=fluid.shadowForComponent(component).contextHash[context];if(scopeValue&&scopeValue!==fluid.memberName||context===memberName)return foundComponent=component,!0})),foundComponent},fluid.triggerMismatchedPathError=function(parsed,parentThat){var ref=fluid.renderContextReference(parsed);fluid.fail("Failed to resolve reference "+ref+" - could not match context with name "+parsed.context+" from "+fluid.dumpComponentAndPath(parentThat))},fluid.makeStackFetcher=function(parentThat,localRecord,fast){return function(parsed){parentThat&&"destroyed"===parentThat.lifecycleStatus&&fluid.fail("Cannot resolve reference "+fluid.renderContextReference(parsed)+" from component "+fluid.dumpThat(parentThat)+" which has been destroyed");var context=parsed.context;if(localRecord&&context in localRecord)return fluid.get(localRecord[context],parsed.path);var foundComponent=fluid.resolveContext(context,parentThat,fast);return foundComponent||""===parsed.path||fluid.triggerMismatchedPathError(parsed,parentThat),fluid.getForComponent(foundComponent,parsed.path)}},fluid.makeStackResolverOptions=function(parentThat,localRecord,fast){return $.extend(fluid.copy(fluid.rawDefaults("fluid.makeExpandOptions")),{ELstyle:"{}",localRecord:localRecord||{},fetcher:fluid.makeStackFetcher(parentThat,localRecord,fast),contextThat:parentThat,exceptions:{members:{model:!0,modelRelay:!0}}})},fluid.clearListeners=function(shadow){fluid.each(shadow.listeners,(function(rec){rec.event.removeListener(rec.listenerId||rec.listener)})),delete shadow.listeners},fluid.recordListener=function(event,listener,shadow,listenerId){event.ownerId!==shadow.that.id&&fluid.pushArray(shadow,"listeners",{event:event,listener:listener,listenerId:listenerId})},fluid.constructScopeObjects=function(instantiator,parent,child,childShadow){var parentShadow=parent?instantiator.idToShadow[parent.id]:null;childShadow.childrenScope=parentShadow?Object.create(parentShadow.ownScope):{},childShadow.ownScope=Object.create(childShadow.childrenScope),childShadow.parentShadow=parentShadow,childShadow.childComponents={},fluid.cacheShadowGrades(child,childShadow)},fluid.clearChildrenScope=function(parentShadow,child,childShadow,memberName){var keys=fluid.keys(childShadow.contextHash);keys.push(memberName),keys.forEach((function(context){parentShadow.childrenScope[context]===child&&delete parentShadow.childrenScope[context]}))},fluid.clearComponentIndexes=function(instantiator,destroyRec){var shadow=destroyRec.shadow;fluid.clearChildrenScope(shadow,destroyRec.child,destroyRec.childShadow,destroyRec.name),delete instantiator.pathToComponent[destroyRec.childPath],delete shadow.childComponents[destroyRec.name]},fluid.doDestroy=function(instantiator,destroyRec){var shadow=destroyRec.childShadow,that=destroyRec.child;for(var key in fluid.each(shadow.injectedPaths,(function(troo,injectedPath){var parentPath=fluid.model.getToTailPath(injectedPath),otherParent=instantiator.pathToComponent[parentPath];instantiator.clearComponent(otherParent,fluid.model.getTailPath(injectedPath),that)})),fluid.clearComponentIndexes(instantiator,destroyRec),fluid.clearDistributions(shadow),fluid.clearListeners(shadow),that.events)"afterDestroy"!==key&&"function"==typeof that.events[key].destroy&&that.events[key].destroy();that.applier&&that.applier.destroy(),that.lifecycleStatus="destroyed",fluid.fireEvent(destroyRec.child,"afterDestroy",[destroyRec.child,destroyRec.name,destroyRec.component]),delete instantiator.idToShadow[destroyRec.child.id]},fluid.instantiator=function(){var that=fluid.typeTag("instantiator");function recordComponent(parent,component,path,name,created){var shadow;if(created)(shadow=that.idToShadow[component.id]={}).that=component,shadow.path=path,shadow.memberName=name,fluid.constructScopeObjects(that,parent,component,shadow);else{(shadow=that.idToShadow[component.id]).injectedPaths=shadow.injectedPaths||{},shadow.injectedPaths[path]=!0;var parentShadow=that.idToShadow[parent.id],keys=fluid.keys(shadow.contextHash);fluid.remove_if(keys,(function(key){return shadow.contextHash&&shadow.contextHash[key]===fluid.memberName})),keys.push(name),keys.forEach((function(context){parentShadow.childrenScope.hasOwnProperty(context)||(parentShadow.childrenScope[context]=component)}))}that.pathToComponent[path]&&fluid.fail("Error during instantiation - path "+path+" which has just created component "+fluid.dumpThat(component)+" has already been used for component "+fluid.dumpThat(that.pathToComponent[path])+" - this is a circular instantiation or other oversight. Please clear the component using instantiator.clearComponent() before reusing the path."),that.pathToComponent[path]=component}return $.extend(that,{lifecycleStatus:"constructed",pathToComponent:{},idToShadow:{},modelTransactions:{},treeTransactions:{},inEvaluationPaths:[],currentTreeTransactionId:null,composePath:fluid.model.composePath,composeSegments:fluid.model.composeSegments,parseEL:fluid.model.parseEL,events:{onComponentAttach:fluid.makeEventFirer({name:"instantiator's onComponentAttach event"}),onComponentClear:fluid.makeEventFirer({name:"instantiator's onComponentClear event"}),onBeginTreeTransaction:fluid.makeEventFirer({name:"instantiator's onBeginTransaction event"}),onEndTreeTransaction:fluid.makeEventFirer({name:"instantiator's onEndTransaction event"})}}),that.parseToSegments=function(path){return fluid.model.parseToSegments(path,that.parseEL,!0)},that.idToPath=function(id){var shadow=that.idToShadow[id];return shadow?shadow.path:""},that.getThatStack=function(component){var shadow=that.idToShadow[component.id];if(shadow){for(var path=shadow.path,parsed=that.parseEL(path),root=that.pathToComponent[""],togo=[],i=0;i<parsed.length;++i)root=root[parsed[i]],togo.push(root);return togo}return[]},that.getFullStack=function(component){var thatStack=component?that.getThatStack(component):[];return thatStack.unshift(fluid.resolveRootComponent),thatStack},that.recordRoot=function(component){recordComponent(null,component,"","",!0)},that.recordKnownComponent=function(parent,component,name,created){if(parent[name]=component,fluid.isComponent(component)||"instantiator"===component.type){var parentShadow=that.idToShadow[parent.id];parentShadow.childComponents[name]=component;var path=that.composePath(parentShadow.path,name);recordComponent(parent,component,path,name,created),that.events.onComponentAttach.fire(component,path,that,created)}else fluid.fail("Cannot record non-component with value ",component,' at path "'+name+'" of parent ',parent)},that.clearComponent=function(component,name,child,options,nested,path){var shadow=that.idToShadow[component.id];options=options||{flat:!0,destroyRecs:[]},child=child||component[name],void 0===(path=path||shadow.path)&&fluid.fail("Cannot clear component "+name+" from component ",component," which was not created by this instantiator");var childPath=that.composePath(path,name),childShadow=that.idToShadow[child.id];if(childShadow){var created=childShadow.path===childPath;that.events.onComponentClear.fire(child,childPath,component,created);var destroyRec={child:child,childShadow:childShadow,name:name,component:component,shadow:shadow,childPath:childPath};created?(fluid.isDestroyed(child)&&fluid.fail('Cannot destroy component which is already in status "'+child.lifecycleStatus+'"'),child.lifecycleStatus="destroying",fluid.visitComponentChildren(child,(function(gchild,gchildname,segs,i){var parentPath=that.composeSegments.apply(null,segs.slice(0,i));that.clearComponent(child,gchildname,null,options,!0,parentPath)}),options,that.parseEL(childPath)),fluid.fireEvent(child,"onDestroy",[child,name||"",component]),options.destroyRecs.push(destroyRec)):(fluid.remove_if(childShadow.injectedPaths,(function(troo,path){return path===childPath})),fluid.clearComponentIndexes(that,destroyRec)),nested||(delete component[name],options.destroyRecs.forEach((function(destroyRec){fluid.doDestroy(that,destroyRec)})))}},that},fluid.globalInstantiator=fluid.instantiator(),fluid.getInstantiator=function(component){var instantiator=fluid.globalInstantiator;return component&&instantiator.idToShadow[component.id]?instantiator:null},fluid.defaults("fluid.resolveRoot"),fluid.defaults("fluid.resolveRootSingle",{gradeNames:"fluid.resolveRoot"}),fluid.constructRootComponents=function(instantiator){fluid.rootComponent=instantiator.rootComponent=fluid.typeTag("fluid.rootComponent"),instantiator.recordRoot(fluid.rootComponent),fluid.resolveRootComponent=instantiator.resolveRootComponent=fluid.typeTag("fluid.resolveRootComponent"),instantiator.recordKnownComponent(fluid.rootComponent,fluid.resolveRootComponent,"resolveRootComponent",!0);var rootShadow=instantiator.idToShadow[fluid.rootComponent.id];rootShadow.contextHash={};var resolveRootShadow=instantiator.idToShadow[fluid.resolveRootComponent.id];resolveRootShadow.ownScope=rootShadow.ownScope,resolveRootShadow.childrenScope=rootShadow.childrenScope,instantiator.recordKnownComponent(fluid.resolveRootComponent,instantiator,"instantiator",!0),resolveRootShadow.childrenScope.instantiator=instantiator},fluid.constructRootComponents(fluid.globalInstantiator),fluid.expandOptions=function(args,that,mergePolicy,localRecord,outerExpandOptions){if(!args)return args;fluid.pushActivity("expandOptions","expanding options %args for component %that ",{that:that,args:args});var expandOptions=fluid.makeStackResolverOptions(that,localRecord);expandOptions.mergePolicy=mergePolicy,expandOptions.defer=outerExpandOptions&&outerExpandOptions.defer;var expanded=expandOptions.defer?fluid.makeExpandOptions(args,expandOptions):fluid.expand(args,expandOptions);return fluid.popActivity(),expanded},fluid.computeMergeListPriority=function(toMerge){toMerge.forEach((function(record){var recordType=record.recordType;"distribution"!==recordType&&(record.priority=fluid.mergeRecordTypes[recordType]+(record.priorityDelta||0),Number.isInteger(record.priority)||fluid.fail("Merge record with unrecognised type "+recordType+": ",record))}))};var addPolicyBuiltins=function(policy){return fluid.each(["gradeNames","mergePolicy","argumentMap","components","dynamicComponents","events","listeners","modelListeners","modelRelay","distributeOptions","transformOptions"],(function(key){fluid.set(policy,[key,"*","noexpand"],!0)})),policy};fluid.generateExpandBlock=function(record,that,mergePolicy,localRecord){var expanded=fluid.expandOptions(record.options||{},record.contextThat||that,mergePolicy,localRecord,{defer:!0});return expanded.priority=record.priority,expanded.namespace=record.namespace,expanded.recordType=record.recordType,expanded},fluid.fabricateDestroyMethod=function(that){return function(){var currentTrans=fluid.currentTreeTransaction(),shadow=fluid.shadowForComponent(that),transRec=fluid.destroy(shadow.path);currentTrans||transRec.promise.then(null,(function(e){throw e}))}},fluid.typeNameToMemberName=function(typeName){return typeName.replace(/\./g,"_")},fluid.expandComponentOptions=function(mergePolicy,potentia,lightMerge,that){var toMerge=lightMerge.toMerge,container=fluid.lightMergeValue(toMerge,"container");return container&&toMerge.push({recordType:"distribution",priority:fluid.mergeRecordTypes.distribution,options:{container:container},contextThat:potentia.parentThat}),that.destroy=fluid.fabricateDestroyMethod(that),addPolicyBuiltins(mergePolicy),fluid.shadowForComponent(that).mergePolicy=mergePolicy,fluid.computeMergeListPriority(toMerge),fluid.transform(toMerge,(function(value){return fluid.generateExpandBlock(value,that,mergePolicy,potentia.localRecord)}))},fluid.computeDynamicComponentKey=function(recordKey,sourceKey){return recordKey+(0===sourceKey||"0"===sourceKey?"":"-"+sourceKey)},fluid.concludeAnyTreeTransaction=function(){var errorOut,instantiator=fluid.globalInstantiator,transactionId=instantiator.currentTreeTransactionId;if(transactionId&&(instantiator.treeTransactions[transactionId].promise.then(null,(function(e){errorOut=e})),fluid.commitPotentiae(transactionId),errorOut))throw errorOut},fluid.bindDeferredComponent=function(that,componentName,lightMerge,dynamicComponent){var eventName=lightMerge.createOnEvent,event=fluid.isIoCReference(eventName)?fluid.expandOptions(eventName,that):that.events[eventName];event&&event.addListener||fluid.fail("Error instantiating createOnEvent component with name "+componentName+" of parent ",that," since event specification "+eventName+" could not be expanded to an event - got ",event);var shadow=fluid.shadowForComponent(that);dynamicComponent&&fluid.set(shadow,["dynamicComponentCount",componentName],0);var constructListener=function(){var key=dynamicComponent?fluid.computeDynamicComponentKey(componentName,shadow.dynamicComponentCount[componentName]++):componentName,localRecord={arguments:fluid.makeArray(arguments)};fluid.pushActivity("initDeferred","instantiating deferred component %componentName of parent %that due to event %eventName",{componentName:componentName,that:that,eventName:eventName});var freshLightMerge=fluid.copy(lightMerge);delete freshLightMerge.createOnEvent,fluid.registerConcreteSubPotentia(freshLightMerge,key,0,that,localRecord),fluid.popActivity()};event.addListener(constructListener),fluid.recordListener(event,constructListener,shadow),event.addListener(fluid.concludeAnyTreeTransaction,"fluid-componentConstruction","last:transaction"),fluid.recordListener(event,fluid.concludeAnyTreeTransaction,shadow)},fluid.markSubtree=function(instantiator,that,path,state){that.lifecycleStatus=state,fluid.visitComponentChildren(that,(function(child,name){var childPath=instantiator.composePath(path,name),childShadow=instantiator.idToShadow[child.id];childShadow&&childShadow.path===childPath&&fluid.markSubtree(instantiator,child,childPath,state)}),{flat:!0})},fluid.assessTreeConstruction=function(that,shadow){var instantiator=fluid.globalInstantiator,thatStack=instantiator.getThatStack(that),unstableUp=fluid.find_if(thatStack,(function(that){return"constructing"===that.lifecycleStatus}));unstableUp?that.lifecycleStatus="constructed":fluid.markSubtree(instantiator,that,shadow.path,"treeConstructed")},fluid.concludeComponentObservation=function(shadow){var that=shadow.that,mergeOptions=shadow.mergeOptions;fluid.pushActivity("concludeComponentObservation","constructing component of type %componentName at path %path",{componentName:that.typeName,path:shadow.path}),mergeOptions.evaluateFully=!0;for(var i=0;i<mergeOptions.mergeBlocks.length;++i)mergeOptions.mergeBlocks[i].initter();mergeOptions.initter(),delete that.options.mergePolicy,shadow.memberStrategy.initter(),shadow.invokerStrategy.initter(),fluid.freezeRecursive(that.options),fluid.each(shadow.lightMergeComponents,(function(lightMerge,key){lightMerge.createOnEvent&&fluid.bindDeferredComponent(that,key,lightMerge)})),fluid.each(shadow.lightMergeDynamicComponents,(function(lightMerge,key){lightMerge.createOnEvent&&fluid.bindDeferredComponent(that,key,lightMerge,!0)})),fluid.popActivity()},fluid.concludeComponentInit=function(shadow){var that=shadow.that;if(!fluid.isDestroyed(that))return that.lifecycleStatus="constructed",fluid.assessTreeConstruction(that,shadow),that.events.onCreate.fire(that),fluid.popActivity(),that},fluid.pushCreatePotentia=function(potentiaList,path,topush){var existing=potentiaList.pathToPotentia[path];if(!existing||existing.applied)return potentiaList.pathToPotentia[path]=topush,topush.records&&(topush.lightMerge=fluid.lightMergeRecords(topush.records),delete topush.records),topush;fluid.lightMergeRecords.pushRecords(existing,topush.records||topush.lightMerge.toMerge)},fluid.blankPotentiaList=function(){return{destroys:[],creates:[],activeCount:0,pathToPotentia:{}}},fluid.isInjectedComponentRecord=function(record){return"string"==typeof record||fluid.isPlainObject(record,!0)&&record.expander},fluid.lightMergeValue=function(records,member){var value;return records.forEach((function(record){var recValue=record[member];value=void 0===recValue?value:recValue})),value},fluid.lightMergeRecords=function(records){var togo={toMerge:[],isInjected:!1};return fluid.lightMergeRecords.pushRecords(togo,records),togo},fluid.lightMergeRecords.pushRecord=function(lightMerge,record){fluid.isInjectedComponentRecord(record)?(lightMerge.toMerge=[{injected:record}],lightMerge.isInjected=!0):(lightMerge.type=record.type||lightMerge.type,lightMerge.createOnEvent=record.createOnEvent||lightMerge.createOnEvent,lightMerge.source=record.source||lightMerge.source,lightMerge.sources=record.sources||lightMerge.sources,lightMerge.isInjected?lightMerge.toMerge=[record]:lightMerge.toMerge.push(record),lightMerge.isInjected=!1)},fluid.lightMergeRecords.pushRecords=function(lightMerge,records){records.forEach((function(record){fluid.lightMergeRecords.pushRecord(lightMerge,record)}))},fluid.instantiateEvents=function(shadow){var that=shadow.that;shadow.eventStrategyBlock.initter();var listeners=fluid.getForComponent(that,["options","listeners"]);fluid.mergeListeners(that,that.events,listeners);var errors=fluid.validateListenersImplemented(that);errors.length>0&&fluid.fail(fluid.transform(errors,(function(error){return["Error constructing component ",that," - the listener for event "+error.name+" with namespace "+error.namespace+(error.componentSource?" which was defined in grade "+error.componentSource:"")+" needs to be overridden with a concrete implementation"]}))).join("\n")},fluid.initComponentShell=function(potentia,lightMerge){var instantiator=fluid.globalInstantiator,upDefaults=fluid.defaults(lightMerge.type),parentThat=potentia.parentThat,memberName=potentia.memberName,distributions=fluid.receiveDistributions(parentThat,upDefaults&&upDefaults.gradeNames,memberName,{});fluid.each(distributions,(function(distribution){fluid.computeDistributionPriority(parentThat,distribution),fluid.isPrimitive(distribution.priority)&&(distribution.priority=fluid.parsePriority(distribution.priority,0,!1,"options distribution"))})),fluid.sortByPriority(distributions),fluid.lightMergeRecords.pushRecords(lightMerge,distributions),upDefaults=fluid.defaults(lightMerge.type);var defaultCopy=fluid.copy(upDefaults);lightMerge.toMerge.unshift({options:defaultCopy,recordType:"defaults"});var that="fluid.emptySubcomponent"===lightMerge.type?null:fluid.typeTag(lightMerge.type,potentia.componentId);that&&(that.lifecycleStatus="constructing",instantiator.recordKnownComponent(parentThat,that,memberName,!0),fluid.mergeComponentOptions(that,potentia,lightMerge).exceptions={members:{model:!0,modelRelay:!0}},that.events={});return that},fluid.registerConcreteSubPotentia=function(lightMerge,key,componentDepth,parentShell,localRecord,transactionId){componentDepth=componentDepth||0;var newSegs=fluid.pathForComponent(parentShell).concat([key]);parentShell[key]&&fluid.registerPotentia({segs:newSegs,type:"destroy"},transactionId),lightMerge.toMerge=fluid.transform(lightMerge.toMerge,(function(toMerge){return $.extend({componentDepth:componentDepth+1,sourceComponentId:parentShell.id,recordType:"subcomponentRecord"},toMerge)})),lightMerge.type=fluid.expandImmediate(lightMerge.type,parentShell,localRecord);var subPotentia={type:"create",segs:newSegs,lightMerge:lightMerge,localRecord:localRecord};fluid.registerPotentia(subPotentia,transactionId)},fluid.lightMergeComponentRecord=function(shadow,shadowKey,key,mergingArray){var lightMerge=fluid.lightMergeRecords(mergingArray);return fluid.set(shadow,[shadowKey,key],lightMerge),lightMerge},fluid.componentRecordExpected=fluid.arrayToHash(["type","options","container","createOnEvent"]),fluid.dynamicComponentRecordExpected=$.extend({},fluid.componentRecordExpected,fluid.arrayToHash(["source","sources"])),fluid.checkComponentRecord=function(localRecord,expected){fluid.isInjectedComponentRecord(localRecord)||(fluid.isPlainObject(localRecord,!0)?fluid.each(localRecord,(function(value,key){expected[key]||fluid.fail("Error in subcomponent record "+JSON.stringify(localRecord)+' - key "'+key+'" found, where the only legal options are '+fluid.keys(expected).join(", "))})):fluid.fail("Error in subcomponent record "+JSON.stringify(localRecord)+' - this should either be an object with member "type" or else a reference to another component'))},fluid.checkSubcomponentRecords=function(subcomponentRecords,expected){subcomponentRecords.forEach((function(oneRecord){fluid.checkComponentRecord(oneRecord,expected)}))},fluid.registerSourcedDynamicComponent=function(potentia,shell,source,sourceKey,lightMerge,key,localRecordContributor){var localRecord=$.extend({},potentia.localRecord,{source:source,sourcePath:sourceKey});(localRecordContributor||fluid.identity)(localRecord,source,sourceKey);var dynamicKey=fluid.computeDynamicComponentKey(key,sourceKey),freshLightMerge=fluid.copy(lightMerge);fluid.registerConcreteSubPotentia(freshLightMerge,dynamicKey,potentia.componentDepth,shell,localRecord)},fluid.registerSourcedDynamicComponents=function(potentia,shell,sources,lightMerge,key,localRecordContributor){fluid.each(sources,(function(source,sourceKey){fluid.registerSourcedDynamicComponent(potentia,shell,source,sourceKey,lightMerge,key,localRecordContributor)}))},fluid.lensedComponentModelListener=function(that,key,segs,value,isBoolean){var isEmptyValue=function(value){return isBoolean?!value:void 0===value},shadow=fluid.shadowForComponent(that),sourceKey=isBoolean?0:fluid.peek(segs),currentComponent=that[fluid.computeDynamicComponentKey(key,sourceKey)];if(isEmptyValue(value)||currentComponent)isEmptyValue(value)&&currentComponent&&currentComponent.destroy();else{var lightMerge=shadow.lightMergeDynamicComponents[key],parentRecord=shadow.modelSourcedDynamicComponents[key];fluid.registerSourcedDynamicComponent(shadow.potentia,that,value,sourceKey,lightMerge,key,parentRecord.localRecordContributor)}},fluid.lensedComponentDefToBlock=function(key,sourcesParsed,isBoolean){var fromModelPath=sourcesParsed.segs.slice(1),modelListener={path:{context:sourcesParsed.context,segs:fromModelPath.concat(isBoolean?[]:["*"])},excludeSource:"init",transactional:!0,funcName:"fluid.lensedComponentModelListener",args:["{that}",key,"{change}.path","{change}.value",isBoolean]},modelListeners={};return modelListeners["lensedComponents-"+key]=modelListener,{modelListeners:modelListeners}},fluid.addLensedComponentBlocks=function(lensedComponentBlocks,potentia,shadow){var merged=fluid.extend.apply(null,[!0,{}].concat(lensedComponentBlocks));shadow.mergeOptions.mergeBlocks.push(fluid.generateExpandBlock({options:merged,recordType:"lensedComponents",priority:fluid.mergeRecordTypes.lensedComponents},shadow.that,shadow.mergePolicy,potentia.localRecord)),shadow.mergeOptions.updateBlocks()},fluid.pushMarkupSourcedDynamicComponentListener=function(shell,key,sourcesParsed,registerDynamicComponents){var namespace=shell.id+"-markupDynamicComponents-"+key,context=fluid.resolveContext(sourcesParsed.context,shell);if(context.events.onDomBind)context.events.onDomBind.addListener(registerDynamicComponents,namespace);else{var targetShadow=fluid.shadowForComponent(context);fluid.addLensedComponentBlocks([{listeners:{onDomBind:{namespace:namespace,listener:registerDynamicComponents}}}],{},targetShadow)}},fluid.expectExactlyOne=function(failStart,target,members){var found=0;members.forEach((function(member){void 0!==target[member]&&++found})),1!==found&&fluid.fail.apply(null,failStart.concat([" must contain exactly one member out of "+members.join(", ")]))},fluid.registerSourcedDynamicComponentsTriage=function(potentia,shell,sourceOrSources,lightMerge,key,isBoolean,localRecordContributor){isBoolean&&sourceOrSources?fluid.registerSourcedDynamicComponent(potentia,shell,sourceOrSources,0,lightMerge,key,localRecordContributor):fluid.registerSourcedDynamicComponents(potentia,shell,sourceOrSources,lightMerge,key,localRecordContributor)},fluid.processComponentShell=function(potentia,shell,transRec){var shadow=fluid.globalInstantiator.idToShadow[shell.id];shadow.potentia=potentia,shadow.createdTransactionId=transRec.transactionId;var mergeOptions=shadow.mergeOptions,components=fluid.driveStrategy(shell.options,"components",mergeOptions.strategy);fluid.each(components,(function(subcomponentRecords,key){fluid.checkSubcomponentRecords(subcomponentRecords,fluid.componentRecordExpected);var lightMerge=fluid.lightMergeComponentRecord(shadow,"lightMergeComponents",key,subcomponentRecords);lightMerge.createOnEvent||fluid.registerConcreteSubPotentia(lightMerge,key,potentia.componentDepth,shell,potentia.localRecord)}));var dynamicComponents=fluid.driveStrategy(shell.options,"dynamicComponents",mergeOptions.strategy),lensedComponentBlocks=[];fluid.each(dynamicComponents,(function(subcomponentRecords,key){fluid.checkSubcomponentRecords(subcomponentRecords,fluid.dynamicComponentRecordExpected);var lightMerge=fluid.lightMergeComponentRecord(shadow,"lightMergeDynamicComponents",key,subcomponentRecords);if(fluid.expectExactlyOne(["dynamicComponents records ",subcomponentRecords],lightMerge,["source","sources","createOnEvent"]),void 0!==lightMerge.sources||void 0!==lightMerge.source){var recordSources=lightMerge.sources,isBoolean=!1;if(void 0!==lightMerge.source&&(recordSources=lightMerge.source,isBoolean=!0),fluid.isIoCReference(recordSources)){var sourcesParsed=fluid.parseValidModelReference(shell,"dynamicComponents source",recordSources,!0),registerDynamicComponents=function(){var sources=fluid.getForComponent(sourcesParsed.that,sourcesParsed.segs);fluid.registerSourcedDynamicComponentsTriage(potentia,shell,sources,lightMerge,key,null,isBoolean)};sourcesParsed.nonModel?"dom"===sourcesParsed.segs[0]?fluid.pushMarkupSourcedDynamicComponentListener(shell,key,sourcesParsed,registerDynamicComponents):registerDynamicComponents():(fluid.set(shadow,["modelSourcedDynamicComponents",key],{sourcesParsed:sourcesParsed,isBoolean:isBoolean}),lensedComponentBlocks.push(fluid.lensedComponentDefToBlock(key,sourcesParsed,isBoolean)))}else{var sources=fluid.expandImmediate(recordSources,shell,potentia.localRecord);fluid.registerSourcedDynamicComponentsTriage(potentia,shell,sources,lightMerge,key,null,isBoolean)}}})),lensedComponentBlocks.length&&fluid.addLensedComponentBlocks(lensedComponentBlocks,potentia,shadow),transRec.deferredDistributions.length&&(transRec.pendingPotentiae.creates.push({type:"distributeOptions",distributions:transRec.deferredDistributions}),++transRec.pendingPotentiae.activeCount,transRec.deferredDistributions=[])},fluid.preparePathedPotentia=function(potentia,instantiator){var segs=potentia.segs||instantiator.parseToSegments(potentia.path);potentia.segs=segs,potentia.memberName=fluid.peek(segs),potentia.parentThat=fluid.getImmediate(fluid.rootComponent,segs.slice(0,-1)),"create"!==potentia.type||potentia.parentThat||fluid.fail("Cannot construct component at path ",segs," whose parent does not exist")},fluid.fetchNestedInjectedComponentReference=function(transRec,potentiaList,injected,head,parentPath,segs){for(var instantiator=fluid.globalInstantiator,path=parentPath,current=head,i=0;i<segs.length;++i){if(path=fluid.composePath(path,segs[i]),!(current=instantiator.pathToComponent[path])){var upcoming=potentiaList.pathToPotentia[path];upcoming&&(upcoming.applied?fluid.fail("Circular reference found when resolving injected component reference ",injected," - the target of the reference is still in construction"):(current=fluid.operateCreatePotentia(transRec,upcoming))&&(path=instantiator.idToShadow[current.id].path))}current||i===segs.length-1||fluid.fail("Failed to resolved injected component reference ",injected," - component at segment "+segs[i]+" was not found")}return current},fluid.fetchInjectedComponentReference=function(transRec,potentiaList,injected,parentThat){var instantiator=fluid.globalInstantiator;if(injected.expander)return fluid.expandImmediate(injected,parentThat,null,!0);var parsed=fluid.parseContextReference(injected),head=fluid.resolveContext(parsed.context,parentThat);if(head){var parentPath=instantiator.idToShadow[head.id].path,segs=fluid.model.parseEL(parsed.path);return fluid.fetchNestedInjectedComponentReference(transRec,potentiaList,injected,head,parentPath,segs)}if(""===parsed.path)return head;fluid.fail("Error in injected component reference ",injected," - could not resolve context {"+parsed.context+"} to a head component")},fluid.operateCreatePotentia=function(transRec,potentia){var instantiator=fluid.globalInstantiator,potentiaList=transRec.pendingPotentiae;fluid.preparePathedPotentia(potentia,instantiator);var shell,memberName=potentia.memberName,parentThat=potentia.parentThat;fluid.pushActivity("operateCreatePotentia",'operating create potentia for path "%path" with records %records',{path:potentia.path,records:potentia.records}),potentia.applied=!0,--potentiaList.activeCount;var lightMerge=potentia.lightMerge;if(lightMerge.isInjected)parentThat[memberName]=fluid.inEvaluationMarker,(shell=fluid.fetchInjectedComponentReference(transRec,potentiaList,lightMerge.toMerge[0].injected,parentThat))?instantiator.recordKnownComponent(parentThat,shell,memberName,!1):delete parentThat[memberName];else if(lightMerge.type){if(shell=fluid.initComponentShell(potentia,lightMerge)){fluid.processComponentShell(potentia,shell,transRec);var shadow=instantiator.idToShadow[shell.id];transRec.outputShadows.push(shadow)}}else fluid.fail("Unrecognised material in place of subcomponent "+memberName+" - could not recognise the records ",potentia.records," as designating either an injected or concrete component");return fluid.pushPotentia(transRec.restoreRecords,instantiator,{type:"destroy",segs:potentia.segs}),fluid.popActivity(),shell},fluid.operateDestroyPotentia=function(transRec,potentia,instantiator){instantiator=instantiator||fluid.globalInstantiator,fluid.preparePathedPotentia(potentia,instantiator);var that=fluid.getImmediate(fluid.rootComponent,potentia.segs);that&&instantiator.clearComponent(potentia.parentThat,potentia.memberName,that)},fluid.lookupWorkflowStage=function(workflowName){if(!workflowName)return fluid.workflowCacheSorted.length;if("shells"===workflowName)return 0;var found=fluid.find_if(fluid.workflowCacheSorted,(function(workflowEntry){return workflowEntry.workflowName===workflowName}));if(found)return found.index+1;fluid.fail("Unknown workflow name "+workflowName+' supplied as "breakAt" for tree transaction: : valid names are '+fluid.getMembers(fluid.workflowCacheSorted,"workflowName").join(", "))},fluid.evaluateWorkflows=function(shadows,workflowType){var togo=[];return fluid.workflowCacheSorted[workflowType].forEach((function(workflowRecord){shadows.filter((function(oneShadow){return fluid.componentHasGrade(oneShadow.that,workflowRecord.gradeName)})).length>0&&togo.push({shadows:shadows,workflowIndex:workflowRecord.index,workflowOptions:workflowRecord.workflowOptions})})),togo},fluid.findWorkflowShadows=function(shadows,blockStart,blockEnd,workflowRecord){for(var workflowShadows=[],i=blockStart;i<blockEnd;++i)fluid.componentHasGrade(shadows[i].that,workflowRecord.gradeName)&&("global"===workflowRecord.workflowType?workflowShadows.push(shadows[i]):workflowShadows.unshift(shadows[i]));return workflowShadows},fluid.waitPendingIOTask=function(transRec){var sequence,instantiator=fluid.globalInstantiator,resumeCurrentTransaction=function(){instantiator.currentTreeTransactionId=transRec.transactionId},waitIOTask=function(){return transRec.pendingIO.length?sequence=fluid.promise.sequence(function(sequence){return sequence.concat([resumeCurrentTransaction])}(transRec.pendingIO)):null};return waitIOTask.taskName="waitIO",waitIOTask.sequence=sequence,waitIOTask},fluid.enqueueWorkflowBlock=function(transRec,shadows,workflowStart,workflowEnd,blockStart,blockEnd,sequencer){var workQueued=!1;return transRec.lastWorkflowShadow=Math.max(transRec.lastWorkflowShadow,blockEnd),fluid.forEachInRange(fluid.workflowCacheSorted,workflowStart,workflowEnd,(function(workflowRecord,workflowIndex){if(0===workflowIndex)for(var i=blockStart;i<blockEnd;++i)fluid.instantiateEvents(shadows[i]);var workflowShadows=fluid.findWorkflowShadows(shadows,blockStart,blockEnd,workflowRecord);if(transRec.maximumWorkflowStage=Math.max(transRec.maximumWorkflowStage,workflowIndex+1),workflowShadows.length>0){var workflow=workflowRecord.workflowOptions,workflowFunc=fluid.getGlobalValue(workflow.funcName),sequence=sequencer.sources;if(workflow.waitIO&&sequence.push(fluid.waitPendingIOTask(transRec)),"global"===workflowRecord.workflowType){var globalWorkflowTask=function(){workflowFunc(workflowShadows,transRec)};globalWorkflowTask.taskName=workflowRecord.namespace,sequence.push(globalWorkflowTask)}else{var localWorkflowTask=function(){"concludeComponentInit"===workflowRecord.namespace&&(sequencer.hasStartedConcludeInit=!0),workflowShadows.forEach((function(shadow){workflowFunc(shadow,transRec)}))};localWorkflowTask.taskName=workflowRecord.namespace,sequence.push(localWorkflowTask)}workQueued=!0}})),transRec.maximumWorkflowStage===transRec.workflowStageBreak&&(transRec.maximumWorkflowStage=0,transRec.restartLastWorkflowShadow=transRec.lastWorkflowShadow),workQueued},fluid.applyWorkflowPhase=function(transRec,sequencer){var shadows=transRec.outputShadows;if(shadows.length>transRec.lastWorkflowShadow&&transRec.maximumWorkflowStage>0)return fluid.enqueueWorkflowBlock(transRec,shadows,0,transRec.maximumWorkflowStage,transRec.lastWorkflowShadow,shadows.length,sequencer),!0;if(transRec.maximumWorkflowStage<transRec.workflowStageBreak)for(var workflowStage=transRec.maximumWorkflowStage;workflowStage<transRec.workflowStageBreak;++workflowStage){var workQueued=fluid.enqueueWorkflowBlock(transRec,shadows,workflowStage,workflowStage+1,transRec.restartLastWorkflowShadow,shadows.length,sequencer);if(workQueued)return workQueued}},fluid.commitPotentiaePhase=function(transRec){var pendingPotentiae=transRec.pendingPotentiae;pendingPotentiae.destroys.forEach((function(potentia){potentia.applied||(potentia.applied=!0,--pendingPotentiae.activeCount,fluid.operateDestroyPotentia(transRec,potentia))}));for(var i=0;i<pendingPotentiae.creates.length;++i){var potentia=pendingPotentiae.creates[i];potentia.applied||("create"===potentia.type?fluid.operateCreatePotentia(transRec,potentia):"distributeOptions"===potentia.type?(potentia.distributions.forEach((function(distro){fluid.distributeOptionsOne(distro.that,distro.record,distro.targetRef,distro.selector,distro.context)})),potentia.applied=!0,--pendingPotentiae.activeCount):fluid.fail("Unrecognised potentia type "+potentia.type))}},fluid.isPopulatedPotentiaList=function(potentiaList){return potentiaList.activeCount>0},fluid.commitPotentiae=function(transactionId,resumeSequencer){var instantiator=fluid.globalInstantiator,transRec=instantiator.treeTransactions[transactionId];++transRec.commitDepth;var lastWorkflowShadow=transRec.lastWorkflowShadow,rootSequencer=transRec.rootSequencer,sequencer=resumeSequencer;if(!sequencer){var topSequencer=fluid.getImmediate(fluid.peek(rootSequencer.sources),["sequencer"]);!topSequencer||topSequencer.hasStartedConcludeInit||topSequencer.promise.disposition?((sequencer=fluid.promise.makeSequencer([],{},fluid.promise.makeSequenceStrategy())).promise.sequencer=sequencer,rootSequencer.sources.push(sequencer.promise)):sequencer=topSequencer}return fluid.tryCatch((function(){fluid.isPopulatedPotentiaList(transRec.pendingPotentiae)&&fluid.commitPotentiaePhase(transRec),fluid.applyWorkflowPhase(transRec,sequencer)&&sequencer.sources.push((function(){sequencer.hasStartedConcludeInit?sequencer===fluid.peek(rootSequencer.sources).sequencer&&fluid.commitPotentiae(transactionId,null):fluid.commitPotentiae(transactionId,sequencer)})),sequencer.sequenceStarted||fluid.promise.resumeSequence(sequencer),rootSequencer.sequenceStarted||fluid.promise.resumeSequence(rootSequencer)}),(function(e){transRec.promise.disposition||transRec.promise.reject(e)})),--transRec.commitDepth,0!==transRec.commitDepth||resumeSequencer||(instantiator.currentTreeTransactionId=null),transRec.outputShadows[lastWorkflowShadow]},fluid.pushPotentia=function(potentiaList,instantiator,potentia){var segs=potentia.segs=potentia.segs||instantiator.parseToSegments(potentia.path),path=potentia.path=instantiator.composeSegments.apply(null,segs);if("destroy"===potentia.type)potentiaList.destroys.push(potentia),potentiaList.activeCount++,fluid.remove_if(potentiaList.creates,(function(create){if(!create.applied&&create.path.startsWith(potentia.path))return potentiaList.activeCount--,!0}));else{var newPotentia=potentia;"create"===potentia.type&&(newPotentia=fluid.pushCreatePotentia(potentiaList,path,potentia)),newPotentia&&(potentiaList.creates.push(potentia),potentiaList.activeCount++)}},fluid.pathForComponent=function(component,instantiator){var shadow=(instantiator=instantiator||fluid.getInstantiator(component)||fluid.globalInstantiator).idToShadow[component.id];return shadow?instantiator.parseEL(shadow.path):null},fluid.currentTreeTransaction=function(){var instantiator=fluid.globalInstantiator;return instantiator.treeTransactions[instantiator.currentTreeTransactionId]},fluid.clearTreeTransaction=function(transRec){transRec.rootSequencer=fluid.promise.makeSequencer([],{},fluid.promise.makeSequenceStrategy()),transRec.restoreRecords=fluid.blankPotentiaList(),transRec.initModelTransaction={},transRec.outputShadows=[],transRec.lastWorkflowShadow=0,transRec.maximumWorkflowStage=0,transRec.restartLastWorkflowShadow=0,transRec.deferredDistributions=[]},fluid.beginTreeTransaction=function(transactionOptions){var instantiator=fluid.globalInstantiator;instantiator.currentTreeTransactionId&&fluid.fail("Attempt to start new tree transaction when transaction "+instantiator.currentTreeTransactionId+" is already active");var transactionId=instantiator.currentTreeTransactionId=fluid.allocateGuid(),transRec=$.extend({transactionId:transactionId,workflowStageBreak:void 0,pendingPotentiae:fluid.blankPotentiaList(),commitDepth:0,cancelled:!1,cancellationError:null,pendingIO:[]},transactionOptions);fluid.clearTreeTransaction(transRec),transRec.promise=transRec.rootSequencer.promise;var onConclude=function(){instantiator.events.onEndTreeTransaction.fire(transRec),transRec.rootSequencer.promise.disposition&&(instantiator.currentTreeTransactionId=null,delete instantiator.treeTransactions[transactionId])};transRec.promise.then(onConclude,(function(err){transRec.cancelled||(delete transRec.rootSequencer,instantiator.inEvaluationPaths.length=0,fluid.cancelTreeTransaction(transactionId,instantiator,err),onConclude())})),instantiator.treeTransactions[transactionId]=transRec;try{transRec.workflowStageBreak=fluid.lookupWorkflowStage(transRec.breakAt)}catch(e){transRec.promise.reject(e)}return instantiator.events.onBeginTreeTransaction.fire(transRec),transRec},fluid.registerPotentia=function(potentia,transactionId){var instantiator=fluid.globalInstantiator;(transactionId=transactionId||instantiator.currentTreeTransactionId)||(transactionId=fluid.beginTreeTransaction().transactionId);var transRec=instantiator.treeTransactions[transactionId];return fluid.pushPotentia(transRec.pendingPotentiae,instantiator,potentia),transRec},fluid.cancelTreeTransaction=function(transactionId,instantiator){var transRec=instantiator.treeTransactions[transactionId];if(transRec)try{transRec.pendingPotentiae=transRec.restoreRecords,transRec.cancelled=!0,fluid.clearTreeTransaction(transRec),fluid.commitPotentiae(transactionId)}catch(e){throw fluid.log(fluid.logLevel.FAIL,"Fatal error cancelling transaction "+transactionId+": destroying all affected paths"),transRec.restoreRecords.creates.forEach((function(potentia){instantiator.clearComponent(potentia.parentThat,potentia.memberName,potentia.parentThat[potentia.memberName])})),e}},fluid.constructChild=function(parent,memberName,options){var path=fluid.pathForComponent(parent).concat([memberName]);return fluid.construct(path,options)},fluid.construct=function(path,componentOptions,constructOptions){constructOptions=constructOptions||{};var transRec=fluid.registerPotentia({path:path,type:"destroy"},constructOptions.transactionId),record={recordType:"user"};fluid.each(fluid.componentRecordExpected,(function(troo,key){void 0!==componentOptions[key]&&(record[key]=componentOptions[key])})),record.options=componentOptions;var potentia={path:path,type:"create",localRecord:constructOptions.localRecord,records:[record]};return fluid.registerPotentia(potentia,transRec.transactionId),constructOptions.transactionId||fluid.commitPotentiae(transRec.transactionId),fluid.adaptTransactionFailure(transRec),constructOptions.returnTransaction?transRec:fluid.getImmediate(fluid.rootComponent,potentia.segs)},fluid.destroy=function(path,instantiator){0===(instantiator=instantiator||fluid.globalInstantiator).parseToSegments(path).length&&fluid.fail("Cannot destroy the root component");var transRec=fluid.registerPotentia({path:path,type:"destroy"});return fluid.commitPotentiae(transRec.transactionId),transRec},fluid.constructSingle=function(parentPath,options,instantiator){instantiator=instantiator||fluid.globalInstantiator,parentPath=parentPath||"";var segs=fluid.model.parseToSegments(parentPath,instantiator.parseEL,!0);"string"==typeof options&&(options={type:options});var type=options.type;type||fluid.fail("Cannot construct singleton object without a type entry");var gradeNames=(options=$.extend({},options)).gradeNames=fluid.makeArray(options.gradeNames);gradeNames.unshift(type),options.type="fluid.component",0===segs.length&&gradeNames.push("fluid.resolveRoot");var memberName=fluid.typeNameToMemberName(options.singleRootType||type);return segs.push(memberName),fluid.construct(segs,options)},fluid.destroySingle=function(parentPath,typeName,instantiator){instantiator=instantiator||fluid.globalInstantiator;var segs=fluid.model.parseToSegments(parentPath,instantiator.parseEL,!0),memberName=fluid.typeNameToMemberName(typeName);segs.push(memberName),fluid.destroy(segs,instantiator)},fluid.makeGradeLinkage=function(linkageName,inputNames,outputNames){fluid.defaults(linkageName,{gradeNames:"fluid.component",distributeOptions:{record:outputNames,target:"{/ "+inputNames.join("&")+"}.options.gradeNames"}}),fluid.constructSingle([],linkageName)},fluid.componentForPath=function(path){return fluid.globalInstantiator.pathToComponent[fluid.isArrayable(path)?path.join("."):path]},fluid.thisistToApplicable=function(record,recthis,that){return{apply:function(noThis,args){var resolvedThis=fluid.expandImmediate(recthis,that);"string"==typeof resolvedThis&&(resolvedThis=fluid.getGlobalValue(resolvedThis)),resolvedThis||fluid.fail("Could not resolve reference "+recthis+" to a value");var resolvedFunc=resolvedThis[record.method];return"function"!=typeof resolvedFunc&&fluid.fail("Object ",resolvedThis," at reference "+recthis+" has no member named "+record.method+" which is a function "),fluid.passLogLevel(fluid.logLevel.TRACE)&&fluid.log(fluid.logLevel.TRACE,"Applying arguments ",args," to method "+record.method+" of instance ",resolvedThis),resolvedFunc.apply(resolvedThis,args)}}},fluid.changeToApplicable=function(record,that){fluid.getForComponent(that,"applier");var parsed=fluid.parseValidModelReference(that,"changePath listener record",record.changePath);return fluid.materialiseModelPath(parsed.that,parsed.modelSegs),{apply:function(noThis,args,localRecord,mergeRecord){var value;record.func||record.funcName?value=fluid.makeInvoker(that,fluid.filterKeys(record,["func","funcName","args"]),"changePath listener record",localRecord)():value=fluid.expandImmediate(record.value,that,fluid.extend(localRecord,{arguments:args}));var sources=mergeRecord&&mergeRecord.source&&mergeRecord.source.length?fluid.makeArray(record.source).concat(mergeRecord.source):record.source;parsed.applier.change(parsed.modelSegs,value,record.type,sources)}}},fluid.recordToApplicable=function(record,that,standard){if(void 0!==record.changePath)return fluid.changeToApplicable(record,that,standard);var recthis=record.this;return record.method^recthis&&fluid.fail("Record ",that,' must contain both entries "method" and "this" if it contains either'),record.method?fluid.thisistToApplicable(record,recthis,that):null},fluid.getGlobalValueNonComponent=function(funcName,context){var defaults=fluid.defaults(funcName);return defaults&&fluid.hasGrade(defaults,"fluid.component")&&fluid.fail("Error in function specification - cannot invoke function "+funcName+" in the context of "+context+": component creator functions can only be used as subcomponents"),fluid.getGlobalValue(funcName)},fluid.makeInvoker=function(that,invokerec,name,localRecord){void 0===(invokerec=fluid.upgradePrimitiveFunc(invokerec)).args||invokerec.args===fluid.NO_ARGUMENTS||fluid.isArrayable(invokerec.args)||(invokerec.args=fluid.makeArray(invokerec.args));var func=fluid.recordToApplicable(invokerec,that),invokePre=fluid.preExpand(invokerec.args);localRecord=localRecord||{};var expandOptions=fluid.makeStackResolverOptions(that,localRecord,!0);return(func=func||(invokerec.funcName?fluid.getGlobalValueNonComponent(invokerec.funcName,"an invoker"):fluid.expandImmediate(invokerec.func,that)))&&func.apply?func===fluid.notImplemented&&fluid.fail("Error constructing component ",that," - the invoker named "+name+" which was defined in grade "+invokerec.componentSource+" needs to be overridden with a concrete implementation"):fluid.fail("Error in invoker record: could not resolve members func, funcName or method to a function implementation - got "+func+" from ",invokerec),function(){var togo,finalArgs;return!1===fluid.defeatLogging&&fluid.pushActivity("invokeInvoker","invoking invoker with name %name and record %record holding component %that",{name:name,record:invokerec,that:that}),"destroyed"===that.lifecycleStatus?fluid.log(fluid.logLevel.WARN,"Ignoring call to invoker "+name+" of component ",that," which has been destroyed"):(localRecord.arguments=arguments,void 0===invokerec.args||invokerec.args===fluid.NO_ARGUMENTS?finalArgs=arguments:(fluid.expandImmediateImpl(invokePre,expandOptions),finalArgs=invokePre.source),togo=func.apply(null,finalArgs)),!1===fluid.defeatLogging&&fluid.popActivity(),togo}},fluid.event.makeTrackedListenerAdder=function(source){var shadow=fluid.shadowForComponent(source);return function(event){return{addListener:function(listener,namespace,priority,softNamespace,listenerId){fluid.recordListener(event,listener,shadow,listenerId),event.addListener.apply(null,arguments)}}}},fluid.event.listenerEngine=function(eventSpec,callback,adder){var argstruc={};function checkFire(){if(!fluid.find(eventSpec,(function(value,key){if(void 0===argstruc[key])return!0}))){var oldstruc=argstruc;argstruc={},callback(oldstruc)}}fluid.each(eventSpec,(function(event,eventName){adder(event).addListener((function(){argstruc[eventName]=fluid.makeArray(arguments),checkFire()}))}))},fluid.event.dispatchListener=function(that,listener,eventName,eventSpec,wrappedArgs){void 0===eventSpec.args||eventSpec.args===fluid.NO_ARGUMENTS||fluid.isArrayable(eventSpec.args)||(eventSpec.args=fluid.makeArray(eventSpec.args)),listener=fluid.event.resolveListener(listener);var dispatchPre=fluid.preExpand(eventSpec.args),localRecord={},expandOptions=fluid.makeStackResolverOptions(that,localRecord,!0),togo=function(){!1===fluid.defeatLogging&&fluid.pushActivity("dispatchListener","firing to listener to event named %eventName of component %that",{eventName:eventName,that:that});var finalArgs,args=wrappedArgs?arguments[0]:arguments;localRecord.arguments=args,void 0!==eventSpec.args&&eventSpec.args!==fluid.NO_ARGUMENTS?(fluid.expandImmediateImpl(dispatchPre,expandOptions),finalArgs=dispatchPre.source):finalArgs=args;var togo=listener.apply(null,finalArgs);return!1===fluid.defeatLogging&&fluid.popActivity(),togo};return fluid.event.impersonateListener(listener,togo),togo},fluid.event.resolveSoftNamespace=function(key){if("string"!=typeof key)return null;var lastpos=Math.max(key.lastIndexOf("."),key.lastIndexOf("}"));return key.substring(lastpos+1)},fluid.event.resolveListenerRecord=function(lisrec,that,eventName,namespace,standard){var badRec=function(record,extra){fluid.fail("Error in listener record - could not resolve reference ",record,' to a listener or firer. Did you miss out "events." when referring to an event firer?'+extra)};fluid.pushActivity("resolveListenerRecord","resolving listener record for event named %eventName for component %that",{eventName:eventName,that:that});var records=fluid.makeArray(lisrec),togo={records:fluid.transform(records,(function(record){var expanded=fluid.isPrimitive(record)||record.expander?{listener:record}:fluid.copy(record),methodist=fluid.recordToApplicable(record,that,standard);expanded.listener=methodist||(expanded.listener||expanded.func||expanded.funcName),expanded.listener||badRec(record,' Listener record must contain a member named "listener", "func", "funcName" or "method"');var softNamespace=record.method?fluid.event.resolveSoftNamespace(record.this)+"."+record.method:fluid.event.resolveSoftNamespace(expanded.listener);expanded.namespace||namespace||!softNamespace||(expanded.softNamespace=!0,expanded.namespace=(record.componentSource?record.componentSource:that.typeName)+"."+softNamespace);var listener=expanded.listener=fluid.expandOptions(expanded.listener,that);listener||badRec(record,"");var firer=!1;return"fluid.event.firer"===listener.typeName&&(listener=listener.fire,firer=!0),expanded.listener=standard&&(expanded.args&&"fluid.notImplemented"!==listener||firer)?fluid.event.dispatchListener(that,listener,eventName,expanded):listener,expanded.listenerId=fluid.allocateGuid(),expanded})),adderWrapper:standard?fluid.event.makeTrackedListenerAdder(that):null};return fluid.popActivity(),togo},fluid.event.expandOneEvent=function(that,event){var origin;return(origin="string"==typeof event&&"{"!==event.charAt(0)?fluid.getForComponent(that,["events",event]):fluid.expandOptions(event,that))&&"fluid.event.firer"===origin.typeName||fluid.fail("Error in event specification - could not resolve base event reference ",event," to an event firer: got ",origin),origin},fluid.event.expandEvents=function(that,event){return"string"==typeof event?fluid.event.expandOneEvent(that,event):fluid.transform(event,(function(oneEvent){return fluid.event.expandOneEvent(that,oneEvent)}))},fluid.event.resolveEvent=function(that,eventName,eventSpec){fluid.pushActivity("resolveEvent","resolving event with name %eventName attached to component %that",{eventName:eventName,that:that});var adder=fluid.event.makeTrackedListenerAdder(that);"string"==typeof eventSpec&&(eventSpec={event:eventSpec});var event="fluid.event.firer"===eventSpec.typeName?eventSpec:eventSpec.event||eventSpec.events;event||fluid.fail("Event specification for event with name "+eventName+" does not include a base event specification: ",eventSpec);var firer,origin="fluid.event.firer"===event.typeName?event:fluid.event.expandEvents(that,event),isMultiple="fluid.event.firer"!==origin.typeName;if(eventSpec.args||isMultiple){firer=fluid.makeEventFirer({name:" [composite] "+fluid.event.nameEvent(that,eventName)});var dispatcher=fluid.event.dispatchListener(that,firer.fire,eventName,eventSpec,isMultiple);isMultiple?fluid.event.listenerEngine(origin,dispatcher,adder):adder(origin).addListener(dispatcher)}else(firer={typeName:"fluid.event.firer"}).fire=function(){var outerArgs=fluid.makeArray(arguments);fluid.pushActivity("fireSynthetic","firing synthetic event %eventName ",{eventName:eventName});var togo=origin.fire.apply(null,outerArgs);return fluid.popActivity(),togo},firer.addListener=function(listener,namespace,priority,softNamespace,listenerId){var dispatcher=fluid.event.dispatchListener(that,listener,eventName,eventSpec);adder(origin).addListener(dispatcher,namespace,priority,softNamespace,listenerId)},firer.removeListener=function(listener){origin.removeListener(listener)},firer.originEvent=origin;return fluid.popActivity(),firer},fluid.coerceToPrimitive=function(string){return"false"!==string&&("true"===string||(isFinite(string)?Number(string):string))},fluid.compactStringToRec=function(string,type){var openPos=string.indexOf("("),closePos=string.indexOf(")");if((-1===openPos^-1===closePos||openPos>closePos)&&fluid.fail("Badly-formed compact "+type+" record without matching parentheses: "+string),-1!==openPos&&-1!==closePos){var trail=string.substring(closePos+1);""!==trail.trim()&&fluid.fail("Badly-formed compact "+type+" record "+string+" - unexpected material following close parenthesis: "+trail);var prefix=string.substring(0,openPos),body=string.substring(openPos+1,closePos).trim(),args=""===body?[]:fluid.transform(body.split(","),(function(str){return str.trim()}),fluid.coerceToPrimitive),togo=fluid.upgradePrimitiveFunc(prefix,null);return togo.args=args,togo}return"expander"===type&&fluid.fail("Badly-formed compact expander record without parentheses: "+string),string},fluid.expandPrefix="@expand:",fluid.expandCompactString=function(string,active){var rec=string;if(0===string.indexOf(fluid.expandPrefix)){var rem=string.substring(fluid.expandPrefix.length);rec={expander:fluid.compactStringToRec(rem,"expander")}}else active&&(rec=fluid.compactStringToRec(string,active));return rec};var singularPenRecord={listeners:"listener",modelListeners:"modelListener"},singularRecord=$.extend({invokers:"invoker"},singularPenRecord);function regenerateCursor(source,segs,limit,sourceStrategy){for(var i=0;i<limit;++i)source=sourceStrategy(source,segs[i],i,fluid.makeArray(segs));return source}fluid.expandCompactRec=function(segs,target,source){fluid.guardCircularExpansion(segs,segs.length);var pen=fluid.peek(segs),active=singularRecord[pen];!active&&segs.length>1&&(active=singularPenRecord[segs[segs.length-2]]),fluid.each(source,(function(value,key){if(fluid.isPlainObject(value))return target[key]=fluid.freshContainer(value),segs.push(key),fluid.expandCompactRec(segs,target[key],value),void segs.pop();"string"==typeof value&&(value=fluid.expandCompactString(value,active)),target[key]=value}))},fluid.expandCompact=function(options){var togo={};return fluid.expandCompactRec([],togo,options),togo},fluid.extractEL=function(string,options){if("ALL"===options.ELstyle||"{}"===options.ELstyle)return string;if(1===options.ELstyle.length){if(string.charAt(0)===options.ELstyle)return string.substring(1)}else if("${}"===options.ELstyle){var i1=string.indexOf("${"),i2=string.lastIndexOf("}");if(0===i1&&-1!==i2)return string.substring(2,i2)}},fluid.extractELWithContext=function(string,options){var EL=fluid.extractEL(string,options);return fluid.isIoCReference(EL)?fluid.parseContextReference(EL):"{}"===options.ELstyle?null:EL?{path:EL}:EL},fluid.parseContextReference=function(reference,index,delimiter){index=index||0;var endcpos,context,nested,isNested="{"===reference.charAt(index+1);-1===(endcpos=isNested?(nested=fluid.parseContextReference(reference,index+1,"}")).endpos:reference.indexOf("}",index+1))&&fluid.fail('Cannot parse context reference "'+reference+'": Malformed context reference without }'),context=isNested?nested:reference.substring(index+1,endcpos);var endpos=delimiter?reference.indexOf(delimiter,endcpos+1):reference.length,path=reference.substring(endcpos+1,endpos);return"."===path.charAt(0)&&(path=path.substring(1)),{context:context,path:path,endpos:endpos}},fluid.renderContextReference=function(parsed){var context=parsed.context;return"{"+(fluid.isPrimitive(context)?context:fluid.renderContextReference(context))+"}"+(parsed.path?"."+parsed.path:"")},fluid.resolveContextValue=function(string,options){function fetch(parsed){fluid.pushActivity("resolveContextValue","resolving context value %parsed",{parsed:parsed});var togo=options.fetcher(parsed);return fluid.pushActivity("resolvedContextValue","resolved value %parsed to value %value",{parsed:parsed,value:togo}),fluid.popActivity(2),togo}var parsed;if(options.bareContextRefs&&fluid.isIoCReference(string))return fetch(parsed=fluid.parseContextReference(string));if(options.ELstyle&&"${}"!==options.ELstyle&&(parsed=fluid.extractELWithContext(string,options)))return fetch(parsed);if("${}"===options.ELstyle)for(;"string"==typeof string;){var i1=string.indexOf("${"),i2=string.indexOf("}",i1+2);if(-1===i1||-1===i2)break;"{"===string.charAt(i1+2)?i2=(parsed=fluid.parseContextReference(string,i1+2,"}")).endpos:parsed={path:string.substring(i1+2,i2)};var subs=fetch(parsed),all=0===i1&&i2===string.length-1;if(null==subs)return subs;string=all?subs:string.substring(0,i1)+subs+string.substring(i2+1)}return string},fluid.fetchExpandChildren=function(target,i,segs,source,mergePolicy,options){if(source.expander){var expanded=fluid.expandExpander(target,source,options);if(fluid.isPrimitive(expanded)||!fluid.isPlainObject(expanded)||fluid.isArrayable(expanded)^fluid.isArrayable(target))return expanded;$.extend(!0,target,expanded)}return fluid.each(source,(function(newSource,key){void 0===newSource?target[key]=void 0:"expander"!==key&&(segs[i]=key,!0!==fluid.getImmediate(options.exceptions,segs,i)&&options.strategy(target,key,i+1,segs,source,mergePolicy))})),target},fluid.isUnexpandable=function(source){return fluid.isPrimitive(source)||!fluid.isPlainObject(source)},fluid.expandSource=function(options,target,i,segs,deliverer,source,policy,recurse){var expanded,isTrunk,thisPolicy=fluid.derefMergePolicy(policy);return"string"!=typeof source||thisPolicy.noexpand?thisPolicy.noexpand||fluid.isUnexpandable(source)?expanded=fluid.copy(source):source.expander?expanded=fluid.expandExpander(deliverer,source,options):(expanded=fluid.freshContainer(source),isTrunk=!0):options.defaultEL&&"{"!==source.charAt(0)?expanded=source:(fluid.pushActivity("expandContextValue","expanding context value %source held at path %path",{source:source,path:fluid.path.apply(null,segs.slice(0,i))}),expanded=fluid.copy(fluid.resolveContextValue(source,options)),fluid.popActivity(1)),expanded!==fluid.NO_VALUE&&deliverer(expanded),isTrunk&&recurse(expanded,source,i,segs,policy),expanded},fluid.guardCircularExpansion=function(segs,i){i>fluid.strategyRecursionBailout&&fluid.fail("Overflow/circularity in options expansion, current path is ",segs," at depth ",i,' - please ensure options are not circularly connected, or protect from expansion using the "noexpand" policy or expander')},fluid.makeExpandStrategy=function(options){var recurse=function(target,source,i,segs,policy){return fluid.fetchExpandChildren(target,i||0,segs||[],source,policy,options)},strategy=function(target,name,i,segs,source,policy){if(fluid.guardCircularExpansion(segs,i),target){if(target.hasOwnProperty(name))return target[name];void 0===source&&(source=regenerateCursor(options.source,segs,i-1,options.sourceStrategy),policy=regenerateCursor(options.mergePolicy,segs,i-1,fluid.concreteTrundler));var thisSource=options.sourceStrategy(source,name,i,segs),thisPolicy=fluid.concreteTrundler(policy,name);return fluid.expandSource(options,target,i,segs,(function(value){target[name]=value}),thisSource,thisPolicy,recurse)}};return options.recurse=recurse,options.strategy=strategy,strategy},fluid.defaults("fluid.makeExpandOptions",{ELstyle:"${}",bareContextRefs:!0,target:fluid.inCreationMarker}),fluid.makeExpandOptions=function(source,options){return(options=$.extend({},fluid.rawDefaults("fluid.makeExpandOptions"),options)).defaultEL="${}"===options.ELStyle&&options.bareContextRefs,options.expandSource=function(source){return fluid.expandSource(options,null,0,[],fluid.identity,source,options.mergePolicy,!1)},fluid.isUnexpandable(source)?(options.strategy=fluid.concreteTrundler,options.initter=fluid.identity,options.target="string"==typeof source?(options.defer?fluid.copy:fluid.identity)(options.expandSource(source)):source,options.immutableTarget=!0):(options.source=source,options.target=fluid.freshContainer(source),options.sourceStrategy=options.sourceStrategy||fluid.concreteTrundler,fluid.makeExpandStrategy(options),options.initter=function(){options.target=fluid.fetchExpandChildren(options.target,0,[],options.source,options.mergePolicy,options)}),options},fluid.expand=function(source,options){var expandOptions=fluid.makeExpandOptions(source,options);return expandOptions.initter(),expandOptions.target},fluid.preExpandRecurse=function(root,source,holder,member,rootSegs){function pushExpander(expander){root.expanders.push({expander:expander,holder:holder,member:member}),delete holder[member]}if(fluid.guardCircularExpansion(rootSegs,rootSegs.length),fluid.isIoCReference(source)){var parsed=fluid.parseContextReference(source),segs=fluid.model.parseEL(parsed.path);pushExpander({typeFunc:fluid.expander.fetch,context:parsed.context,segs:segs})}else fluid.isPlainObject(source)&&(source.expander?(source.expander.typeFunc=fluid.getGlobalValue(source.expander.type||"fluid.expander.invokeFunc"),pushExpander(source.expander)):fluid.each(source,(function(value,key){rootSegs.push(key),fluid.preExpandRecurse(root,value,source,key,rootSegs),rootSegs.pop()})))},fluid.preExpand=function(source){var root={expanders:[],source:fluid.isUnexpandable(source)?source:fluid.copy(source)};return fluid.preExpandRecurse(root,root.source,root,"source",[]),root},fluid.expandImmediate=function(source,that,localRecord,noproxy){var options=fluid.makeStackResolverOptions(that,localRecord,!0);options.noproxy=!!noproxy;var root=fluid.preExpand(source);return fluid.expandImmediateImpl(root,options),root.source},fluid.expandImmediateImpl=function(root,options){for(var expanders=root.expanders,i=0;i<expanders.length;++i){var expander=expanders[i];expander.holder[expander.member]=expander.expander.typeFunc(null,expander,options)}},fluid.expandExpander=function(deliverer,source,options){var expander=fluid.getGlobalValue(source.expander.type||"fluid.expander.invokeFunc");return expander||fluid.fail("Unknown expander with type "+source.expander.type),expander(deliverer,source,options)},fluid.proxyComponentHandler=function(target,prop){return prop===Symbol.toStringTag?Object.prototype.toString.call(target):prop in target?target[prop]:fluid.getForComponent(target,prop)},fluid.proxyComponent=function(component){var shadow=fluid.shadowForComponent(component);return shadow.proxy||(shadow.proxy=new Proxy(component,{get:fluid.proxyComponentHandler})),shadow.proxy},fluid.possiblyProxyComponent=function(value){return fluid.isComponent(value)&&"treeConstructed"!==value.lifecycleStatus?fluid.proxyComponent(value):value},fluid.proxyComponentArgs=function(args){args.forEach((function(arg,i){args[i]=fluid.possiblyProxyComponent(arg)}))},fluid.registerNamespace("fluid.expander"),fluid.expander.fetch=function(deliverer,source,options){var localRecord=options.localRecord,context=source.expander.context,segs=source.expander.segs,inLocal=void 0!==localRecord[context],contextStatus=options.contextThat.lifecycleStatus,fast="treeConstructed"===contextStatus||"destroyed"===contextStatus,component=inLocal?localRecord[context]:fluid.resolveContext(context,options.contextThat,fast);if(component){var root=component;if(inLocal||"constructing"!==component.lifecycleStatus)for(var i=0;i<segs.length;++i)root=root?root[segs[i]]:void 0;else root=fluid.getForComponent(component,segs);return void 0!==root||inLocal||(root=fluid.getForComponent(component,segs)),fast||options.noproxy||!fluid.isComponent(root)?root:fluid.proxyComponent(root)}segs.length>0&&fluid.triggerMismatchedPathError(source.expander,options.contextThat)},fluid.expander.invokeFunc=function(deliverer,source,options){var expander=source.expander,args=fluid.makeArray(expander.args),whichFuncEntry=expander.func?"func":expander.funcName?"funcName":null;expander.args=args,args=options.recurse?options.recurse([],args):(expander=fluid.expandImmediate(expander,options.contextThat,options.localRecord,expander.noproxy)).args,expander.noproxy||fluid.proxyComponentArgs(args);var funcEntry=expander[whichFuncEntry],func=(options.expandSource?options.expandSource(funcEntry):funcEntry)||fluid.recordToApplicable(expander,options.contextThat);return"string"==typeof func&&(func=fluid.getGlobalValue(func)),func||fluid.fail("Error in expander record ",source.expander,": "+source.expander[whichFuncEntry]+" could not be resolved to a function for component ",options.contextThat),func.apply(null,args)},fluid.expander.noexpand=function(deliverer,source){return source.expander.value?source.expander.value:source.expander.tree},fluid.noexpand=fluid.expander.noexpand,fluid.model.makeEnvironmentStrategy=function(environment){return function(root,segment,index){return 0===index&&environment[segment]?environment[segment]:void 0}},fluid.model.defaultCreatorStrategy=function(root,segment){if(void 0===root[segment])return root[segment]={},root[segment]},fluid.model.defaultFetchStrategy=function(root,segment){return root[segment]},fluid.model.funcResolverStrategy=function(root,segment){if(root.resolvePathSegment)return root.resolvePathSegment(segment)},fluid.model.traverseWithStrategy=function(root,segs,initPos,config,uncess){for(var strategies=config.strategies,limit=segs.length-uncess,i=initPos;i<limit;++i){if(!root)return root;for(var accepted,j=0;j<strategies.length&&void 0===(accepted=strategies[j](root,segs[i],i+1,segs));++j);accepted===fluid.NO_VALUE&&(accepted=void 0),root=accepted}return root},fluid.model.getValueAndSegments=function(root,EL,config,initSegs){return fluid.model.accessWithStrategy(root,EL,fluid.NO_VALUE,config,initSegs,!0)},fluid.model.makeTrundler=function(config){return function(valueSeg,EL){return fluid.model.getValueAndSegments(valueSeg.root,EL,config,valueSeg.segs)}},fluid.model.getWithStrategy=function(root,EL,config,initSegs){return fluid.model.accessWithStrategy(root,EL,fluid.NO_VALUE,config,initSegs)},fluid.model.setWithStrategy=function(root,EL,newValue,config,initSegs){fluid.model.accessWithStrategy(root,EL,newValue,config,initSegs)},fluid.model.accessWithStrategy=function(root,EL,newValue,config,initSegs,returnSegs){if(fluid.isPrimitive(EL)||fluid.isArrayable(EL))return fluid.model.accessImpl(root,EL,newValue,config,initSegs,returnSegs,fluid.model.traverseWithStrategy);var key=EL.type||"default",resolver=config.resolvers[key];resolver||fluid.fail("Unable to find resolver of type "+key);var trundler=fluid.model.makeTrundler(config),valueSeg={root:root,segs:initSegs};return valueSeg=resolver(valueSeg,EL,trundler),EL.path&&valueSeg&&(valueSeg=trundler(valueSeg,EL.path)),returnSegs?valueSeg:valueSeg?valueSeg.root:void 0},fluid.registerNamespace("fluid.pathUtil"),fluid.pathUtil.getPathSegmentImpl=function(accept,path,i){var segment=null;accept&&(segment="");for(var escaped=!1,limit=path.length;i<limit;++i){var c=path.charAt(i);if(escaped)escaped=!1,null!==segment&&(segment+=c);else{if("."===c)break;"\\"===c?escaped=!0:null!==segment&&(segment+=c)}}return null!==segment&&(accept[0]=segment),i};var globalAccept=[];fluid.pathUtil.parseEL=function(path){for(var togo=[],index=0,limit=path.length;index<limit;){var firstdot=fluid.pathUtil.getPathSegmentImpl(globalAccept,path,index);togo.push(globalAccept[0]),index=firstdot+1}return togo},fluid.pathUtil.composeSegment=function(prefix,toappend){toappend=toappend.toString();for(var i=0;i<toappend.length;++i){var c=toappend.charAt(i);"."!==c&&"\\"!==c&&"}"!==c||(prefix+="\\"),prefix+=c}return prefix},fluid.pathUtil.escapeSegment=function(segment){return fluid.pathUtil.composeSegment("",segment)},fluid.pathUtil.composePath=function(prefix,suffix){return 0!==prefix.length&&(prefix+="."),fluid.pathUtil.composeSegment(prefix,suffix)},fluid.pathUtil.composeSegments=function(){for(var path="",i=0;i<arguments.length;++i)path=fluid.pathUtil.composePath(path,arguments[i]);return path},fluid.pathUtil.matchSegments=function(toMatch,segs,start,end){if(end-start!==toMatch.length)return!1;for(var i=start;i<end;++i)if(segs[i]!==toMatch[i-start])return!1;return!0},fluid.model.unescapedParser={parse:fluid.model.parseEL,compose:fluid.model.composeSegments},fluid.model.defaultGetConfig={parser:fluid.model.unescapedParser,strategies:[fluid.model.funcResolverStrategy,fluid.model.defaultFetchStrategy]},fluid.model.defaultSetConfig={parser:fluid.model.unescapedParser,strategies:[fluid.model.funcResolverStrategy,fluid.model.defaultFetchStrategy,fluid.model.defaultCreatorStrategy]},fluid.model.escapedParser={parse:fluid.pathUtil.parseEL,compose:fluid.pathUtil.composeSegments},fluid.model.escapedGetConfig={parser:fluid.model.escapedParser,strategies:[fluid.model.defaultFetchStrategy]},fluid.model.escapedSetConfig={parser:fluid.model.escapedParser,strategies:[fluid.model.defaultFetchStrategy,fluid.model.defaultCreatorStrategy]},fluid.stronglyConnected=function(vertices,accessor){var that={stack:[],accessor:accessor,components:[],index:0};return vertices.forEach((function(vertex){delete vertex.lowIndex,delete vertex.tarjanIndex,delete vertex.onStack})),vertices.forEach((function(vertex){void 0===vertex.tarjanIndex&&fluid.stronglyConnectedOne(vertex,that)})),that.components},fluid.stronglyConnectedOne=function(vertex,that){if(vertex.tarjanIndex=that.index,vertex.lowIndex=that.index,++that.index,that.stack.push(vertex),vertex.onStack=!0,that.accessor(vertex).forEach((function(outVertex){void 0===outVertex.tarjanIndex?(fluid.stronglyConnectedOne(outVertex,that),vertex.lowIndex=Math.min(vertex.lowIndex,outVertex.lowIndex)):outVertex.onStack&&(vertex.lowIndex=Math.min(vertex.lowIndex,outVertex.tarjanIndex))})),vertex.lowIndex===vertex.tarjanIndex){var outVertex,component=[];do{(outVertex=that.stack.pop()).onStack=!1,component.push(outVertex)}while(outVertex!==vertex);that.components.push(component)}},fluid.initRelayModel=function(that){return that.model},fluid.findInitModelTransaction=function(that){var transRec=fluid.currentTreeTransaction();if(transRec&&fluid.isComponent(that))return transRec.initModelTransaction[that.id]},fluid.enlistModelComponent=function(that){var treeTransaction=fluid.currentTreeTransaction(),transId=treeTransaction.initModelTransactionId,initModelTransaction=treeTransaction.initModelTransaction,enlist=initModelTransaction[that.id];if(!enlist){var shadow=fluid.shadowForComponent(that);enlist={that:that,applier:fluid.getForComponent(that,"applier"),initModels:[],completeOnInit:!!shadow.initTransactionId,transaction:that.applier.initiate(null,"init",transId)},initModelTransaction[that.id]=enlist,fluid.getModelTransactionRec(fluid.rootComponent,transId)[that.applier.applierId]={transaction:enlist.transaction},fluid.registerMaterialisationListener(that,that.applier)}return enlist},fluid.clearTransactions=function(){var instantiator=fluid.globalInstantiator;fluid.clear(instantiator.modelTransactions)},fluid.failureEvent.addListener(fluid.clearTransactions,"clearTransactions","before:fail"),fluid.clearLinkCounts=function(transRec,relaysAlso){fluid.each(transRec,(function(value,key){"number"==typeof value?transRec[key]=0:relaysAlso&&value.options&&"number"==typeof value.relayCount&&(value.relayCount=0)}))},fluid.computeInitialOutArcs=function(transacs,initModelTransaction){return fluid.transform(initModelTransaction,(function(recel,id){var oneOutArcs={},listeners=recel.that.applier.listeners.sortedListeners;fluid.each(listeners,(function(listener){if(listener.isRelay&&!fluid.isExcludedChangeSource(transacs[id],listener.cond)){var targetId=listener.targetId;targetId!==id&&(oneOutArcs[targetId]=!0)}}));var togo=Object.keys(oneOutArcs).map((function(id){return initModelTransaction[id]}));return fluid.remove_if(togo,(function(rec){return void 0===rec})),togo}))},fluid.sortCompleteLast=function(reca,recb){return(reca.completeOnInit?1:0)-(recb.completeOnInit?1:0)},fluid.subscribeResourceModelUpdates=function(that,resourceMapEntry){var treeTransaction=fluid.currentTreeTransaction(),resourceSpec=resourceMapEntry.resourceSpec,resourceUpdateListener=function(){var initTransaction=fluid.getImmediate(treeTransaction,["initModelTransaction",that.id]),trans=initTransaction?initTransaction.transaction:that.applier.initiate();if(resourceMapEntry.listeners.forEach((function(oneListener){var innerValue=fluid.getImmediate(resourceSpec,oneListener.resourceSegs),segs=oneListener.segs;trans.change(segs,null,"DELETE"),trans.change(segs,innerValue)})),initTransaction){var transRec=fluid.getModelTransactionRec(fluid.rootComponent,trans.id);fluid.clearLinkCounts(transRec,!0),that.applier.preCommit.fire(trans,that)}else trans.commit()};resourceSpec.onFetched.addListener(resourceUpdateListener),fluid.recordListener(resourceSpec.onFetched,resourceUpdateListener,fluid.shadowForComponent(that))},fluid.resolveResourceModelWorkflow=function(shadows,treeTransaction){var initModelTransaction=treeTransaction.initModelTransaction;shadows.forEach((function(shadow){var that=shadow.that;fluid.registerMergedModelListeners(that,that.options.modelListeners),fluid.each(shadow.modelSourcedDynamicComponents,(function(componentRecord,key){fluid.constructLensedComponents(shadow,initModelTransaction[that.id],componentRecord.sourcesParsed,key)}))}))},fluid.condenseResourceMap=function(resourceMap){var byId={};return resourceMap.forEach((function(resourceMapEntry){var resourceSpec=resourceMapEntry.fetchOne.resourceSpec,id=resourceSpec.transformEvent.eventId,existing=byId[id];existing||(existing=byId[id]={resourceSpec:resourceSpec,listeners:[]}),existing.listeners.push({resourceSegs:resourceMapEntry.fetchOne.segs,segs:resourceMapEntry.segs})})),byId},fluid.operateInitialTransaction=function(initModelTransaction,transId){var transacs=fluid.transform(initModelTransaction,(function(recel){return recel.transaction})),outArcs=fluid.computeInitialOutArcs(transacs,initModelTransaction),recs=fluid.values(initModelTransaction),components=fluid.stronglyConnected(recs,(function(initTransactionRecord){return outArcs[initTransactionRecord.that.id]})),priorityIndex=0;components.forEach((function(component){component.forEach((function(recel){recel.initPriority=recel.completeOnInit?1/0:priorityIndex++}))})),recs.sort((function(reca,recb){return reca.initPriority-recb.initPriority}));var transRec=fluid.getModelTransactionRec(fluid.rootComponent,transId);recs.forEach((function(recel){var that=recel.that,applier=recel.that.applier,transac=transacs[that.id];recel.completeOnInit?fluid.notifyModelChanges(applier.listeners.sortedListeners,"ADD",transac.oldHolder,fluid.emptyHolder,null,transac,applier,that):fluid.each(recel.initModels,(function(oneInitModel){void 0!==oneInitModel&&transac.fireChangeRequest({type:"ADD",segs:[],value:oneInitModel}),fluid.clearLinkCounts(transRec,!0)}))})),recs.forEach((function(recel){var that=recel.that,applier=recel.that.applier,transac=transacs[that.id];if(applier.preCommit.fire(transac,that),!recel.completeOnInit){var resourceMapById=fluid.condenseResourceMap(applier.resourceMap);fluid.each(resourceMapById,(function(resourceMapEntry){fluid.subscribeResourceModelUpdates(that,resourceMapEntry)})),applier.earlyModelResolved.fire(that.model),applier.preCommit.fire(transac,that),recel.completeOnInit=!0;var shadow=fluid.shadowForComponent(that);shadow&&!shadow.initTransactionId&&(shadow.initTransactionId=transId)}}))},fluid.parseModelReference=function(that,ref){var parsed=fluid.parseContextReference(ref);return parsed.segs=fluid.pathUtil.parseEL(parsed.path),parsed},fluid.parseValidModelReference=function(that,name,ref,permitNonModel){var parsed,contextTarget,target,localRecord=fluid.shadowForComponent(that).localRecord,reject=function(){var failArgs=["Error in "+name+": ",ref].concat(fluid.makeArray(arguments));fluid.fail.apply(null,failArgs)},rejectNonModel=function(value){reject(" must be a reference to a component with a ChangeApplier (descended from fluid.modelComponent), instead got ",value)};if("string"==typeof ref)if(fluid.isIoCReference(ref)){var modelPoint=(parsed=fluid.parseModelReference(that,ref)).segs.indexOf("model");-1===modelPoint?permitNonModel?parsed.nonModel=!0:reject(' must be a reference into a component model via a path including the segment "model"'):(parsed.modelSegs=parsed.segs.slice(modelPoint+1),parsed.contextSegs=parsed.segs.slice(0,modelPoint),delete parsed.path)}else parsed={path:ref,modelSegs:that.applier.parseEL(ref)};else fluid.isArrayable(ref.segs)||reject(' must contain an entry "segs" holding path segments referring a model path within a component'),parsed={context:ref.context,modelSegs:fluid.expandImmediate(ref.segs,that,localRecord)},fluid.each(parsed.modelSegs,(function(seg,index){fluid.isValue(seg)||reject(" did not resolve path segment reference "+ref.segs[index]+" at index "+index)}));return parsed.context?localRecord&&parsed.context in localRecord?"source"===parsed.context&&localRecord.sourceModelReference?(target=localRecord.sourceModelReference.that,parsed.modelSegs=localRecord.sourceModelReference.modelSegs.concat(parsed.segs),parsed.nonModel=!1):target=localRecord[parsed.context]:((contextTarget=fluid.resolveContext(parsed.context,that))||reject(" context must be a reference to an existing component"),target=parsed.contextSegs?fluid.getForComponent(contextTarget,parsed.contextSegs):contextTarget):target=that,parsed.nonModel||(fluid.isComponent(target)||rejectNonModel(target),target.applier||fluid.getForComponent(target,["applier"]),target.applier||rejectNonModel(target)),parsed.that=target,parsed.applier=target&&target.applier,parsed.path||(parsed.path=target&&target.applier.composeSegments.apply(null,parsed.modelSegs)),parsed},fluid.registerNamespace("fluid.materialiserRegistry"),fluid.matchMaterialiserSpec=function(record,segs){for(var trundle=record,routedPath=null,i=0;i<segs.length;++i){var seg=segs[i],wildcard=trundle["*"];if(wildcard&&(routedPath=wildcard),!(trundle=trundle[seg]||wildcard))break;if(trundle.materialiser)return trundle}return routedPath&&fluid.fail("Materialised DOM path ",segs," did not match any registered materialiser - available paths are "+Object.keys(routedPath).join(", ")),null},fluid.materialiseModelPath=function(that,segs){var shadow=fluid.shadowForComponent(that),materialisedPath=["materialisedPaths"].concat(segs);fluid.getImmediate(shadow,materialisedPath)||fluid.each(fluid.materialiserRegistry,(function(gradeRecord,grade){if(fluid.componentHasGrade(that,grade)){var record=fluid.matchMaterialiserSpec(gradeRecord,segs);if(record&&record.materialiser){fluid.model.setSimple(shadow,materialisedPath,{});var args=fluid.makeArray(record.args);fluid.invokeGlobalFunction(record.materialiser,[that,fluid.makeArray(segs)].concat(args))}}}))},fluid.materialiseAgainstValue=function(that,newValue,segs){fluid.isPlainObject(newValue)?fluid.each(newValue,(function(inner,seg){segs.push(seg),fluid.materialiseAgainstValue(that,inner,segs),segs.pop()})):fluid.materialiseModelPath(that,segs)},fluid.registerMaterialisationListener=function(that,applier){fluid.each(fluid.materialiserRegistry,(function(gradeRecord,grade){fluid.componentHasGrade(that,grade)&&fluid.each(gradeRecord,(function(rest,root){applier.modelChanged.addListener({transactional:!1,path:root},(function(newValue){var segs=[root];fluid.materialiseAgainstValue(that,newValue,segs)}))}))}))},fluid.getModelTransactionRec=function(that,transId){transId||fluid.fail("Cannot get transaction record without transaction id");var instantiator=fluid.isComponent(that)&&!fluid.isDestroyed(that,!0)?fluid.globalInstantiator:null;if(!instantiator)return null;var transRec=instantiator.modelTransactions[transId];return transRec||(transRec=instantiator.modelTransactions[transId]={relays:[],sources:{},externalChanges:{}}),transRec},fluid.recordChangeListener=function(component,applier,sourceListener,listenerId){var shadow=fluid.shadowForComponent(component);fluid.recordListener(applier.modelChanged,sourceListener,shadow,listenerId)},fluid.registerRelayTransaction=function(transRec,targetApplier,transId,options,npOptions){var newTrans=targetApplier.initiate("relay",null,transId),transEl=transRec[targetApplier.applierId]={transaction:newTrans,relayCount:0,namespace:npOptions.namespace,priority:npOptions.priority,options:options};return transEl.priority=fluid.parsePriority(transEl.priority,transRec.relays.length,!1,"model relay"),transRec.relays.push(transEl),transEl},fluid.relayRecursionBailout=100,fluid.registerDirectChangeRelay=function(target,targetSegs,source,sourceSegs,linkId,transducer,options,npOptions){var targetApplier=options.targetApplier||target.applier,sourceApplier=options.sourceApplier||source.applier;options.targetApplier||fluid.materialiseModelPath(target,targetSegs),options.sourceApplier||fluid.materialiseModelPath(source,sourceSegs);var applierId=targetApplier.applierId;targetSegs=fluid.makeArray(targetSegs),sourceSegs=fluid.makeArray(sourceSegs);var sourceListener=function(newValue,oldValue,path,changeRequest,trans,applier){var transId=trans.id,transRec=fluid.getModelTransactionRec(target,transId);applier&&trans&&!transRec[applier.applierId]&&(transRec[applier.applierId]={transaction:trans});var transEl=transRec[applierId];transRec[linkId]=transRec[linkId]||0;if(++transRec[linkId],transRec[linkId]>fluid.relayRecursionBailout&&fluid.fail("Error in model relay specification at component ",target," - operated more than "+fluid.relayRecursionBailout+" relays without model value settling - current model contents are ",trans.newHolder.model),transEl||(transEl=fluid.registerRelayTransaction(transRec,targetApplier,transId,options,npOptions)),transducer&&!options.targetApplier)fluid.pushActivity("relayTransducer",'computing modelRelay output for rule with target path "%targetSegs" and namespace "%namespace"',{targetSegs:targetSegs,namespace:npOptions.namespace}),transducer(transEl.transaction,options.sourceApplier?void 0:newValue,source,sourceSegs,targetSegs,changeRequest),fluid.popActivity();else if(changeRequest&&"DELETE"===changeRequest.type){var deleteSegs=targetSegs.concat(changeRequest.segs.slice(sourceSegs.length));transEl.transaction.fireChangeRequest({type:"DELETE",segs:deleteSegs})}else void 0!==newValue&&transEl.transaction.fireChangeRequest({type:"ADD",segs:targetSegs,value:newValue})},spec=sourceApplier.modelChanged.addListener({isRelay:!0,cond:transducer&&transducer.cond,targetId:target.id,targetApplierId:targetApplier.id,segs:sourceSegs,transactional:options.transactional},sourceListener);fluid.passLogLevel(fluid.logLevel.TRACE)&&fluid.log(fluid.logLevel.TRACE,"Adding relay listener with listenerId "+spec.listenerId+" to source applier with id "+sourceApplier.applierId+" from target applier with id "+applierId+" for target component with id "+target.id),source&&(fluid.recordChangeListener(source,sourceApplier,sourceListener,spec.listenerId),target!==source&&fluid.recordChangeListener(target,sourceApplier,sourceListener,spec.listenerId))},fluid.connectModelRelay=function(source,sourceSegs,target,targetSegs,options){var linkId=fluid.allocateGuid();fluid.enlistModelComponent(target),fluid.enlistModelComponent(source);var npOptions=fluid.filterKeys(options,["namespace","priority"]);options.update?options.targetApplier?fluid.registerDirectChangeRelay(source,sourceSegs,target,targetSegs,linkId,null,{transactional:!1,targetApplier:options.targetApplier,refCount:options.refCount,update:options.update},npOptions):fluid.registerDirectChangeRelay(target,targetSegs,source,[],linkId+"-transform",options.forwardAdapter,{transactional:!0,sourceApplier:options.forwardApplier},npOptions):(fluid.registerDirectChangeRelay(target,targetSegs,source,sourceSegs,linkId,options.forwardAdapter,{transactional:!1},npOptions),fluid.registerDirectChangeRelay(source,sourceSegs,target,targetSegs,linkId,options.backwardAdapter,{transactional:!1},npOptions))},fluid.parseSourceExclusionSpec=function(targetSpec,sourceSpec){return targetSpec.excludeSource=fluid.arrayToHash(fluid.makeArray(sourceSpec.excludeSource||(sourceSpec.includeSource?"*":void 0))),targetSpec.includeSource=fluid.arrayToHash(fluid.makeArray(sourceSpec.includeSource)),targetSpec},fluid.isExcludedChangeSource=function(transaction,spec){if(!spec||!spec.excludeSource)return!1;var excluded=spec.excludeSource["*"];for(var source in transaction.fullSources)spec.excludeSource[source]&&(excluded=!0),spec.includeSource[source]&&(excluded=!1);return excluded},fluid.model.guardedAdapter=function(transaction,cond,func,args){fluid.isExcludedChangeSource(transaction,cond)||func===fluid.model.transform.uninvertibleTransform||func.apply(null,args)},fluid.transformToAdapter=function(transform,targetPath){var basedTransform={};return basedTransform[targetPath]=transform,function(trans,newValue,source,sourceSegs,targetSegs,changeRequest){changeRequest&&"DELETE"===changeRequest.type&&trans.fireChangeRequest({type:"DELETE",path:targetPath});var oldTarget=fluid.getImmediate(trans.oldHolder.model,targetSegs),oldSource=fluid.getImmediate(source.model,sourceSegs);fluid.model.transformWithRules(newValue,basedTransform,{finalApplier:trans,oldTarget:oldTarget,oldSource:oldSource})}},fluid.makeTransformPackage=function(componentThat,transform,sourcePath,targetPath,forwardCond,backwardCond,namespace,priority){var that={forwardHolder:{model:transform},backwardHolder:{model:null},generateAdapters:function(trans){if(that.forwardAdapterImpl=fluid.transformToAdapter(trans?trans.newHolder.model:that.forwardHolder.model,targetPath),null!==sourcePath){var inverted=fluid.model.transform.invertConfiguration(transform);inverted!==fluid.model.transform.uninvertibleTransform?(that.backwardHolder.model=inverted,that.backwardAdapterImpl=fluid.transformToAdapter(that.backwardHolder.model,sourcePath)):that.backwardAdapterImpl=inverted}},forwardAdapter:function(transaction,newValue){void 0===newValue&&that.generateAdapters(),fluid.model.guardedAdapter(transaction,forwardCond,that.forwardAdapterImpl,arguments)}};that.forwardAdapter.cond=forwardCond,that.runTransform=function(trans){trans.commit(),trans.reset()},that.forwardApplier=fluid.makeHolderChangeApplier(that.forwardHolder),that.forwardApplier.isRelayApplier=!0,that.invalidator=fluid.makeEventFirer({name:"Invalidator for model relay with applier "+that.forwardApplier.applierId}),null!==sourcePath&&(that.backwardApplier=fluid.makeHolderChangeApplier(that.backwardHolder),that.backwardAdapter=function(transaction){fluid.model.guardedAdapter(transaction,backwardCond,that.backwardAdapterImpl,arguments)},that.backwardAdapter.cond=backwardCond),that.update=that.invalidator.fire;var implicitOptions={targetApplier:that.forwardApplier,update:that.update,namespace:namespace,priority:priority,refCount:0};return that.forwardHolder.model=fluid.parseImplicitRelay(componentThat,transform,[],implicitOptions),that.refCount=implicitOptions.refCount,that.namespace=namespace,that.priority=priority,that.generateAdapters(),that.invalidator.addListener(that.generateAdapters),that.invalidator.addListener(that.runTransform),that},fluid.singleTransformToFull=function(singleTransform){var expanded="string"==typeof singleTransform?{type:singleTransform}:singleTransform;return{"":{transform:$.extend(!0,{inputPath:""},expanded)}}},fluid.funcToSingleTransform=function(that,mrrec){return mrrec.func?((void 0!==mrrec.args)+(void 0!==mrrec.source)+(void 0!==mrrec.value)!==1&&fluid.fail("Error in model relay definition: short-form relay must specify just one out of (args, source, value)"),{type:"fluid.transforms.free",func:mrrec.func,args:mrrec.args?mrrec.args:[fluid.isIoCReference(mrrec.source)?mrrec.source:"{that}.model."+mrrec.source]}):null},fluid.model.relayConditions={initOnly:{includeSource:"init"},liveOnly:{excludeSource:"init"},never:{includeSource:[]},always:{}},fluid.model.expandRelayCondition=function(condition){var exclusionRec;return"initOnly"===condition?fluid.log(fluid.logLevel.WARN,'The relay condition "initOnly" is deprecated: Please use the form \'includeSource: "init"\' instead'):"liveOnly"===condition&&fluid.log(fluid.logLevel.WARN,'The relay condition "liveOnly" is deprecated: Please use the form \'excludeSource: "init"\' instead'),condition?"string"==typeof condition?(exclusionRec=fluid.model.relayConditions[condition])||fluid.fail('Unrecognised model relay condition string "'+condition+'": the supported values are "never" or a record with members "includeSource" and/or "excludeSource"'):exclusionRec=condition:exclusionRec={},exclusionRec},fluid.model.parseRelayConditions=function(conditions){var expanded=conditions.map(fluid.model.expandRelayCondition),mergeArgs=[!0,{}].concat(expanded),merged=fluid.extend.apply(null,mergeArgs);return fluid.parseSourceExclusionSpec({},merged)},fluid.parseModelRelay=function(that,mrrec,key){fluid.pushActivity("parseModelRelay",'parsing modelRelay definition with key "%key" and body "%body" attached to component "%that"',{key:key,body:mrrec,that:that}),"string"==typeof mrrec.target||fluid.isPlainObject(mrrec.target,!0)&&mrrec.target.segs||fluid.fail('Error parsing model relay definition: model reference must be specified for "target"');var parsedSource=void 0!==mrrec.source?fluid.parseValidModelReference(that,'modelRelay record member "source"',mrrec.source,!0):void 0!==mrrec.value?{nonModel:!0}:{path:null,modelSegs:null},parsedTarget=fluid.parseValidModelReference(that,'modelRelay record member "target"',mrrec.target),namespace=mrrec.namespace||key,singleTransform="string"==typeof mrrec.singleTransform?{type:mrrec.singleTransform}:mrrec.singleTransform,shortSingleTransform=fluid.funcToSingleTransform(that,mrrec),transform=mrrec.transform||fluid.singleTransformToFull(singleTransform||shortSingleTransform||{type:"fluid.transforms.identity"}),upDefaults=singleTransform?fluid.defaults(singleTransform.type):null,relayOptions=upDefaults&&upDefaults.relayOptions||{},forwardCond=fluid.model.parseRelayConditions([relayOptions.forward,mrrec.forward]),backwardCond=fluid.model.parseRelayConditions([relayOptions.backward,mrrec.backward]),transformPackage=fluid.makeTransformPackage(that,transform,parsedSource.path,parsedTarget.path,forwardCond,backwardCond,namespace,mrrec.priority);if(parsedSource.nonModel){var transformed,initValue=fluid.parseImplicitRelay(that,fluid.firstDefined(mrrec.source,mrrec.value),parsedTarget.modelSegs);if("fluid.transforms.identity"!==transform[""].transform.type){var localTransform=fluid.copy(transform);localTransform[""].transform.args=[initValue],transformed=fluid.model.transformWithRules(initValue,localTransform)}else transformed=initValue;var enlist=fluid.enlistModelComponent(parsedTarget.that),initModel={};fluid.model.setSimple(initModel,parsedTarget.modelSegs,transformed),enlist.initModels.push(initModel)}else 0===transformPackage.refCount?fluid.connectModelRelay(parsedSource.that||that,parsedSource.modelSegs,parsedTarget.that,parsedTarget.modelSegs,fluid.filterKeys(transformPackage,["forwardAdapter","backwardAdapter","namespace","priority"])):(parsedSource.modelSegs&&!shortSingleTransform&&fluid.fail('Error in model relay definition: If a relay transform has a model dependency, you can not specify a "source" entry - please instead enter this as "input" in the transform specification. Definition was ',mrrec," for component ",that),fluid.connectModelRelay(that,null,parsedTarget.that,parsedTarget.modelSegs,transformPackage));fluid.popActivity()},fluid.parseImplicitRelay=function(that,modelRec,segs,options){var value;if(fluid.isIoCReference(modelRec)){var parsed=fluid.parseValidModelReference(that,"model reference from model (implicit relay)",modelRec,!0);if(parsed.nonModel){if((value=fluid.isComponent(parsed.that)?fluid.possiblyProxyComponent(fluid.getForComponent(parsed.that,parsed.segs)):fluid.getImmediate(parsed.that,parsed.segs))instanceof fluid.fetchResources.FetchOne)return void that.applier.resourceMap.push({segs:fluid.makeArray(segs),fetchOne:value})}else++options.refCount,fluid.connectModelRelay(that,segs,parsed.that,parsed.modelSegs,options)}else fluid.isPrimitive(modelRec)||!fluid.isPlainObject(modelRec)?value=modelRec:modelRec.expander&&fluid.isPlainObject(modelRec.expander)?value=fluid.expandOptions(modelRec,that):(value=fluid.freshContainer(modelRec),fluid.each(modelRec,(function(innerValue,key){segs.push(key);var innerTrans=fluid.parseImplicitRelay(that,innerValue,segs,options);void 0!==innerTrans&&(value[key]=innerTrans),segs.pop()})));return value},fluid.model.notifyExternal=function(transRec){var allChanges=transRec?fluid.values(transRec.externalChanges):[];fluid.sortByPriority(allChanges);for(var i=0;i<allChanges.length;++i){var change=allChanges[i];change.args[5].destroyed||change.listener.apply(null,change.args)}fluid.clearLinkCounts(transRec,!0)},fluid.model.commitRelays=function(instantiator,transactionId){var transRec=instantiator.modelTransactions[transactionId];fluid.each(transRec,(function(transEl){transEl.transaction&&(transEl.transaction.commit("relay"),transEl.transaction.reset())}))},fluid.model.updateRelays=function(instantiator,transactionId){var transRec=instantiator.modelTransactions[transactionId],updates=0;return fluid.sortByPriority(transRec.relays),fluid.each(transRec.relays,(function(transEl){var maxRelay=transEl.options.refCount?4*transEl.options.refCount:4;transEl.transaction.changeRecord.changes>0&&transEl.relayCount<maxRelay&&transEl.options.update&&(transEl.relayCount++,fluid.clearLinkCounts(transRec),transEl.options.update(transEl.transaction,transRec),++updates)})),updates},fluid.concludeModelTransaction=function(transaction){var instantiator=fluid.globalInstantiator;fluid.model.notifyExternal(instantiator.modelTransactions[transaction.id]),delete instantiator.modelTransactions[transaction.id]},fluid.establishModelRelay=function(that,optionsModel,optionsML,optionsMR,applier){var shadow=fluid.shadowForComponent(that);shadow.modelRelayEstablished?fluid.fail("FLUID-5887 failure: Model relay initialised twice on component",that):shadow.modelRelayEstablished=!0;var enlist=fluid.enlistModelComponent(that),initModels=(optionsModel||[]).map((function(modelRec){return fluid.parseImplicitRelay(that,modelRec,[],{refCount:0,priority:"first"})}));Array.prototype.push.apply(enlist.initModels,initModels),fluid.each(optionsMR,(function(mrrec,key){if(""===key)for(var i=0;i<mrrec.length;++i)fluid.parseModelRelay(that,mrrec[i],key);else{var lightMerge=fluid.extend.apply(null,[!0,{}].concat(mrrec));fluid.parseModelRelay(that,lightMerge,key)}}));var instantiator=fluid.getInstantiator(that);return applier.preCommit.addListener((function(transaction){for(;fluid.model.updateRelays(instantiator,transaction.id)>0;);})),applier.preCommit.addListener((function(transaction){fluid.model.commitRelays(instantiator,transaction.id)})),applier.postCommit.addListener(fluid.concludeModelTransaction),applier.postCommit.addListener(fluid.concludeAnyTreeTransaction),null},fluid.destroyLensedComponentSource=function(that,isBoolean){var sourceModelReference=fluid.shadowForComponent(that).localRecord.sourceModelReference;sourceModelReference&&!fluid.isDestroyed(sourceModelReference.that,!0)&&sourceModelReference.that.applier.change(sourceModelReference.modelSegs,!1,isBoolean?"ADD":"DELETE")},fluid.constructLensedComponents=function(shadow,initTransRec,sourcesParsed,dynamicComponentKey){var lightMerge=shadow.lightMergeDynamicComponents[dynamicComponentKey],sources=fluid.getImmediate(shadow.that.model,sourcesParsed.modelSegs),shadowRecord=shadow.modelSourcedDynamicComponents[dynamicComponentKey],localRecordContributor=shadowRecord.localRecordContributor=function(localRecord,source,sourceKey){localRecord.sourceModelReference={that:sourcesParsed.that,modelSegs:sourcesParsed.modelSegs.concat(shadowRecord.isBoolean?[]:[sourceKey])}};fluid.lightMergeRecords.pushRecord(lightMerge,{options:{listeners:{afterDestroy:{funcName:"fluid.destroyLensedComponentSource",args:["{that}",shadowRecord.isBoolean]}}}}),fluid.registerSourcedDynamicComponentsTriage(shadow.potentia,shadow.that,sources,lightMerge,dynamicComponentKey,shadowRecord.isBoolean,localRecordContributor)},fluid.operateInitialTransactionWorkflow=function(shadows,treeTransaction){fluid.tryCatch((function(){var initModelTransaction=treeTransaction.initModelTransaction,transId=treeTransaction.initModelTransactionId;fluid.operateInitialTransaction(initModelTransaction,transId)}),(function(e){throw treeTransaction.initModelTransaction={},treeTransaction.initModelTransactionId=null,fluid.clearTransactions(),e}),fluid.identity)},fluid.enlistModelWorkflow=function(shadows,treeTransaction){var transId=treeTransaction.initModelTransactionId;transId||(transId=fluid.allocateGuid(),treeTransaction.initModelTransactionId=transId),shadows.forEach((function(shadow){fluid.getForComponent(shadow.that,"modelRelay")})),fluid.operateInitialTransactionWorkflow(shadows,treeTransaction)},fluid.notifyInitModelWorkflow=function(shadow,treeTransaction){if(!shadow.modelComplete){var initModelTransaction=treeTransaction.initModelTransaction,transRec=fluid.getModelTransactionRec(fluid.rootComponent,shadow.initTransactionId),trans=fluid.values(initModelTransaction)[0].transaction;treeTransaction.initModelTransaction={},treeTransaction.initModelTransactionId=null,trans.commit(),fluid.each(initModelTransaction,(function(oneRec){var that=oneRec.that,applier=that.applier;trans=transRec[applier.applierId].transaction;var listeners=applier.transListeners.sortedListeners,initShadow=fluid.shadowForComponent(that);initShadow.modelComplete=!0,initShadow.initTransactionId===shadow.initTransactionId&&fluid.notifyModelChanges(listeners,"ADD",trans.oldHolder,fluid.emptyHolder,null,trans,applier,that)})),fluid.concludeModelTransaction(trans)}},fluid.defaults("fluid.modelComponent",{gradeNames:["fluid.component"],workflows:{global:{enlistModel:{funcName:"fluid.enlistModelWorkflow"},resolveResourceModel:{funcName:"fluid.resolveResourceModelWorkflow",priority:"after:enlistModel",waitIO:!0}},local:{notifyInitModelWorkflow:{funcName:"fluid.notifyInitModelWorkflow",priority:"before:concludeComponentInit"}}},members:{model:{expander:{funcName:"fluid.initRelayModel",args:["{that}","{that}.modelRelay"],noproxy:!0}},applier:{expander:{funcName:"fluid.makeHolderChangeApplier",args:["{that}","{that}.options.changeApplierOptions"],noproxy:!0}},modelRelay:{expander:{funcName:"fluid.establishModelRelay",args:["{that}","{that}.options.model","{that}.options.modelListeners","{that}.options.modelRelay","{that}.applier"],noproxy:!0}}},mergePolicy:{model:{noexpand:!0,func:fluid.arrayConcatPolicy},modelListeners:fluid.makeMergeListenersPolicy(fluid.arrayConcatPolicy),modelRelay:fluid.makeMergeListenersPolicy(fluid.arrayConcatPolicy,!0)}}),fluid.modelChangedToChange=function(args){return{value:args[0],oldValue:args[1],path:args[2],transaction:args[4]}},fluid.event.invokeListener=function(listener,args,localRecord,mergeRecord){return"string"==typeof listener&&(listener=fluid.event.resolveListener(listener)),listener.apply(null,args,localRecord,mergeRecord)},fluid.resolveModelListener=function(that,record){var togo=function(){if(!fluid.isDestroyed(that,!0)){var change=fluid.modelChangedToChange(arguments),args=arguments,localRecord={change:change,arguments:args},mergeRecord={source:Object.keys(change.transaction.sources)};record.args&&(args=fluid.expandImmediate(record.args,that,localRecord)),fluid.event.invokeListener(record.listener,fluid.makeArray(args),localRecord,mergeRecord)}};return fluid.event.impersonateListener(record.listener,togo),togo},fluid.registerModelListeners=function(that,record,paths,namespace){var func=fluid.resolveModelListener(that,record);fluid.each(record.byTarget,(function(parsedArray){var parsed=parsedArray[0],spec={listener:func,listenerId:fluid.allocateGuid(),segsArray:fluid.getMembers(parsedArray,"modelSegs"),includeSource:record.includeSource,excludeSource:record.excludeSource,priority:fluid.expandOptions(record.priority,that),transactional:!0};(spec=parsed.applier.modelChanged.addListener(spec,func,namespace,record.softNamespace)).segsArray.forEach((function(segs){fluid.materialiseModelPath(that,segs)})),fluid.recordChangeListener(that,parsed.applier,func,spec.listenerId)}))},fluid.registerMergedModelListeners=function(that,listeners){fluid.each(listeners,(function(value,key){"string"==typeof value&&(value={funcName:value});var records=fluid.event.resolveListenerRecord(value,that,"modelListeners",null,!1).records;fluid.each(records,(function(record){record.byTarget={};var paths=fluid.makeArray(void 0===record.path?key:record.path);fluid.each(paths,(function(path){var parsed=fluid.parseValidModelReference(that,"modelListeners entry",path);fluid.pushArray(record.byTarget,parsed.that.id,parsed)}));var namespace=(record.namespace&&!record.softNamespace?record.namespace:null)||(void 0!==record.path?key:null);fluid.registerModelListeners(that,record,paths,namespace)}))}))},fluid.replaceModelValue=function(applier,path,newValue){var transaction=applier.initiate();return transaction.fireChangeRequest({path:path,type:"DELETE"}),transaction.fireChangeRequest({path:path,value:newValue}),transaction.commit(),applier.holder.model},fluid.fireChanges=function(applier,changes){for(var i=0;i<changes.length;++i)applier.fireChangeRequest(changes[i])},fluid.model.isChangedPath=function(changeMap,segs){for(var i=0;i<=segs.length;++i){if("string"==typeof changeMap)return changeMap;i<segs.length&&changeMap&&(changeMap=changeMap[segs[i]])}return null},fluid.model.setChangedPath=function(options,segs,value){var notePath=function(record){var root=options;segs.unshift(record);for(var i=0;i<segs.length-1;++i){var seg=segs[i];void 0===root[seg]&&(root[seg]={}),root=root[seg]}fluid.isPlainObject(root)&&(root[fluid.peek(segs)]=value),segs.shift()};fluid.model.isChangedPath(options.changeMap,segs)!==value&&(++options.changes,notePath("changeMap")),fluid.model.isChangedPath(options.deltaMap,segs)!==value&&(++options.deltas,notePath("deltaMap"))},fluid.model.fetchChangeChildren=function(target,i,segs,source,options){fluid.each(source,(function(value,key){segs[i]=key,fluid.model.applyChangeStrategy(target,key,i,segs,value,options),segs.length=i}))},fluid.model.isSameValue=function(a,b){return"number"!=typeof a||"number"!=typeof b?a===b:a===b||a!=a&&b!=b||Math.abs((a-b)/b)<1e-12},fluid.model.applyChangeStrategy=function(target,name,i,segs,source,options){var targetSlot=target[name],sourceCode=fluid.typeCode(source),targetCode=fluid.typeCode(targetSlot),changedValue=fluid.NO_VALUE;"primitive"===sourceCode?fluid.model.isSameValue(targetSlot,source)||(changedValue=source,++options.unchanged):(targetCode!==sourceCode||"array"===sourceCode&&source.length!==targetSlot.length)&&(changedValue=fluid.freshContainer(source)),changedValue!==fluid.NO_VALUE&&(target[name]=changedValue,options.changeMap&&fluid.model.setChangedPath(options,segs,options.inverse?"DELETE":"ADD")),"primitive"!==sourceCode&&fluid.model.fetchChangeChildren(target[name],i+1,segs,source,options)},fluid.model.stepTargetAccess=function(target,type,segs,startpos,endpos,options){for(var i=startpos;i<endpos;++i){if(target)target[segs[i]]!==(target=fluid.model.traverseWithStrategy(target,segs,i,options["ADD"===type?"resolverSetConfig":"resolverGetConfig"],segs.length-i-1))&&options.changeMap&&fluid.model.setChangedPath(options,segs.slice(0,i+1),"ADD")}return{root:target,last:segs[endpos]}},fluid.model.defaultAccessorConfig=function(options){return(options=options||{}).resolverSetConfig=options.resolverSetConfig||fluid.model.escapedSetConfig,options.resolverGetConfig=options.resolverGetConfig||fluid.model.escapedGetConfig,options},fluid.model.applyHolderChangeRequest=function(holder,request,options){(options=fluid.model.defaultAccessorConfig(options)).deltaMap=options.changeMap?{}:null,options.deltas=0;var pen,length=request.segs.length,atRoot=0===length;if(atRoot?pen={root:holder,last:"model"}:(holder.model||"DELETE"===request.type||(holder.model={},fluid.model.setChangedPath(options,[],options.inverse?"DELETE":"ADD")),pen=fluid.model.stepTargetAccess(holder.model,request.type,request.segs,0,length-1,options)),"ADD"===request.type){var value=request.value,segs=fluid.makeArray(request.segs);fluid.model.applyChangeStrategy(pen.root,pen.last,length-1,segs,value,options,atRoot)}else"DELETE"===request.type?pen.root&&void 0!==pen.root[pen.last]&&(delete pen.root[pen.last],options.changeMap&&fluid.model.setChangedPath(options,request.segs,"DELETE")):fluid.fail("Unrecognised change type of "+request.type);return options.deltas?options.deltaMap:null},fluid.model.diff=function(modela,modelb,options){options=options||{changes:0,unchanged:0,changeMap:{}};var togo,typea=fluid.typeCode(modela),typeb=fluid.typeCode(modelb);if("primitive"===typea&&"primitive"===typeb)togo=fluid.model.isSameValue(modela,modelb);else if("primitive"===typea^"primitive"===typeb)togo=!1;else{var holderb={model:fluid.copy(modelb)};options.inverse=!0,fluid.model.applyHolderChangeRequest(holderb,{value:modela,segs:[],type:"ADD"},options);var holdera={model:fluid.copy(modela)};options.inverse=!1,fluid.model.applyHolderChangeRequest(holdera,{value:modelb,segs:[],type:"ADD"},options),togo=0===options.changes}return!1===togo&&0===options.changes?(options.changes=1,options.changeMap=void 0===modelb?"DELETE":"ADD"):!0===togo&&0===options.unchanged&&(options.unchanged=1),togo},fluid.outputWildcardMatches=function(matches,outSegs,root){fluid.each(root,(function(value,key){matches.push(outSegs.concat(key))}))},fluid.matchChanges=function(changeMap,specSegs,newHolder,oldHolder){for(var newRoot=newHolder.model,oldRoot=oldHolder.model,map=changeMap,outSegs=["model"],wildcard=!1,togo=[],i=0;i<specSegs.length;++i){var seg=specSegs[i];"*"===seg?i===specSegs.length-1?wildcard=!0:fluid.fail("Wildcard specification in modelChanged listener is only supported for the final path segment: "+specSegs.join(".")):(outSegs.push(seg),map=fluid.isPrimitive(map)?map:map[seg],newRoot=newRoot?newRoot[seg]:void 0,oldRoot=oldRoot?oldRoot[seg]:void 0)}if(map)if(wildcard)if("string"==typeof map){var allKeys=fluid.extend({},oldRoot,newRoot);fluid.outputWildcardMatches(togo,outSegs,allKeys)}else fluid.outputWildcardMatches(togo,outSegs,map);else togo.push(outSegs);return togo},fluid.storeExternalChange=function(transRec,applier,invalidPath,spec,args){var pathString=applier.composeSegments.apply(null,invalidPath),keyString=[applier.holder.id,spec.listenerId,spec.wildcard?pathString:""].join("|");transRec.externalChanges[keyString]={listener:spec.listener,namespace:spec.namespace,priority:spec.priority,args:args}},fluid.notifyModelChanges=function(listeners,changeMap,newHolder,oldHolder,changeRequest,transaction,applier,that){if(listeners)for(var transRec=fluid.getModelTransactionRec(that,transaction.id),i=0;i<listeners.length;++i)for(var spec=listeners[i],multiplePaths=spec.segsArray.length>1,j=0;j<spec.segsArray.length;++j)for(var invalidPaths=fluid.matchChanges(changeMap,spec.segsArray[j],newHolder,oldHolder),k=0;k<invalidPaths.length;++k){if(applier.destroyed)return;var invalidPath=invalidPaths[k];spec.listener=fluid.event.resolveListener(spec.listener);var args=[multiplePaths?newHolder.model:fluid.model.getSimple(newHolder,invalidPath),multiplePaths?oldHolder.model:fluid.model.getSimple(oldHolder,invalidPath),multiplePaths?[]:invalidPath.slice(1),changeRequest,transaction,applier];if(!spec.isRelay){if(fluid.model.diff(args[0],args[1]))continue;if(fluid.isExcludedChangeSource(transaction,spec))continue}transRec&&!spec.isRelay&&spec.transactional?fluid.storeExternalChange(transRec,applier,invalidPath,spec,args):spec.listener.apply(null,args)}},fluid.bindELMethods=function(applier){applier.parseEL=function(EL){return fluid.model.pathToSegments(EL,applier.options.resolverSetConfig)},applier.composeSegments=function(){return applier.options.resolverSetConfig.parser.compose.apply(null,arguments)}},fluid.emptyHolder=fluid.freezeRecursive({model:void 0}),fluid.preFireChangeRequest=function(applier,changeRequest){changeRequest.type||(changeRequest.type="ADD"),changeRequest.segs=changeRequest.segs||applier.parseEL(changeRequest.path)},fluid.bindRequestChange=function(that){that.change=function(path,value,type,source){var changeRequest={path:path,value:value,type:type,source:source};that.fireChangeRequest(changeRequest)}},fluid.mergeChangeSources=function(target,globalSources){fluid.isPlainObject(globalSources,!0)?fluid.extend(target,globalSources):fluid.each(fluid.makeArray(globalSources),(function(globalSource){target[globalSource]=!0}))},fluid.ChangeApplier=function(){},fluid.makeHolderChangeApplier=function(holder,options){options=fluid.model.defaultAccessorConfig(options);var applierId=fluid.allocateGuid(),that=new fluid.ChangeApplier,name=fluid.isComponent(holder)?"ChangeApplier for component "+fluid.dumpThat(holder):"ChangeApplier with id "+applierId;return $.extend(that,{applierId:applierId,holder:holder,listeners:fluid.makeEventFirer({name:"Internal change listeners for "+name}),transListeners:fluid.makeEventFirer({name:"External change listeners for "+name}),options:options,modelChanged:{},resourceMap:[],earlyModelResolved:fluid.makeEventFirer({name:"earlyModelResolved event for "+name}),preCommit:fluid.makeEventFirer({name:"preCommit event for "+name}),postCommit:fluid.makeEventFirer({name:"postCommit event for "+name})}),that.destroy=function(){that.preCommit.destroy(),that.postCommit.destroy(),that.destroyed=!0},that.modelChanged.addListener=function(spec,listener,namespace,softNamespace){return(spec="string"==typeof spec?{path:spec}:fluid.copy(spec)).listenerId=spec.listenerId||fluid.allocateGuid(),spec.namespace=namespace,spec.softNamespace=softNamespace,"string"==typeof listener&&(listener={globalName:listener}),spec.listener=listener,!1!==spec.transactional&&(spec.transactional=!0),spec.segsArray||(void 0!==spec.path&&(spec.segs=spec.segs||that.parseEL(spec.path)),spec.segsArray=[spec.segs]),spec.isRelay||(fluid.parseSourceExclusionSpec(spec,spec),spec.wildcard=fluid.accumulate(fluid.transform(spec.segsArray,(function(segs){return fluid.contains(segs,"*")})),fluid.add,0),spec.wildcard&&spec.segsArray.length>1&&fluid.fail("Error in model listener specification ",spec," - you may not supply a wildcard pattern as one of a set of multiple paths to be matched")),that[spec.transactional?"transListeners":"listeners"].addListener(spec),spec},that.modelChanged.removeListener=function(listener){that.listeners.removeListener(listener),that.transListeners.removeListener(listener)},that.fireChangeRequest=function(changeRequest){var initTransaction=fluid.findInitModelTransaction(holder);if(initTransaction)initTransaction.transaction.fireChangeRequest(changeRequest);else{var ation=that.initiate("local",changeRequest.source);ation.fireChangeRequest(changeRequest),ation.commit()}},that.initiate=function(localSource,globalSources,transactionId){var defeatPost="relay"===(localSource="init"===globalSources?null:localSource||"local")||"init"===globalSources,trans={instanceId:fluid.allocateGuid(),id:transactionId||fluid.allocateGuid(),changeRecord:{resolverSetConfig:options.resolverSetConfig,resolverGetConfig:options.resolverGetConfig},reset:function(){trans.oldHolder=holder,trans.newHolder={model:fluid.copy(holder.model)},trans.changeRecord.changes=0,trans.changeRecord.unchanged=0,trans.changeRecord.changeMap={}},commit:function(code){if("relay"!==code&&that.preCommit.fire(trans,that,code),trans.changeRecord.changes>0){var oldHolder={model:holder.model};holder.model=trans.newHolder.model,fluid.notifyModelChanges(that.transListeners.sortedListeners,trans.changeRecord.changeMap,holder,oldHolder,null,trans,that,holder)}defeatPost||"relay"===code||that.postCommit.fire(trans,that,code)},fireChangeRequest:function(changeRequest){fluid.preFireChangeRequest(that,changeRequest),changeRequest.transactionId=trans.id;var deltaMap=fluid.model.applyHolderChangeRequest(trans.newHolder,changeRequest,trans.changeRecord);fluid.notifyModelChanges(that.listeners.sortedListeners,deltaMap,trans.newHolder,holder,changeRequest,trans,that,holder)},hasChangeSource:function(source){return trans.fullSources[source]}},transRec=fluid.getModelTransactionRec(holder,trans.id);return transRec&&(fluid.mergeChangeSources(transRec.sources,globalSources),trans.sources=transRec.sources,trans.fullSources=Object.create(transRec.sources),localSource&&(trans.fullSources[localSource]=!0)),trans.reset(),fluid.bindRequestChange(trans),trans},fluid.bindRequestChange(that),fluid.bindELMethods(that),that},fluid.modelPairToChanges=function(value,oldValue,changePathPrefix){changePathPrefix=changePathPrefix||"";var diffOptions={changes:0,unchanged:0,changeMap:{}};fluid.model.diff(oldValue,value,diffOptions);var changes=[];return fluid.modelPairToChangesImpl(value,fluid.pathUtil.parseEL(changePathPrefix),diffOptions.changeMap,[],changes),changes},fluid.modelPairToChangesImpl=function(value,changePathPrefixSegs,changeMap,changeSegs,changes){"ADD"===changeMap?changes.push({path:changePathPrefixSegs,value:value,type:"ADD"}):"DELETE"===changeMap?changes.push({path:changePathPrefixSegs,value:null,type:"DELETE"}):fluid.isPlainObject(changeMap,!0)&&fluid.each(changeMap,(function(change,seg){var currentChangeSegs=changeSegs.concat([seg]);"ADD"===change?changes.push({path:changePathPrefixSegs.concat(currentChangeSegs),value:fluid.get(value,currentChangeSegs),type:"ADD"}):"DELETE"===change?changes.push({path:changePathPrefixSegs.concat(currentChangeSegs),value:null,type:"DELETE"}):fluid.isPlainObject(change,!0)&&fluid.modelPairToChangesImpl(value,changePathPrefixSegs,change,currentChangeSegs,changes)}))},fluid.registerNamespace("fluid.model.transform"),fluid.defaults("fluid.transformFunction",{gradeNames:"fluid.function"}),fluid.defaults("fluid.standardInputTransformFunction",{gradeNames:"fluid.transformFunction"}),fluid.defaults("fluid.standardOutputTransformFunction",{gradeNames:"fluid.transformFunction"}),fluid.defaults("fluid.multiInputTransformFunction",{gradeNames:"fluid.transformFunction"}),fluid.defaults("fluid.standardTransformFunction",{gradeNames:["fluid.standardInputTransformFunction","fluid.standardOutputTransformFunction"]}),fluid.defaults("fluid.lens",{gradeNames:"fluid.transformFunction",invertConfiguration:null}),fluid.model.transform.pathToRule=function(inputPath){return{transform:{type:"fluid.transforms.value",inputPath:inputPath}}},fluid.model.transform.literalValueToRule=function(input){return{transform:{type:"fluid.transforms.literalValue",input:input}}},fluid.model.composePaths=function(prefix,suffix){return suffix=0===suffix?"0":suffix||"",(prefix=0===prefix?"0":prefix||"")?suffix?prefix+"."+suffix:prefix:suffix},fluid.model.transform.accumulateInputPath=function(inputPath,transformer,paths){void 0!==inputPath&&paths.push(fluid.model.composePaths(transformer.inputPrefix,inputPath))},fluid.model.transform.accumulateStandardInputPath=function(input,transformSpec,transformer,paths){fluid.model.transform.getValue(void 0,transformSpec[input],transformer),fluid.model.transform.accumulateInputPath(transformSpec[input+"Path"],transformer,paths)},fluid.model.transform.accumulateMultiInputPaths=function(inputVariables,transformSpec,transformer,paths){fluid.each(inputVariables,(function(v,k){fluid.model.transform.accumulateStandardInputPath(k,transformSpec,transformer,paths)}))},fluid.model.transform.getValue=function(inputPath,value,transformer){var togo;return void 0!==inputPath&&(togo=fluid.get(transformer.source,fluid.model.composePaths(transformer.inputPrefix,inputPath),transformer.resolverGetConfig)),void 0===togo&&(togo=fluid.isPrimitive(value)?value:"literalValue"in value?value.literalValue:void 0===value.transform?value:transformer.expand(value)),togo},fluid.model.transform.NONDEFAULT_OUTPUT_PATH_RETURN={},fluid.model.transform.setValue=function(userOutputPath,value,transformer){var toset=fluid.copy(value),outputPath=fluid.model.composePaths(transformer.outputPrefix,userOutputPath);return void 0!==toset&&transformer.applier.change(outputPath,toset),userOutputPath?fluid.model.transform.NONDEFAULT_OUTPUT_PATH_RETURN:toset},fluid.model.transform.resolveParam=function(transformSpec,transformer,key,def){var val=fluid.model.transform.getValue(transformSpec[key+"Path"],transformSpec[key],transformer);return void 0!==val?val:def},fluid.model.transform.matchValue=function(expected,actual,partialMatches){var stats={changes:0,unchanged:0,changeMap:{}};return fluid.model.diff(expected,actual,stats),0===stats.unchanged?0:partialMatches?0xffffff000000-16777216*stats.changes+stats.unchanged:stats.changes?0:0xffffff000000+stats.unchanged},fluid.model.transform.invertPaths=function(transformSpec,transformer){var oldOutput=fluid.model.composePaths(transformer.outputPrefix,transformSpec.outputPath);return transformSpec.outputPath=fluid.model.composePaths(transformer.inputPrefix,transformSpec.inputPath),transformSpec.inputPath=oldOutput,transformSpec},fluid.model.transform.prefixApplier=function(transformSpec,transformer){transformSpec.inputPrefix&&transformer.inputPrefixOp.push(transformSpec.inputPrefix),transformSpec.outputPrefix&&transformer.outputPrefixOp.push(transformSpec.outputPrefix),transformer.expand(transformSpec.input),transformSpec.inputPrefix&&transformer.inputPrefixOp.pop(),transformSpec.outputPrefix&&transformer.outputPrefixOp.pop()},fluid.defaults("fluid.model.transform.prefixApplier",{gradeNames:["fluid.transformFunction"]}),fluid.model.makePathStack=function(transform,prefixName){var stack=transform[prefixName+"Stack"]=[];return transform[prefixName]="",{push:function(prefix){var newPath=fluid.model.composePaths(transform[prefixName],prefix);stack.push(transform[prefixName]),transform[prefixName]=newPath},pop:function(){transform[prefixName]=stack.pop()}}},fluid.model.transform.doTransform=function(transformSpec,transformer,transformOpts){var expdef=transformOpts.defaults,transformFn=fluid.getGlobalValue(transformOpts.typeName);"function"!=typeof transformFn&&fluid.fail("Transformation record specifies transformation function with name "+transformSpec.type+" which is not a function - ",transformFn),fluid.hasGrade(expdef,"fluid.transformFunction")||(expdef=fluid.defaults("fluid.standardTransformFunction"));var transformArgs=[transformSpec,transformer];if(fluid.hasGrade(expdef,"fluid.multiInputTransformFunction")){var inputs={};fluid.each(expdef.inputVariables,(function(v,k){inputs[k]=function(){var input=fluid.model.transform.getValue(transformSpec[k+"Path"],transformSpec[k],transformer);return input=void 0===input&&null!==v?v:input}})),transformArgs.unshift(inputs)}if(fluid.hasGrade(expdef,"fluid.standardInputTransformFunction")){"input"in transformSpec||"inputPath"in transformSpec||fluid.fail('Error in transform specification. Either "input" or "inputPath" must be specified for a standardInputTransformFunction: received ',transformSpec);var expanded=fluid.model.transform.getValue(transformSpec.inputPath,transformSpec.input,transformer);if(transformArgs.unshift(expanded),void 0===expanded)return}var transformed=transformFn.apply(null,transformArgs);fluid.hasGrade(expdef,"fluid.standardOutputTransformFunction")&&(void 0!==(void 0!==transformSpec.outputPath?transformSpec.outputPath:transformOpts.doOutput?"":void 0)&&void 0!==transformed&&(fluid.model.transform.setValue(transformSpec.outputPath,transformed,transformer),transformed=void 0));return transformed};var globalAccept=[];fluid.registerNamespace("fluid.pathUtil"),fluid.pathUtil.getPathSegment=function(path,i){return fluid.pathUtil.getPathSegmentImpl(globalAccept,path,i),globalAccept[0]},fluid.pathUtil.getHeadPath=function(path){return fluid.pathUtil.getPathSegment(path,0)},fluid.pathUtil.getFromHeadPath=function(path){var firstdot=fluid.pathUtil.getPathSegmentImpl(null,path,0);return firstdot===path.length?"":path.substring(firstdot+1)},fluid.pathUtil.matchPath=function(spec,path,exact){for(var togo=[];;){if(""===path^""===spec&&exact)return null;if(!spec||!path)break;var spechead=fluid.pathUtil.getHeadPath(spec),pathhead=fluid.pathUtil.getHeadPath(path);if("*"!==spechead&&spechead!==pathhead)return null;togo.push(pathhead),spec=fluid.pathUtil.getFromHeadPath(spec),path=fluid.pathUtil.getFromHeadPath(path)}return togo},fluid.model.transform.expandWildcards=function(transformer,source){fluid.each(source,(function(value,key){var q=transformer.queuedTransforms;transformer.pathOp.push(fluid.pathUtil.escapeSegment(key.toString()));for(var i=0;i<q.length;++i)if(fluid.pathUtil.matchPath(q[i].matchPath,transformer.path,!0)){var esCopy=fluid.copy(q[i].transformSpec);(void 0===esCopy.inputPath||fluid.model.transform.hasWildcard(esCopy.inputPath))&&(esCopy.inputPath=""),transformer.inputPrefixOp.push(transformer.path),transformer.outputPrefixOp.push(transformer.path);var transformOpts=fluid.model.transform.lookupType(esCopy.type),result=fluid.model.transform.doTransform(esCopy,transformer,transformOpts);void 0!==result&&fluid.model.transform.setValue(null,result,transformer),transformer.outputPrefixOp.pop(),transformer.inputPrefixOp.pop()}fluid.isPrimitive(value)||fluid.model.transform.expandWildcards(transformer,value),transformer.pathOp.pop()}))},fluid.model.transform.hasWildcard=function(path){return"string"==typeof path&&-1!==path.indexOf("*")},fluid.model.transform.maybePushWildcard=function(transformSpec,transformer){var matchPath,hw=fluid.model.transform.hasWildcard;return hw(transformSpec.inputPath)?matchPath=fluid.model.composePaths(transformer.inputPrefix,transformSpec.inputPath):(hw(transformer.outputPrefix)||hw(transformSpec.outputPath))&&(matchPath=fluid.model.composePaths(transformer.outputPrefix,transformSpec.outputPath)),!!matchPath&&(transformer.queuedTransforms.push({transformSpec:transformSpec,outputPrefix:transformer.outputPrefix,inputPrefix:transformer.inputPrefix,matchPath:matchPath}),!0)},fluid.model.sortByKeyLength=function(inObject){return fluid.keys(inObject).sort(fluid.compareStringLength(!0))},fluid.model.transform.handleTransformStrategy=function(transformSpec,transformer,transformOpts){return fluid.model.transform.maybePushWildcard(transformSpec,transformer)?void 0:fluid.model.transform.doTransform(transformSpec,transformer,transformOpts)},fluid.model.transform.handleInvertStrategy=function(transformSpec,transformer,transformOpts){transformSpec=fluid.copy(transformSpec),fluid.hasGrade(transformOpts.defaults,"fluid.standardTransformFunction")&&(transformSpec=fluid.model.transform.invertPaths(transformSpec,transformer));var invertor=transformOpts.defaults&&transformOpts.defaults.invertConfiguration;if(invertor){var inverted=fluid.invokeGlobalFunction(invertor,[transformSpec,transformer]);transformer.inverted.push(inverted)}else transformer.inverted.push(fluid.model.transform.uninvertibleTransform)},fluid.model.transform.handleCollectStrategy=function(transformSpec,transformer,transformOpts){var defaults=transformOpts.defaults,standardInput=fluid.hasGrade(defaults,"fluid.standardInputTransformFunction"),multiInput=fluid.hasGrade(defaults,"fluid.multiInputTransformFunction");standardInput&&fluid.model.transform.accumulateStandardInputPath("input",transformSpec,transformer,transformer.inputPaths),multiInput&&fluid.model.transform.accumulateMultiInputPaths(defaults.inputVariables,transformSpec,transformer,transformer.inputPaths);var collector=defaults.collectInputPaths;if(collector){var collected=fluid.makeArray(fluid.invokeGlobalFunction(collector,[transformSpec,transformer]));Array.prototype.push.apply(transformer.inputPaths,collected)}},fluid.model.transform.lookupType=function(typeName,transformSpec){return typeName||fluid.fail("Transformation record is missing a type name: ",transformSpec),-1===typeName.indexOf(".")&&(typeName="fluid.transforms."+typeName),{defaults:fluid.defaults(typeName),typeName:typeName}},fluid.model.transform.processRule=function(rule,transformer){var togo,transformSpec,transformOpts;if("string"==typeof rule?rule=fluid.model.transform.pathToRule(rule):void 0!==rule.literalValue&&(rule=fluid.model.transform.literalValueToRule(rule.literalValue)),rule.transform)if(fluid.isArrayable(rule.transform)){var transforms=rule.transform;togo=void 0;for(var i=0;i<transforms.length;++i)transformSpec=transforms[i],transformOpts=fluid.model.transform.lookupType(transformSpec.type),transformer.transformHandler(transformSpec,transformer,transformOpts)}else transformSpec=rule.transform,transformOpts=fluid.model.transform.lookupType(transformSpec.type),togo=transformer.transformHandler(transformSpec,transformer,transformOpts);return fluid.isArrayable(rule)&&(transformer.collectedFlatSchemaOpts=transformer.collectedFlatSchemaOpts||{},transformer.collectedFlatSchemaOpts[transformer.outputPrefix]="array"),fluid.each(rule,(function(value,key){if("transform"!==key){transformer.outputPrefixOp.push(key);var togo=transformer.expand(value,transformer);void 0!==togo&&(fluid.model.transform.setValue(null,togo,transformer),togo=void 0),transformer.outputPrefixOp.pop()}})),togo},fluid.model.transform.makeStrategy=function(transformer,handleFn,transformFn){transformFn=transformFn||fluid.model.transform.processRule,transformer.expand=function(rules){return transformFn(rules,transformer)},transformer.outputPrefixOp=fluid.model.makePathStack(transformer,"outputPrefix"),transformer.inputPrefixOp=fluid.model.makePathStack(transformer,"inputPrefix"),transformer.transformHandler=handleFn},fluid.model.transform.uninvertibleTransform=Object.freeze({}),fluid.model.transform.invertConfiguration=function(rules){var transformer={inverted:[]};return fluid.model.transform.makeStrategy(transformer,fluid.model.transform.handleInvertStrategy),transformer.expand(rules),-1===transformer.inverted.indexOf(fluid.model.transform.uninvertibleTransform)?{transform:transformer.inverted}:fluid.model.transform.uninvertibleTransform},fluid.model.transform.collectInputPaths=function(rules){var transformer={inputPaths:[]};fluid.model.transform.makeStrategy(transformer,fluid.model.transform.handleCollectStrategy),transformer.expand(rules);var inputPathHash=fluid.arrayToHash(transformer.inputPaths);return Object.keys(inputPathHash)},fluid.model.transform.flatSchemaStrategy=function(flatSchema,getConfig){var keys=fluid.model.sortByKeyLength(flatSchema);return function(root,segment,index,segs){for(var path=getConfig.parser.compose.apply(null,segs.slice(0,index)),i=0;i<keys.length;++i){var key=keys[i];if(null!==fluid.pathUtil.matchPath(key,path,!0))return flatSchema[key]}}},fluid.model.transform.defaultSchemaValue=function(schemaValue){return"array"===(fluid.isPrimitive(schemaValue)?schemaValue:schemaValue.type)?[]:{}},fluid.model.transform.isomorphicSchemaStrategy=function(source,getConfig){return function(root,segment,index,segs){var existing=fluid.get(source,segs.slice(0,index),getConfig);return fluid.isArrayable(existing)?"array":"object"}},fluid.model.transform.decodeStrategy=function(source,options,getConfig){return options.isomorphic?fluid.model.transform.isomorphicSchemaStrategy(source,getConfig):options.flatSchema?fluid.model.transform.flatSchemaStrategy(options.flatSchema,getConfig):void 0},fluid.model.transform.schemaToCreatorStrategy=function(strategy){return function(root,segment,index,segs){if(void 0===root[segment]){var schemaValue=strategy(root,segment,index,segs);return root[segment]=fluid.model.transform.defaultSchemaValue(schemaValue),root[segment]}}},fluid.model.transform.sequence=function(source,rules,options){for(var i=0;i<rules.length;++i)source=fluid.model.transform(source,rules[i],options);return source},fluid.model.compareByPathLength=function(changea,changeb){var pdiff=changea.path.length-changeb.path.length;return 0===pdiff?changea.sequence-changeb.sequence:pdiff},fluid.model.fireSortedChanges=function(changes,applier){changes.sort(fluid.model.compareByPathLength),fluid.fireChanges(applier,changes)},fluid.model.transformWithRules=function(source,rules,options){options=options||{};var getConfig=fluid.model.escapedGetConfig,setConfig=fluid.model.escapedSetConfig,schemaStrategy=fluid.model.transform.decodeStrategy(source,options,getConfig),transformer={source:source,target:{model:schemaStrategy?fluid.model.transform.defaultSchemaValue(schemaStrategy(null,"",0,[""])):{}},oldSource:options.oldSource,oldTarget:options.oldTarget,resolverGetConfig:getConfig,resolverSetConfig:setConfig,collectedFlatSchemaOpts:void 0,queuedChanges:[],queuedTransforms:[]};fluid.model.transform.makeStrategy(transformer,fluid.model.transform.handleTransformStrategy),transformer.applier={fireChangeRequest:function(changeRequest){changeRequest.sequence=transformer.queuedChanges.length,transformer.queuedChanges.push(changeRequest)}},fluid.bindRequestChange(transformer.applier),transformer.expand(rules);var rootSetConfig=fluid.copy(setConfig);return void 0!==transformer.collectedFlatSchemaOpts&&($.extend(transformer.collectedFlatSchemaOpts,options.flatSchema),schemaStrategy=fluid.model.transform.flatSchemaStrategy(transformer.collectedFlatSchemaOpts,getConfig)),rootSetConfig.strategies=[fluid.model.defaultFetchStrategy,schemaStrategy?fluid.model.transform.schemaToCreatorStrategy(schemaStrategy):fluid.model.defaultCreatorStrategy],transformer.finalApplier=options.finalApplier||fluid.makeHolderChangeApplier(transformer.target,{resolverSetConfig:rootSetConfig}),transformer.queuedTransforms.length>0&&(transformer.typeStack=[],transformer.pathOp=fluid.model.makePathStack(transformer,"path"),fluid.model.transform.expandWildcards(transformer,source)),fluid.model.fireSortedChanges(transformer.queuedChanges,transformer.finalApplier),transformer.target.model},$.extend(fluid.model.transformWithRules,fluid.model.transform),fluid.model.transform=fluid.model.transformWithRules,fluid.transformOne=function(rules){return{transformOptions:{transformer:"fluid.model.transformWithRules",config:rules}}},fluid.transformMany=function(rules){return{transformOptions:{transformer:"fluid.model.transform.sequence",config:rules}}},fluid.registerNamespace("fluid.model.transform"),fluid.registerNamespace("fluid.transforms"),fluid.defaults("fluid.transforms.value",{gradeNames:"fluid.standardTransformFunction",invertConfiguration:"fluid.identity"}),fluid.transforms.value=fluid.identity,fluid.transforms.identity=fluid.transforms.value,fluid.defaults("fluid.transforms.identity",{gradeNames:"fluid.transforms.value"}),fluid.transforms.invertToIdentity=function(transformSpec){return transformSpec.type="fluid.transforms.identity",transformSpec},fluid.defaults("fluid.transforms.literalValue",{gradeNames:"fluid.standardOutputTransformFunction"}),fluid.transforms.literalValue=function(transformSpec){return transformSpec.input},fluid.defaults("fluid.transforms.stringToNumber",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.stringToNumber.invert"}),fluid.transforms.stringToNumber=function(value){var newValue=Number(value);return isNaN(newValue)?void 0:newValue},fluid.transforms.stringToNumber.invert=function(transformSpec){return transformSpec.type="fluid.transforms.numberToString",transformSpec},fluid.defaults("fluid.transforms.numberToString",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.numberToString.invert"}),fluid.transforms.numberToString=function(value,transformSpec){if("number"==typeof value)return"number"!=typeof transformSpec.scale||isNaN(transformSpec.scale)?value.toString():fluid.roundToDecimal(value,transformSpec.scale,transformSpec.method).toString()},fluid.transforms.numberToString.invert=function(transformSpec){return transformSpec.type="fluid.transforms.stringToNumber",transformSpec},fluid.defaults("fluid.transforms.count",{gradeNames:"fluid.standardTransformFunction"}),fluid.transforms.count=function(value){return fluid.makeArray(value).length},fluid.defaults("fluid.transforms.round",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.invertToIdentity"}),fluid.transforms.round=function(value,transformSpec){return fluid.roundToDecimal(value,transformSpec.scale,transformSpec.method)},fluid.defaults("fluid.transforms.delete",{gradeNames:"fluid.transformFunction"}),fluid.transforms.delete=function(transformSpec,transformer){var outputPath=fluid.model.composePaths(transformer.outputPrefix,transformSpec.outputPath);transformer.applier.change(outputPath,null,"DELETE")},fluid.defaults("fluid.transforms.firstValue",{gradeNames:"fluid.standardOutputTransformFunction"}),fluid.transforms.firstValue=function(transformSpec,transformer){transformSpec.values&&transformSpec.values.length||fluid.fail('firstValue transformer requires an array of values at path named "values", supplied',transformSpec);for(var i=0;i<transformSpec.values.length;i++){var value=transformSpec.values[i],expanded=transformer.expand(value);if(void 0!==expanded)return expanded}},fluid.defaults("fluid.transforms.linearScale",{gradeNames:["fluid.multiInputTransformFunction","fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.linearScale.invert",inputVariables:{factor:1,offset:0}}),fluid.transforms.linearScale=function(input,extraInputs){var factor=extraInputs.factor(),offset=extraInputs.offset();if("number"==typeof input&&"number"==typeof factor&&"number"==typeof offset)return input*factor+offset},fluid.transforms.linearScale.invert=function(transformSpec){return delete transformSpec.factorPath,delete transformSpec.offsetPath,void 0!==transformSpec.factor&&(transformSpec.factor=0===transformSpec.factor?0:1/transformSpec.factor),void 0!==transformSpec.offset&&(transformSpec.offset=-transformSpec.offset*(void 0!==transformSpec.factor?transformSpec.factor:1)),transformSpec},fluid.defaults("fluid.transforms.binaryOp",{gradeNames:["fluid.multiInputTransformFunction","fluid.standardOutputTransformFunction"],inputVariables:{left:null,right:null}}),fluid.transforms.binaryLookup={"===":function(a,b){return fluid.model.isSameValue(a,b)},"!==":function(a,b){return!fluid.model.isSameValue(a,b)},"<=":function(a,b){return a<=b},"<":function(a,b){return a<b},">=":function(a,b){return a>=b},">":function(a,b){return a>b},"+":function(a,b){return a+b},"-":function(a,b){return a-b},"*":function(a,b){return a*b},"/":function(a,b){return a/b},"%":function(a,b){return a%b},"&&":function(a,b){return a&&b},"||":function(a,b){return a||b}},fluid.transforms.binaryOp=function(inputs,transformSpec,transformer){var left=inputs.left(),right=inputs.right(),operator=fluid.model.transform.getValue(void 0,transformSpec.operator,transformer),fun=fluid.transforms.binaryLookup[operator];return void 0===fun||void 0===left||void 0===right?void 0:fun(left,right)},fluid.defaults("fluid.transforms.condition",{gradeNames:["fluid.multiInputTransformFunction","fluid.standardOutputTransformFunction"],inputVariables:{true:null,false:null,condition:null}}),fluid.transforms.condition=function(inputs){var condition=inputs.condition();if(null!==condition)return inputs[condition?"true":"false"]()},fluid.defaults("fluid.transforms.valueMapper",{gradeNames:["fluid.lens"],invertConfiguration:"fluid.transforms.valueMapper.invert",collectInputPaths:"fluid.transforms.valueMapper.collect"}),fluid.model.transform.compareMatches=function(speca,specb){var matchDiff=specb.matchValue-speca.matchValue;return 0===matchDiff?speca.index-specb.index:matchDiff},fluid.transforms.valueMapper=function(transformSpec,transformer){transformSpec.match||fluid.fail('valueMapper requires an array or hash of matches at path named "match", supplied ',transformSpec);var value=fluid.model.transform.getValue(transformSpec.defaultInputPath,transformSpec.defaultInput,transformer),matchedEntry=fluid.isArrayable(transformSpec.match)?fluid.transforms.valueMapper.longFormMatch(value,transformSpec,transformer):transformSpec.match[value];if(void 0===matchedEntry&&(matchedEntry=transformSpec.noMatch),void 0!==matchedEntry){var outputValue,outputPath=void 0===matchedEntry.outputPath?transformSpec.defaultOutputPath:matchedEntry.outputPath;return transformer.outputPrefixOp.push(outputPath),outputValue=fluid.isPrimitive(matchedEntry)?matchedEntry:matchedEntry.outputUndefinedValue?void 0:void 0===(outputValue=fluid.model.transform.resolveParam(matchedEntry,transformer,"outputValue",void 0))?transformSpec.defaultOutputValue:outputValue,"string"==typeof outputPath&&void 0!==outputValue&&(fluid.model.transform.setValue(void 0,outputValue,transformer,transformSpec.merge),outputValue=void 0),transformer.outputPrefixOp.pop(),outputValue}},fluid.transforms.valueMapper.longFormMatch=function(valueFromDefaultPath,transformSpec,transformer){var o=transformSpec.match;0===o.length&&fluid.fail("valueMapper supplied empty list of matches: ",transformSpec);for(var matchPower=[],i=0;i<o.length;++i){var option=o[i],value=option.inputPath?fluid.model.transform.getValue(option.inputPath,void 0,transformer):valueFromDefaultPath,matchValue=fluid.model.transform.matchValue(option.inputValue,value,option.partialMatches);matchPower[i]={index:i,matchValue:matchValue}}return matchPower.sort(fluid.model.transform.compareMatches),matchPower[0].matchValue<=0?void 0:o[matchPower[0].index]},fluid.transforms.valueMapper.invert=function(transformSpec,transformer){var match=[],togo={type:"fluid.transforms.valueMapper",match:match},isArray=fluid.isArrayable(transformSpec.match);togo.defaultInputPath=fluid.model.composePaths(transformer.outputPrefix,transformSpec.defaultOutputPath),togo.defaultOutputPath=fluid.model.composePaths(transformer.inputPrefix,transformSpec.defaultInputPath);var def=fluid.firstDefined;return fluid.each(transformSpec.match,(function(option,key){if(!0!==option.outputUndefinedValue){var outOption={},origInputValue=def(isArray?option.inputValue:key,transformSpec.defaultInputValue);void 0===origInputValue&&fluid.fail("Failure inverting configuration for valueMapper - inputValue could not be resolved for record "+key+": ",transformSpec),outOption.outputValue=origInputValue,outOption.inputValue=!isArray&&fluid.isPrimitive(option)?option:def(option.outputValue,transformSpec.defaultOutputValue),option.outputPath&&(outOption.inputPath=fluid.model.composePaths(transformer.outputPrefix,def(option.outputPath,transformSpec.outputPath))),option.inputPath&&(outOption.outputPath=fluid.model.composePaths(transformer.inputPrefix,def(option.inputPath,transformSpec.inputPath))),match.push(outOption)}})),togo},fluid.transforms.valueMapper.collect=function(transformSpec,transformer){var togo=[];return fluid.model.transform.accumulateStandardInputPath("defaultInput",transformSpec,transformer,togo),fluid.each(transformSpec.match,(function(option){fluid.model.transform.accumulateInputPath(option.inputPath,transformer,togo)})),togo},fluid.defaults("fluid.transforms.arrayToSetMembership",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.arrayToSetMembership.invert"}),fluid.transforms.arrayToSetMembership=function(value,transformSpec){value&&fluid.isArrayable(value)||fluid.fail("arrayToSetMembership didn't find array at inputPath nor passed as value.");var output=(transformSpec=transformSpec||{}).arrayValue?[]:{},presentValue=void 0===transformSpec.presentValue||transformSpec.presentValue,missingValue=void 0!==transformSpec.missingValue&&transformSpec.missingValue,options=transformSpec.options;return void 0===options?fluid.each(value,(function(outPath){output[outPath]=presentValue})):fluid.each(options,(function(outPath,key){var outVal=-1!==value.indexOf(key)?presentValue:missingValue;output[outPath]=outVal})),output},fluid.transforms.arrayToSetMembership.invert=function(transformSpec){return fluid.transforms.arrayToSetMembership.invertWithType(transformSpec,"fluid.transforms.setMembershipToArray")},fluid.transforms.arrayToSetMembership.invertWithType=function(transformSpec,newType){transformSpec.type=newType;var newOptions={};return fluid.each(transformSpec.options,(function(path,oldKey){newOptions[path]=oldKey})),$.isEmptyObject(newOptions)||(transformSpec.options=newOptions),transformSpec},fluid.defaults("fluid.transforms.setMembershipToArray",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.setMembershipToArray.invert"}),fluid.transforms.setMembershipToArray=function(input,transformSpec){fluid.isPlainObject(input)||fluid.fail("setMembershipToArray didn't find object at inputPath nor passed as value.");var outputArr=[],presentValue=void 0===(transformSpec=transformSpec||{}).presentValue||transformSpec.presentValue,options=transformSpec.options;return void 0===options?fluid.each(input,(function(keyValue,outputVal){keyValue===presentValue&&outputArr.push(outputVal)})):fluid.each(options,(function(outputVal,key){input[key]===presentValue&&outputArr.push(outputVal)})),outputArr},fluid.transforms.setMembershipToArray.invert=function(transformSpec){return fluid.transforms.arrayToSetMembership.invertWithType(transformSpec,"fluid.transforms.arrayToSetMembership")},fluid.model.transform.applyPaths=function(operation,pathOp,paths){for(var i=0;i<paths.length;++i)"push"===operation?pathOp.push(paths[i]):pathOp.pop()},fluid.model.transform.expandInnerValues=function(inputPath,outputPath,transformer,innerValues){var inputPrefixOp=transformer.inputPrefixOp,outputPrefixOp=transformer.outputPrefixOp,apply=fluid.model.transform.applyPaths;apply("push",inputPrefixOp,inputPath),apply("push",outputPrefixOp,outputPath);var expanded={};return fluid.each(innerValues,(function(innerValue){var expandedInner=transformer.expand(innerValue);fluid.isPrimitive(expandedInner)?expanded=expandedInner:$.extend(!0,expanded,expandedInner)})),apply("pop",outputPrefixOp,outputPath),apply("pop",inputPrefixOp,inputPath),expanded},fluid.defaults("fluid.transforms.indexArrayByKey",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.indexArrayByKey.invert"}),fluid.transforms.indexArrayByKey=function(arr,transformSpec,transformer){void 0===transformSpec.key&&fluid.fail("indexArrayByKey requires a 'key' option.",transformSpec),fluid.isArrayable(arr)||fluid.fail("indexArrayByKey didn't find array at inputPath.",transformSpec);var newHash={},pivot=transformSpec.key;return fluid.each(arr,(function(v,k){var newKey=v[pivot],keyType=typeof newKey;"string"!==keyType&&"boolean"!==keyType&&"number"!==keyType&&fluid.fail("indexArrayByKey encountered untransformable array due to missing or invalid key",v);var content=fluid.copy(v);delete content[pivot],transformSpec.innerValue&&(content=fluid.model.transform.expandInnerValues([transformer.inputPrefix,transformSpec.inputPath,k.toString()],[transformSpec.outputPath,newKey],transformer,transformSpec.innerValue)),newHash[newKey]=content})),newHash},fluid.transforms.indexArrayByKey.invert=function(transformSpec){if(transformSpec.type="fluid.transforms.deindexIntoArrayByKey",transformSpec.innerValue)for(var innerValue=transformSpec.innerValue,i=0;i<innerValue.length;++i){var inverted=fluid.model.transform.invertConfiguration(innerValue[i]);if(inverted===fluid.model.transform.uninvertibleTransform)return inverted;innerValue[i]=inverted}return transformSpec},fluid.defaults("fluid.transforms.deindexIntoArrayByKey",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.deindexIntoArrayByKey.invert"}),fluid.transforms.deindexIntoArrayByKey=function(hash,transformSpec,transformer){void 0===transformSpec.key&&fluid.fail('deindexIntoArrayByKey requires a "key" option.',transformSpec);var newArray=[],pivot=transformSpec.key;return fluid.each(hash,(function(v,k){var content={};content[pivot]=k,transformSpec.innerValue&&(v=fluid.model.transform.expandInnerValues([transformSpec.inputPath,k],[transformSpec.outputPath,newArray.length.toString()],transformer,transformSpec.innerValue)),$.extend(!0,content,v),newArray.push(content)})),newArray},fluid.transforms.deindexIntoArrayByKey.invert=function(transformSpec){if(transformSpec.type="fluid.transforms.indexArrayByKey",transformSpec.innerValue)for(var innerValue=transformSpec.innerValue,i=0;i<innerValue.length;++i)innerValue[i]=fluid.model.transform.invertConfiguration(innerValue[i]);return transformSpec},fluid.defaults("fluid.transforms.limitRange",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.invertToIdentity"}),fluid.transforms.limitRange=function(value,transformSpec){var min=transformSpec.min;void 0!==min&&(value<(min+=transformSpec.excludeMin||0)&&(value=min));var max=transformSpec.max;void 0!==max&&(value>(max-=transformSpec.excludeMax||0)&&(value=max));return value},fluid.defaults("fluid.transforms.indexOf",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.indexOf.invert"}),fluid.transforms.indexOf=function(value,transformSpec){"number"==typeof transformSpec.notFound&&transformSpec.notFound>=0&&fluid.fail("A positive number is not allowed as 'notFound' value for indexOf");var offset=fluid.transforms.parseIndexationOffset(transformSpec.offset,"indexOf"),originalIndex=fluid.makeArray(transformSpec.array).indexOf(value);return-1===originalIndex&&transformSpec.notFound?transformSpec.notFound:originalIndex+offset},fluid.transforms.indexOf.invert=function(transformSpec,transformer){var togo=fluid.transforms.invertArrayIndexation(transformSpec,transformer);return togo.type="fluid.transforms.dereference",togo},fluid.defaults("fluid.transforms.dereference",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.dereference.invert"}),fluid.transforms.dereference=function(value,transformSpec){if("number"==typeof value){var offset=fluid.transforms.parseIndexationOffset(transformSpec.offset,"dereference");return fluid.makeArray(transformSpec.array)[value+offset]}},fluid.transforms.dereference.invert=function(transformSpec,transformer){var togo=fluid.transforms.invertArrayIndexation(transformSpec,transformer);return togo.type="fluid.transforms.indexOf",togo},fluid.transforms.parseIndexationOffset=function(offset,transformName){var parsedOffset=0;return void 0!==offset&&(parsedOffset=fluid.parseInteger(offset),isNaN(parsedOffset)&&fluid.fail(transformName+' requires the value of "offset" to be an integer or a string that can be converted to an integer. '+offset+" is invalid.")),parsedOffset},fluid.transforms.invertArrayIndexation=function(transformSpec){return isNaN(Number(transformSpec.offset))||(transformSpec.offset=-1*Number(transformSpec.offset)),transformSpec},fluid.defaults("fluid.transforms.stringTemplate",{gradeNames:"fluid.standardOutputTransformFunction"}),fluid.transforms.stringTemplate=function(transformSpec){return fluid.stringTemplate(transformSpec.template,transformSpec.terms)},fluid.defaults("fluid.transforms.free",{gradeNames:"fluid.transformFunction"}),fluid.transforms.free=function(transformSpec){var args=fluid.makeArray(transformSpec.args);return transformSpec.func||fluid.fail("Error in transform specification ",transformSpec,' required member "func" was not set'),fluid.event.invokeListener(transformSpec.func,args)},fluid.defaults("fluid.transforms.quantize",{gradeNames:"fluid.standardTransformFunction",collectInputPaths:"fluid.transforms.quantize.collect"}),fluid.transforms.quantize=function(value,transformSpec,transformer){transformSpec.ranges&&transformSpec.ranges.length||fluid.fail("fluid.transforms.quantize should have a key called ranges containing an array defining ranges to quantize");for(var i=0;i<transformSpec.ranges.length;i++){var rangeSpec=transformSpec.ranges[i];if(value<=rangeSpec.upperBound||void 0===rangeSpec.upperBound&&value>=Number.NEGATIVE_INFINITY)return fluid.isPrimitive(rangeSpec.output)?rangeSpec.output:transformer.expand(rangeSpec.output)}},fluid.transforms.quantize.collect=function(transformSpec,transformer){transformSpec.ranges.forEach((function(rangeSpec){fluid.isPrimitive(rangeSpec.output)||transformer.expand(rangeSpec.output)}))},fluid.defaults("fluid.transforms.inRange",{gradeNames:"fluid.standardTransformFunction"}),fluid.transforms.inRange=function(value,transformSpec){return(void 0===transformSpec.min||transformSpec.min<=value)&&(void 0===transformSpec.max||transformSpec.max>=value)},fluid.defaults("fluid.transforms.toggle",{gradeNames:["fluid.standardTransformFunction"],invertConfiguration:"fluid.transforms.toggle.invert",relayOptions:{forward:{excludeSource:"init"},backward:{includeSource:"init"}}}),fluid.transforms.toggle=function(source,transformSpec,transformer){var oldSource=transformer.oldSource,oldTarget=transformer.oldTarget,phase=(oldSource||0)-fluid.transforms.inverseToggle.base(oldTarget);return fluid.transforms.toggle.base(source+phase)},fluid.transforms.toggle.base=function(source){return(source||0)%2==1},fluid.transforms.toggle.invert=function(transformSpec){return transformSpec.type="fluid.transforms.inverseToggle",transformSpec},fluid.defaults("fluid.transforms.inverseToggle",{gradeNames:["fluid.standardTransformFunction"]}),fluid.transforms.inverseToggle=function(source,transformSpec,transformer){return transformer.originalTarget||void 0},fluid.transforms.inverseToggle.base=function(source){return source?1:0},fluid.transforms.parseClasses=function(classes){var classList=classes.match(fluid.transforms.parseClasses.rnothtmlwhite)||[];return fluid.arrayToHash(classList)},fluid.transforms.parseClasses.rnothtmlwhite=/[^\x20\t\r\n\f]+/g,fluid.transforms.stringToBoolean=function(value){return!!value&&!("0"===value||"false"===value)},fluid.transforms.stringToBoolean.invert=function(transformSpec){return transformSpec.type="fluid.transforms.booleanToString",transformSpec},fluid.defaults("fluid.transforms.stringToBoolean",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.stringToBoolean.invert"}),fluid.transforms.booleanToString=function(value){return value?"true":"false"},fluid.transforms.booleanToString.invert=function(transformSpec){return transformSpec.type="fluid.transforms.stringToBoolean",transformSpec},fluid.defaults("fluid.transforms.booleanToString",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.booleanToString.invert"}),fluid.transforms.JSONstringToObject=function(value){try{return JSON.parse(value)}catch(e){return}},fluid.transforms.JSONstringToObject.invert=function(transformSpec){return transformSpec.type="fluid.transforms.objectToJSONString",transformSpec},fluid.defaults("fluid.transforms.JSONstringToObject",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.JSONstringToObject.invert"}),fluid.transforms.objectToJSONString=function(value,transformSpec){var space=transformSpec.space||0;return JSON.stringify(value,null,space)},fluid.transforms.objectToJSONString.invert=function(transformSpec){return transformSpec.type="fluid.transforms.JSONstringToObject",transformSpec},fluid.defaults("fluid.transforms.objectToJSONString",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.objectToJSONString.invert"}),fluid.transforms.stringToDate=function(value){var date=new Date(value);return isNaN(date.getTime())?void 0:date},fluid.transforms.stringToDate.invert=function(transformSpec){return transformSpec.type="fluid.transforms.dateToString",transformSpec},fluid.defaults("fluid.transforms.stringToDate",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.stringToDate.invert"}),fluid.transforms.dateToString=function(value){if(value instanceof Date){var isoString=value.toISOString();return isoString.substring(0,isoString.indexOf("T"))}},fluid.transforms.dateToString.invert=function(transformSpec){return transformSpec.type="fluid.transforms.stringToDate",transformSpec},fluid.defaults("fluid.transforms.dateToString",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.dateToString.invert"}),fluid.transforms.dateTimeToString=function(value){return value instanceof Date?value.toISOString():void 0},fluid.defaults("fluid.transforms.dateTimeToString",{gradeNames:["fluid.standardTransformFunction","fluid.lens"],invertConfiguration:"fluid.transforms.dateToString.invert"}),fluid.registerNamespace("fluid.contextAware"),fluid.defaults("fluid.contextAware.marker",{gradeNames:["fluid.component"]}),fluid.contextAware.makeCheckMarkers=function(checks,path,instantiator){fluid.each(checks,(function(value,markerTypeName){fluid.constructSingle(path,{type:markerTypeName,gradeNames:"fluid.contextAware.marker",value:value},instantiator)}))},fluid.contextAware.performChecks=function(checkHash){return fluid.transform(checkHash,(function(checkRecord){return"function"==typeof checkRecord?checkRecord={func:checkRecord}:"string"==typeof checkRecord&&(checkRecord={funcName:checkRecord}),fluid.isPrimitive(checkRecord)?checkRecord:"value"in checkRecord?checkRecord.value:"func"in checkRecord?checkRecord.func():"funcName"in checkRecord?fluid.invokeGlobalFunction(checkRecord.funcName):void fluid.fail("Error in contextAwareness check record ",checkRecord," - must contain an entry with name value, func, or funcName")}))},fluid.contextAware.makeChecks=function(checkHash,path,instantiator){var checkOptions=fluid.contextAware.performChecks(checkHash);fluid.contextAware.makeCheckMarkers(checkOptions,path,instantiator)},fluid.contextAware.forgetChecks=function(markerNames,path,instantiator){instantiator=instantiator||fluid.globalInstantiator,path=path||[];var markerArray=fluid.makeArray(markerNames);fluid.each(markerArray,(function(markerName){var memberName=fluid.typeNameToMemberName(markerName),segs=fluid.model.parseToSegments(path,instantiator.parseEL,!0);segs.push(memberName),fluid.destroy(segs,instantiator)}))},fluid.defaults("fluid.contextAware",{mergePolicy:{contextAwareness:"noexpand"},contextAwareness:{}}),fluid.contextAware.getCheckValue=function(that,reference){var targetRef=fluid.parseContextReference(reference),targetComponent=fluid.resolveContext(targetRef.context,that),path=targetRef.path||(fluid.isComponent(targetComponent)&&fluid.componentHasGrade(targetComponent,"fluid.contextAware.marker")?["options","value"]:[]);return fluid.getForComponent(targetComponent,path)},fluid.contextAware.checkOne=function(that,contextAwareRecord){contextAwareRecord.checks&&contextAwareRecord.checks.contextValue&&fluid.fail("Nesting error in contextAwareness record ",contextAwareRecord,' - the "checks" entry must contain a hash and not a contextValue/gradeNames record at top level');var checkList=fluid.parsePriorityRecords(contextAwareRecord.checks,"contextAwareness checkRecord");return fluid.find(checkList,(function(check){check.contextValue||fluid.fail("Cannot perform check for contextAwareness record ",check,' without a valid field named "contextValue"');var value=fluid.contextAware.getCheckValue(that,check.contextValue);if(void 0===check.equals?value:value===check.equals)return check.gradeNames}),contextAwareRecord.defaultGradeNames)},fluid.contextAware.check=function(that,contextAwarenessOptions){var gradeNames=[],contextAwareList=fluid.parsePriorityRecords(contextAwarenessOptions,"contextAwareness adaptationRecord");return fluid.each(contextAwareList,(function(record){var matched=fluid.contextAware.checkOne(that,record);gradeNames=gradeNames.concat(fluid.makeArray(matched))})),gradeNames},fluid.contextAware.makeAdaptation=function(options){fluid.expect("fluid.contextAware.makeAdaptation",options,["distributionName","targetName","adaptationName","checkName","record"]),fluid.defaults(options.distributionName,{gradeNames:["fluid.component"],distributeOptions:{target:"{/ "+options.targetName+"}.options.contextAwareness."+options.adaptationName+".checks."+options.checkName,record:options.record}}),fluid.constructSingle([],options.distributionName)},fluid.contextAware.isBrowser=function(){return"undefined"!=typeof window&&!!window.document},fluid.contextAware.isNode=function(){return"undefined"!=typeof process&&process.versions&&process.versions.node},fluid.contextAware.makeChecks({"fluid.browser":{funcName:"fluid.contextAware.isBrowser"},"fluid.node":{funcName:"fluid.contextAware.isNode"}}),fluid.registerNamespace("fluid.contextAware.browser"),fluid.contextAware.browser.getPlatformName=function(){return"undefined"!=typeof navigator&&navigator.platform?navigator.platform:void 0},fluid.contextAware.browser.getUserAgent=function(){return"undefined"!=typeof navigator&&navigator.userAgent?navigator.userAgent:void 0},fluid.contextAware.makeChecks({"fluid.browser.platformName":{funcName:"fluid.contextAware.browser.getPlatformName"},"fluid.browser.userAgent":{funcName:"fluid.contextAware.browser.getUserAgent"}}),fluid.contextAware.isBrowser()&&$.fn&&$("head").append("<style type='text/css'>.fl-progEnhance-basic, .fl-ProgEnhance-basic { display: none; } .fl-progEnhance-enhanced, .fl-ProgEnhance-enhanced { display: block; }</style>"),fluid.apply=function(options){return options.func.apply(null,options.args)},fluid.defaults("fluid.baseViewComponent",{gradeNames:"fluid.component",argumentMap:{container:0,options:1},events:{onDomBind:"promise"},listeners:{"onCreate.onDomBind":"{that}.events.onDomBind"},selectors:{},members:{dom:"@expand:fluid.createDomBinder({that}.container, {that}.options.selectors)",locate:"{that}.dom.locate"},mergePolicy:{"members.dom":"replace","members.container":"replace"}}),fluid.defaults("fluid.viewComponent",{gradeNames:["fluid.modelComponent","fluid.baseViewComponent"],members:{container:"@expand:fluid.containerForViewComponent({that}, {that}.options.container)"}}),fluid.dumpSelector=function(selectable){return"string"==typeof selectable?selectable:selectable.selector?selectable.selector:""},fluid.checkTryCatchParameter=function(){var GETparams=(window.location||{search:"",protocol:"file:"}).search.slice(1).split("&");return!0===fluid.find(GETparams,(function(param){if(0===param.indexOf("notrycatch"))return!0}))},fluid.notrycatch=fluid.checkTryCatchParameter(),fluid.wrap=function(obj,userJQuery){return userJQuery=userJQuery||$,!obj||obj.jquery?obj:userJQuery(obj)},fluid.unwrap=function(obj){return obj&&obj.jquery?obj[0]:obj},fluid.container=function(containerSpec,fallible,userJQuery){containerSpec||fluid.fail("fluid.container argument is empty");var selector=containerSpec.selector||containerSpec;userJQuery&&(containerSpec=fluid.unwrap(containerSpec));var container=fluid.wrap(containerSpec,userJQuery);if(fallible&&(!container||0===container.length))return null;if(!container||!container.jquery||1!==container.length){"string"!=typeof containerSpec&&(containerSpec=container.selector);var count=void 0!==container.length?container.length:0,extraMessage=container.selectorName?" with selector name "+container.selectorName+" in context "+fluid.dumpEl(containerSpec.context):"";fluid.fail((count>1?"More than one ("+count+") container elements were":"No container element was")+" found for selector "+containerSpec+extraMessage)}return fluid.isDOMNode(container[0])||fluid.fail("fluid.container was supplied a non-jQueryable element"),container.selector=selector,container.context=container.context||containerSpec.ownerDocument||document,container},fluid.createDomBinder=function(container,selectors){var userJQuery=container.constructor,that={container:container,id:fluid.allocateGuid(),doQuery:function(selector){return userJQuery(selector,that.container)},cache:{},locate:function(selectorName){var togo,selector="container"===selectorName?"":selectors[selectorName];return void 0===selector&&fluid.fail("DOM binder request for selector "+selectorName+" which is not registered"),(togo=""===selector?that.container:that.doQuery(selector,selectorName)).selector=selector,togo.context=that.container,togo.selectorName=selectorName,that.cache[selectorName]=togo,togo},fastLocate:function(selectorName){return that.cache[selectorName]||that.locate(selectorName)},resetContainer:function(container){that.container=container,that.clear()},clear:function(){that.cache={}}};return that.resolvePathSegment=that.locate,that},fluid.createLocalContainerDomBinder=function(container,selectors){var that={container:container,id:fluid.allocateGuid(),cache:{}},userJQuery=container.constructor;function cacheKey(name,thisContainer){return fluid.allocateSimpleId(thisContainer)+"-"+name}return that.locate=function(name,localContainer){var selector,thisContainer,togo;return void 0===(selector=selectors[name])&&("container"===name?selector="":fluid.fail("DOM binder request for selector "+name+" which is not registered")),(thisContainer=localContainer||that.container)||fluid.fail("DOM binder invoked for selector "+name+" without container"),(togo=""===selector?userJQuery(thisContainer):"function"==typeof selector?userJQuery(selector.call(null,fluid.unwrap(thisContainer))):userJQuery(selector,thisContainer)).selector||(togo.selector=selector,togo.context=thisContainer),togo.selectorName=name,function(name,thisContainer,result){that.cache[cacheKey(name,thisContainer)]=result}(name,thisContainer,togo),togo},that.fastLocate=function(name,localContainer){var key=cacheKey(name,localContainer||that.container),togo=that.cache[key];return togo||that.locate(name,localContainer)},that.resetContainer=function(container){that.container=container,that.clear()},that.clear=function(){that.cache={}},that.refresh=function(names,localContainer){var thisContainer=localContainer||that.container;"string"==typeof names&&(names=[names]),void 0===thisContainer.length&&(thisContainer=[thisContainer]);for(var i=0;i<names.length;++i)for(var j=0;j<thisContainer.length;++j)that.locate(names[i],thisContainer[j])},that.resolvePathSegment=that.locate,that},fluid.expectFilledSelector=function(result,message){result&&0===result.length&&result.jquery&&fluid.fail(message+': selector "'+result.selector+'" with name '+result.selectorName+" returned no results in context "+fluid.dumpEl(result.context))},fluid.containerForViewComponent=function(that,containerSpec){var container=fluid.container(containerSpec);return fluid.expectFilledSelector(container,'Error instantiating viewComponent at path "'+fluid.pathForComponent(that)),container},fluid.getId=function(element){return fluid.unwrap(element).id},fluid.allocateSimpleId=function(element){if(!(element=fluid.unwrap(element))||fluid.isPrimitive(element))return null;if(!element.id){var simpleId="fluid-id-"+fluid.allocateGuid();element.id=simpleId}return element.id},fluid.registerNamespace("fluid.materialisers"),fluid.makeDomMaterialiserManager=function(){return{idToModelListeners:{}}},fluid.checkMaterialisedElement=function(element,selectorName,that){element&&element.length||fluid.fail("Could not locate element for selector "+selectorName+" for component "+fluid.dumpComponentAndPath(that))},fluid.domMaterialiserManager=fluid.makeDomMaterialiserManager(),fluid.materialisers.domOutput=function(that,segs,type,options){fluid.freezeRecursive(segs);var selectorName=segs[1],listener=function(value){if(that.dom){var element=that.dom.locate(selectorName);if(fluid.checkMaterialisedElement(element,selectorName,that),"jQuery"===type){var model={value:value,segs:segs},args=options.makeArgs?options.makeArgs(model):[model.value];element[options.method].apply(element,args)}else if("booleanAttr"===type)if(void 0===value){var markupValue=!!element.attr(options.attr);that.applier.change(segs,options.negate?!markupValue:markupValue)}else{(options.negate?!value:value)?element.attr(options.attr,options.attr):element.removeAttr(options.attr)}}};that.applier.modelChanged.addListener({segs:segs},listener),that.events.onDomBind.addListener((function(){var modelValue=fluid.getImmediate(that.model,segs);listener(modelValue)}))},fluid.incrementModel=function(that,segs){var oldValue=fluid.getImmediate(that.model,segs)||0;that.applier.change(segs,oldValue+1)},fluid.materialisers.domClick=function(that,segs){var listener=function(){fluid.incrementModel(that,segs)};that.events.onDomBind.addListener((function(){that.dom.locate(segs[1]).click(listener)}))},fluid.materialisers.hover=function(that,segs){var makeListener=function(state){return function(){that.applier.change(segs,state)}};that.events.onDomBind.addListener((function(){that.dom.locate(segs[1]).hover(makeListener(!0),makeListener(!1))}))},fluid.materialisers.focusin=function(that,segs){var makeListener=function(state){return function(){that.applier.change(segs,state)}};that.events.onDomBind.addListener((function(){that.dom.locate(segs[1]).focusin(makeListener(!0)).focusout(makeListener(!1))}))},fluid.materialisers.id=function(that,segs){that.events.onDomBind.addListener((function(){var element=that.dom.locate(segs[1])[0],modelValue=fluid.getImmediate(that.model,segs);if(void 0===modelValue){var id=fluid.allocateSimpleId(element);that.applier.change(segs,id,"ADD","DOM")}else element.id=modelValue;that.applier.modelChanged.addListener({segs:segs},(function(value){void 0!==value&&(element.id=value)}))}))},fluid.materialisers.domValue=function(that,segs){that.events.onDomBind.addListener((function(){var element=that.dom.locate(segs[1]),modelListener=function(value){void 0!==value&&fluid.value(element,value)};that.applier.modelChanged.addListener({segs:segs},modelListener);var options=fluid.getImmediate(that,["options","bindingOptions",fluid.model.composeSegments.apply(null,segs)]),changeEvent=options&&options.changeEvent||"change";element.on(changeEvent,(function(){var val=fluid.value(element);that.applier.change(segs,val,"ADD","DOM")})),modelListener(fluid.getImmediate(that.model,segs))}))},fluid.materialisers.style=function(that,segs){var selectorName=segs[1];that.events.onDomBind.addListener((function(){var element=that.dom.locate(selectorName);fluid.checkMaterialisedElement(element,selectorName,that);var modelValue=fluid.getImmediate(that.model,segs);element[0].style[segs[3]]=modelValue}))},fluid.registerNamespace("fluid.materialiserRegistry"),fluid.materialiserRegistry["fluid.viewComponent"]={dom:{"*":{text:{materialiser:"fluid.materialisers.domOutput",args:["jQuery",{method:"text"}]},attr:{materialiser:"fluid.materialisers.domOutput",args:["jQuery",{method:"attr",makeArgs:function(model){return[model.segs[3],model.value]}}]},visible:{materialiser:"fluid.materialisers.domOutput",args:["jQuery",{method:"toggle"}]},enabled:{materialiser:"fluid.materialisers.domOutput",args:["booleanAttr",{attr:"disabled",negate:!0}]},click:{materialiser:"fluid.materialisers.domClick"},hover:{materialiser:"fluid.materialisers.hover"},focusin:{materialiser:"fluid.materialisers.focusin"},value:{materialiser:"fluid.materialisers.domValue"},class:{materialiser:"fluid.materialisers.domOutput",args:["jQuery",{method:"toggleClass",makeArgs:function(model){return[model.segs[3],!!model.value]}}]},style:{materialiser:"fluid.materialisers.style"},id:{materialiser:"fluid.materialisers.id"}}}},fluid.value=function(nodeIn,newValue){var node=fluid.unwrap(nodeIn),isMultiple=!1;if(void 0===node.nodeType&&node.length>1&&(node=node[0],isMultiple=!0),"input"!==node.nodeName.toLowerCase()||!/radio|checkbox/.test(node.type))return void 0===newValue?$(node).val():$(node).val(newValue);var elements,name=node.name;if(isMultiple||""===name)elements=nodeIn;else{elements=node.ownerDocument.getElementsByName(name);var scope=fluid.findForm(node);isMultiple=(elements=$.grep(elements,(function(element){return element.name===name&&(!scope||scope.contains(element))}))).length>1}if(void 0===newValue){var checked=$.map(elements,(function(element){return element.checked?element.value:null}));return"radio"===node.type?checked[0]:isMultiple?checked:!!checked[0]}"boolean"==typeof newValue&&(newValue=newValue?"true":"false"),$.each(elements,(function(){this.checked=newValue instanceof Array?-1!==newValue.indexOf(this.value):newValue===this.value}))},fluid.defaults("fluid.ariaLabeller",{gradeNames:"fluid.viewComponent"}),fluid.changeElementValue=function(node,value){node=$(node),fluid.value(node,value),node.change()},fluid.findAncestor=function(element,test){for(element=fluid.unwrap(element);element;){if(test(element))return element;element=element.parentNode}},fluid.findForm=function(node){return fluid.findAncestor(node,(function(element){return"form"===element.nodeName.toLowerCase()}))},fluid.each(["text","html"],(function(method){fluid[method]=function(node,newValue){return node=$(node),void 0===newValue?node[method]():node[method](newValue)}})),fluid.BINDING_ROOT_KEY="fluid-binding-root",fluid.findData=function(elem,name){for(;elem;){var data=$.data(elem,name);if(data)return data;elem=elem.parentNode}},fluid.bindFossils=function(node,data,fossils){$.data(node,fluid.BINDING_ROOT_KEY,{data:data,fossils:fossils})},fluid.boundPathForNode=function(node,fossils){var record=fossils[(node=fluid.unwrap(node)).name||node.id];return record?record.EL:null},fluid.applyBoundChange=function(node,newValue,applier){node=fluid.unwrap(node),void 0===newValue&&(newValue=fluid.value(node)),void 0===node.nodeType&&node.length>0&&(node=node[0]);var root=fluid.findData(node,fluid.BINDING_ROOT_KEY);root||fluid.fail("Bound data could not be discovered in any node above "+fluid.dumpEl(node));var name=node.name;root.fossils[name]||fluid.fail("No fossil discovered for name "+name+" in fossil record above "+fluid.dumpEl(node));var EL=root.fossils[name].EL;applier?applier.fireChangeRequest({path:EL,value:newValue,source:"DOM:"+node.id}):fluid.set(root.data,EL,newValue)},fluid.jById=function(id,dokkument){dokkument=dokkument&&9===dokkument.nodeType?dokkument:document;var element=fluid.byId(id,dokkument),togo=element?$(element):[];return togo.selector="#"+id,togo.context=dokkument,togo},fluid.byId=function(id,dokkument){var el=(dokkument=dokkument&&9===dokkument.nodeType?dokkument:document).getElementById(id);return el?(el.id!==id&&fluid.fail("Problem in document structure - picked up element "+fluid.dumpEl(el)+" for id "+id+" without this id - most likely the element has a name which conflicts with this id"),el):null},fluid.getDocument=function(element){var node=fluid.unwrap(element);return 9===node.nodeType?node:node.ownerDocument},fluid.defaults("fluid.ariaLabeller",{gradeNames:["fluid.viewComponent"],labelAttribute:"aria-label",liveRegionMarkup:'<div class="liveRegion fl-hidden-accessible" aria-live="polite"></div>',liveRegionId:"fluid-ariaLabeller-liveRegion",invokers:{generateLiveElement:{funcName:"fluid.ariaLabeller.generateLiveElement",args:"{that}"},update:{funcName:"fluid.ariaLabeller.update",args:["{that}","{arguments}.0"]}},listeners:{onCreate:{func:"{that}.update",args:[null]}}}),fluid.ariaLabeller.update=function(that,newOptions){if(newOptions=newOptions||that.options,that.container.attr(that.options.labelAttribute,newOptions.text),newOptions.dynamicLabel){var live=fluid.jById(that.options.liveRegionId);0===live.length&&(live=that.generateLiveElement()),live.text(newOptions.text)}},fluid.ariaLabeller.generateLiveElement=function(that){var liveEl=$(that.options.liveRegionMarkup);return liveEl.prop("id",that.options.liveRegionId),$("body").append(liveEl),liveEl};var LABEL_KEY="aria-labelling";fluid.getAriaLabeller=function(element){return element=$(element),fluid.getScopedData(element,LABEL_KEY)},fluid.updateAriaLabel=function(element,text,options){options=$.extend({},options||{},{text:text});var that=fluid.getAriaLabeller(element);return that?that.update(options):(that=fluid.ariaLabeller(element,options),fluid.setScopedData(element,LABEL_KEY,that)),that},fluid.dismissList={},$(document).click((function(event){for(var target=fluid.resolveEventTarget(event);target;){if(fluid.dismissList[target.id])return;target=target.parentNode}fluid.each(fluid.dismissList,(function(dismissFunc,key){dismissFunc(event),delete fluid.dismissList[key]}))})),fluid.globalDismissal=function(nodes,dismissFunc){fluid.each(nodes,(function(node){var id=fluid.unwrap(node).ownerDocument===document?fluid.allocateSimpleId(node):fluid.allocateGuid();dismissFunc?fluid.dismissList[id]=dismissFunc:delete fluid.dismissList[id]}))},fluid.deadMansBlur=function(control,options){var that={options:$.extend(!0,{},fluid.defaults("fluid.deadMansBlur"),options),blurPending:!1,lastCancel:0,canceller:function(event){fluid.log("Cancellation through "+event.type+" on "+fluid.dumpEl(event.target)),that.lastCancel=Date.now(),that.blurPending=!1},noteProceeded:function(){fluid.globalDismissal(that.options.exclusions)},reArm:function(){fluid.globalDismissal(that.options.exclusions,that.proceed)},addExclusion:function(exclusions){fluid.globalDismissal(exclusions,that.proceed)},proceed:function(event){fluid.log("Direct proceed through "+event.type+" on "+fluid.dumpEl(event.target)),that.blurPending=!1,that.options.handler(control)}};return fluid.each(that.options.exclusions,(function(exclusion){exclusion=$(exclusion),fluid.each(exclusion,(function(excludeEl){$(excludeEl).on("focusin",that.canceller).on("fluid-focus",that.canceller).click(that.canceller).mousedown(that.canceller)}))})),that.options.cancelByDefault?that.reArm():$(control).on("focusout",(function(event){fluid.log("Starting blur timer for element "+fluid.dumpEl(event.target));var now=Date.now();fluid.log("back delay: "+(now-that.lastCancel)),now-that.lastCancel>that.options.backDelay&&(that.blurPending=!0),setTimeout((function(){that.blurPending&&that.options.handler(control)}),that.options.delay)})),that},fluid.defaults("fluid.deadMansBlur",{gradeNames:"fluid.function",delay:150,backDelay:100}),fluid.defaults("fluid.newViewComponent",{gradeNames:"fluid.viewComponent",listeners:{"onCreate.onDomBind":null}}),fluid.defaults("fluid.containerRenderingView",{gradeNames:["fluid.newViewComponent"],members:{container:"@expand:{that}.renderContainer()"},parentContainer:"{that}.options.container",injectionType:"append",invokers:{renderMarkup:"fluid.identity({that}.options.markup.container)",renderContainer:"fluid.containerRenderingView.renderContainer({that}, {that}.renderMarkup, {that}.addToParent)",addToParent:{funcName:"fluid.containerRenderingView.addToParent",args:["{that}.options.parentContainer","{arguments}.0","{that}.options.injectionType"]}},workflows:{global:{evaluateContainers:{funcName:"fluid.renderer.evaluateContainers",priority:"last",waitIO:!0}}},listeners:{"onDestroy.clearInjectedMarkup":{this:"{that}.container",method:"remove",args:[]}}}),fluid.registerNamespace("fluid.renderer"),fluid.defaults("fluid.templateResourceFetcher",{gradeNames:"fluid.resourceLoader",rendererTemplateResources:{template:!0},skipTemplateFetch:!1,workflows:{global:{fetchTemplates:{funcName:"fluid.renderer.fetchTemplates",priority:"after:resolveResourceModel"}}}}),fluid.renderer.fetchTemplates=function(shadows){shadows.forEach((function(shadow){var that=shadow.that;if(fluid.componentHasGrade(that,"fluid.templateResourceFetcher")&&!fluid.getForComponent(that,["options","skipTemplateFetch"])){var rendererTemplateResources=fluid.getForComponent(that,["options","rendererTemplateResources"]);fluid.each(rendererTemplateResources,(function(value,key){value&&fluid.getForComponent(that,["resources",key])}))}}))},fluid.containerRenderingView.addToParent=function(parentContainer,elm,method){parentContainer||fluid.fail('fluid.containerRenderingView needs to have "parentContainer" or "container" option supplied'),method=method||"append",$(parentContainer)[method](elm)},fluid.renderer.evaluateContainers=function(shadows){shadows.forEach((function(shadow){fluid.getForComponent(shadow.that,"container")})),shadows.forEach((function(shadow){shadow.that.events.onDomBind.fire(shadow.that)}))},fluid.containerRenderingView.renderContainer=function(that,renderMarkup,addToParent){fluid.log("Rendering container for "+that.id);var containerMarkup=renderMarkup(),container=$(containerMarkup);return addToParent(container),container},fluid.defaults("fluid.templateRenderingView",{gradeNames:["fluid.containerRenderingView","fluid.templateResourceFetcher"],invokers:{renderMarkup:"fluid.identity({that}.resources.template.parsed)"},distributeOptions:{mapTemplateUrl:{source:"{that}.options.templateUrl",target:"{that}.options.resources.template.url"}}}),fluid.defaults("fluid.dataSource.encoding.JSON",{gradeNames:"fluid.component",invokers:{parse:"fluid.dataSource.parseJSON",render:"fluid.dataSource.stringifyJSON"},contentType:"application/json"}),fluid.defaults("fluid.dataSource.encoding.none",{gradeNames:"fluid.component",invokers:{parse:"fluid.identity",render:"fluid.identity"},contentType:"text/plain"}),fluid.dataSource.parseJSON=function(string){var togo=fluid.promise();if(string)try{togo.resolve(JSON.parse(string))}catch(err){togo.reject(err)}else togo.resolve(void 0);return togo},fluid.dataSource.stringifyJSON=function(obj){return void 0===obj?"":JSON.stringify(obj,null,4)},fluid.defaults("fluid.dataSource",{gradeNames:["fluid.component","fluid.contextAware"],contextAwareness:{writable:{checks:{writableValue:{contextValue:"{fluid.dataSource}.options.writable",gradeNames:"{fluid.dataSource}.options.writableGrade"}}}},writable:!1,events:{onRead:null,onError:null},components:{encoding:{type:"fluid.dataSource.encoding.JSON"}},listeners:{"onRead.impl":{func:"fluid.notImplemented",priority:"first"},"onRead.encoding":{func:"{encoding}.parse",priority:"after:impl"}},invokers:{get:{funcName:"fluid.dataSource.get",args:["{that}","{arguments}.0","{arguments}.1"]}}}),fluid.defaults("fluid.dataSource.writable",{gradeNames:["fluid.component"],events:{onWrite:null,onWriteResponse:null},listeners:{"onWrite.encoding":{func:"{encoding}.render"},"onWrite.impl":{func:"fluid.notImplemented",priority:"after:encoding"},"onWriteResponse.encoding":{func:"{encoding}.parse"}},invokers:{set:{funcName:"fluid.dataSource.set",args:["{that}","{arguments}.0","{arguments}.1","{arguments}.2"]}}}),fluid.dataSource.registerStandardPromiseHandlers=function(that,promise,requestOptions){promise.then(requestOptions.callback,requestOptions.onError?requestOptions.onError:that.events.onError.fire)},fluid.dataSource.defaultiseOptions=function(componentOptions,directOptions,directModel,isSet){var options="function"==typeof directOptions?{callback:directOptions}:fluid.copy(directOptions)||{};return options.directModel=directModel,options.operation=isSet?"set":"get",options.notFoundIsEmpty=options.notFoundIsEmpty||componentOptions.notFoundIsEmpty,options},fluid.dataSource.get=function(that,directModel,directOptions){var requestOptions=fluid.dataSource.defaultiseOptions(that.options,directOptions,directModel),promise=fluid.promise.fireTransformEvent(that.events.onRead,void 0,requestOptions);return fluid.dataSource.registerStandardPromiseHandlers(that,promise,requestOptions),promise},fluid.dataSource.set=function(that,directModel,model,directOptions){var requestOptions=fluid.dataSource.defaultiseOptions(that.options,directOptions,directModel,!0),transformPromise=fluid.promise.fireTransformEvent(that.events.onWrite,model,requestOptions),togo=fluid.promise();return transformPromise.then((function(setResponse){var options2=fluid.dataSource.defaultiseOptions(that.options,fluid.copy(requestOptions),directModel),retransformed=fluid.promise.fireTransformEvent(that.events.onWriteResponse,setResponse,options2);fluid.promise.follow(retransformed,togo)}),(function(error){togo.reject(error)})),fluid.dataSource.registerStandardPromiseHandlers(that,togo,requestOptions),togo},fluid.defaults("fluid.dataSource.URL",{gradeNames:["fluid.dataSource"],writableGrade:"fluid.dataSource.URL.writable",invokers:{resolveUrl:"fluid.dataSource.URL.resolveUrl",handleHttp:"fluid.dataSource.URL.handleHttp"},listeners:{"onRead.impl":{funcName:"fluid.dataSource.URL.handle",args:["{that}","{that}.options.permittedRequestOptions","{arguments}.0","{arguments}.1"]}},permittedRequestOptions:"fluid.dataSource.URL.requestOptions",components:{cookieJar:"{cookieJar}"},termMap:{}}),fluid.defaults("fluid.dataSource.URL.writable",{gradeNames:["fluid.dataSource.writable"],listeners:{"onWrite.impl":{funcName:"fluid.dataSource.URL.handle",args:["{that}","{that}.options.permittedRequestOptions","{arguments}.0","{arguments}.1"]}}}),fluid.dataSource.URL.resolveUrl=function(url,termMap,directModel,noencode){var map=fluid.transform(termMap,(function(entry){entry=String(entry);var encode=!noencode;0===entry.indexOf("noencode:")&&(encode=!1,entry=entry.substring("noencode:".length));var value="%"===entry.charAt(0)?fluid.get(directModel,entry.substring(1)):entry;return encode&&(value=encodeURIComponent(value)),value}));return fluid.stringTemplate(url,map)},fluid.dataSource.URL.urlFields=fluid.freezeRecursive(["protocol","username","password","hostname","port","pathname","search"]),fluid.dataSource.URL.condenseUrl=function(requestOptions){var togo=new fluid.resourceLoader.UrlClass("http://localhost/");return fluid.dataSource.URL.urlFields.forEach((function(field){requestOptions[field]&&(togo[field]=requestOptions[field])})),togo},fluid.dataSource.URL.requestOptions=fluid.dataSource.URL.urlFields.concat(["url","method","headers","termMap"]),fluid.dataSource.URL.prepareRequestOptions=function(componentOptions,cookieJar,userOptions,permittedOptions,directModel,userStaticOptions){var staticOptions=fluid.filterKeys(componentOptions,permittedOptions),requestOptions=fluid.extend(!0,{headers:{}},userStaticOptions,staticOptions,userOptions);return fluid.contextAware.isNode()&&"localhost"===requestOptions.hostname&&(requestOptions.hostname="127.0.0.1"),requestOptions.writeMethod=requestOptions.writeMethod||componentOptions.writeMethod||"PUT",requestOptions.pathname=fluid.dataSource.URL.resolveUrl(requestOptions.pathname,requestOptions.termMap,directModel),cookieJar&&cookieJar.cookie&&componentOptions.storeCookies&&(requestOptions.headers.Cookie=cookieJar.cookie),requestOptions},fluid.dataSource.URL.parse=function(url,permittedOptions){var parsed=fluid.filterKeys(new fluid.resourceLoader.UrlClass(url,"undefined"!=typeof window&&window.location||void 0),fluid.dataSource.URL.urlFields);return permittedOptions.forEach((function(oneOption){parsed[oneOption]||delete parsed[oneOption]})),parsed},fluid.dataSource.URL.isErrorStatus=function(statusCode){return statusCode<200||statusCode>=300},fluid.dataSource.URL.handle=function(that,permittedRequestOptions,model,userOptions){var permittedOptions=fluid.getGlobalValue(permittedRequestOptions);permittedOptions.forEach((function(oneOption){fluid.getForComponent(that,["options",oneOption])}));var directModel=userOptions.directModel,url=that.resolveUrl(that.options.url,that.options.termMap,directModel),parsed=fluid.dataSource.URL.parse(url,permittedOptions),finalRequestOptions=fluid.dataSource.URL.prepareRequestOptions(that.options,that.cookieJar,userOptions,permittedOptions,directModel,parsed);return that.handleHttp(that,finalRequestOptions,model)},fluid.extractHtmlError=function(received){var matches=/<pre>(.*)<\/pre>/gm.exec(received);return matches?matches[1]:received},fluid.dataSource.URL.relayError=function(statusCode,received,whileMsg){var rejectPayload;try{rejectPayload=JSON.parse(received)}catch(e){rejectPayload={message:"string"==typeof received&&-1!==received.indexOf("<html")?fluid.extractHtmlError(received):received}}return rejectPayload.message=rejectPayload.message||rejectPayload.error,delete rejectPayload.error,rejectPayload.isError=!0,rejectPayload.statusCode=statusCode,fluid.upgradeError(rejectPayload,whileMsg)},fluid.explodeLocalisedName=function(fileName,locale,defaultLocale){var lastDot=fileName.lastIndexOf(".");-1!==lastDot&&0!==lastDot||(lastDot=fileName.length);var baseName=fileName.substring(0,lastDot),extension=fileName.substring(lastDot),segs=locale.split("_"),exploded=fluid.transform(segs,(function(seg,index){var shortSegs=segs.slice(0,index+1);return baseName+"_"+shortSegs.join("_")+extension}));return defaultLocale&&exploded.unshift(baseName+"_"+defaultLocale+extension),exploded.unshift(fileName),exploded},fluid.fetchResources=function(resourceSpecs,callback,options){var that=fluid.makeResourceFetcher(resourceSpecs,callback,options,fluid.identity);return that.optionsReady.resolve(),that.fetchAll(),that},fluid.fetchResources.explodeForLocales=function(resourceFetcher){fluid.each(resourceFetcher.resourceSpecs,(function(resourceSpec){if(!resourceSpec.launched&&(resourceFetcher.options.defaultLocale&&void 0===resourceSpec.defaultLocale&&(resourceSpec.defaultLocale=resourceFetcher.options.defaultLocale),void 0===resourceSpec.locale&&(resourceSpec.locale=resourceFetcher.options.locale||resourceSpec.defaultLocale),resourceSpec.dataType=resourceSpec.dataType||resourceFetcher.options.dataType,resourceSpec.loader=fluid.resourceLoader.resolveResourceLoader(resourceSpec),!resourceSpec.loader.loader.noPath)){var pathKey=resourceSpec.loader.pathKey,path=resourceSpec[pathKey],resolvedPath=resourceSpec[pathKey]=resourceFetcher.transformResourceURL(path);resourceSpec.locale&&(resourceSpec.localeExploded=fluid.explodeLocalisedName(resolvedPath,resourceSpec.locale,resourceSpec.defaultLocale),resourceSpec.localeExplodedSpecs=fluid.transform(resourceSpec.localeExploded,(function(oneExploded){var togo={loader:resourceSpec.loader};return togo[pathKey]=oneExploded,togo}),fluid.fetchResources.prepareRequestOptions))}}))},fluid.fetchResources.launchExplodedLocales=function(localeExplodedSpecs,loader){var promiseArray=fluid.transform(localeExplodedSpecs,loader,(function(promise){var promiseToGo=fluid.promise();return promise.then((function(resolve){promiseToGo.resolve({resolved:resolve})}),(function(error){promiseToGo.resolve({rejected:error})})),promiseToGo}));return fluid.promise.sequence(promiseArray)},fluid.fetchResources.condenseExplodedLocales=function(resourceSpec,settledArray){var togo=fluid.promise();settledArray.reverse();var lastNonError=fluid.find(settledArray,(function(settled){return settled.resolved}));return lastNonError?togo.resolve(lastNonError):togo.reject({isError:!0,message:"No localised variants of the resource could be found at any of the paths "+resourceSpec.localeExploded.join(", ")}),togo},fluid.fetchResources.resolveLoaderTask=function(resourceSpec,loader){return resourceSpec.localeExplodedSpecs?function(){var togo=fluid.promise();return fluid.fetchResources.launchExplodedLocales(resourceSpec.localeExplodedSpecs,loader).then((function(settledArray){var condensed=fluid.fetchResources.condenseExplodedLocales(resourceSpec,settledArray);fluid.promise.follow(condensed,togo)})),togo}:function(){return loader(resourceSpec)}},fluid.fetchResources.checkCompletion=function(resourceSpecs,resourceFetcher){if(!fluid.find_if(resourceSpecs,(function(resourceSpec){return!resourceSpec.promise.disposition}))){var completionPromise=resourceFetcher.completionPromise;fluid.invokeLater((function(){completionPromise.disposition||completionPromise.resolve(resourceSpecs)}))}},fluid.fetchResources.noteResourceText=function(resourceText,options){return options.resourceSpec.resourceText=resourceText,resourceText},fluid.fetchResources.noteParsed=function(parsed,options){return options.resourceSpec.parsed=parsed,parsed},fluid.fetchResources.fireFetched=function(parsed,options){return options.resourceSpec.onFetched.fire(parsed),parsed},fluid.fetchResources.prepareRequestOptions=function(resourceSpec){var pathKey=resourceSpec.loader.pathKey,requestOptions={};return requestOptions[pathKey]=resourceSpec[pathKey],resourceSpec.options=$.extend(!0,{},resourceSpec.options,requestOptions),resourceSpec},fluid.fetchResources.initOneResource=function(resourceSpec){resourceSpec.promise=fluid.promise(),resourceSpec.launched=!1},fluid.fetchResources.subscribeOneResource=function(resourceSpec,key,ownerComponentId){resourceSpec.transformEvent&&fluid.fail("Cannot subscribe resource ",resourceSpec," which has already been subscribed for I/O"),resourceSpec.key=key,resourceSpec.transformEvent=fluid.makeEventFirer({name:'Transform chain for resource "'+key+'"',ownerId:ownerComponentId}),resourceSpec.transformEvent.addListener(fluid.fetchResources.noteParsed,"noteParsed","last");var parser=fluid.resourceLoader.resolveResourceParser(resourceSpec);resourceSpec.transformEvent.addListener(parser,"parser","before:noteParsed"),resourceSpec.transformEvent.addListener((function(parsed){return fluid.resourceLoader.renderImmutable(parsed,resourceSpec)}),"renderImmutable","after:parser"),resourceSpec.transformEvent.addListener(fluid.fetchResources.noteResourceText,"resourceText","before:parser"),resourceSpec.transformEvent.addListener(fluid.fetchResources.resolveLoaderTask(resourceSpec,resourceSpec.loader.loader),"loader","before:resourceText"),resourceSpec.onFetched=fluid.makeEventFirer({name:'onFetched event for resources "'+key+'"',ownerId:ownerComponentId}),resourceSpec.onError=fluid.makeEventFirer({name:'onError event for resources "'+key+'"',ownerId:ownerComponentId}),resourceSpec.transformEvent.addListener(fluid.fetchResources.fireFetched,"fireFetched","last"),fluid.fetchResources.prepareRequestOptions(resourceSpec),fluid.fetchResources.initOneResource(resourceSpec)},fluid.fetchResources.FetchOne=function(resourceSpec,resourceFetcher,segs){var FetchOne=this;FetchOne.resourceFetcher=resourceFetcher,FetchOne.resourceSpec=resourceSpec,FetchOne.segs=segs||[];var thisPromise=FetchOne.promise=fluid.promise();fluid.fetchResources.fetchOneResource(resourceSpec,resourceFetcher).then((function(){thisPromise.resolve(fluid.fetchResources.resolveFetchOne(FetchOne))}))},fluid.fetchResources.resolveFetchOne=function(FetchOne){return fluid.getImmediate(FetchOne.resourceSpec,FetchOne.segs)},fluid.fetchResources.FetchOne.prototype.resolvePathSegment=function(seg){return new fluid.fetchResources.FetchOne(this.resourceSpec,this.resourceFetcher,this.segs.concat(fluid.makeArray(seg)))},fluid.initResourceFetcher=function(resourceFetcher){resourceFetcher.completionPromise=fluid.promise(),fluid.fetchResources.explodeForLocales(resourceFetcher),resourceFetcher.onInit.fire(resourceFetcher.completionPromise)},fluid.resourceFetcher=function(){},fluid.makeResourceFetcher=function(sourceResourceSpecs,callback,options,transformResourceURL){options=options||{};var that=Object.create(fluid.resourceFetcher.prototype);return fluid.extend(that,{sourceResourceSpecs:sourceResourceSpecs,options:fluid.copy(options),optionsReady:fluid.promise(),onInit:fluid.makeEventFirer({name:"onInit for resourceFetcher",ownerId:options.ownerComponentId}),transformResourceURL:transformResourceURL}),that.fetchAll=function(){return fluid.fetchResources.fetchAll(that)},that.refetchAll=function(){return fluid.fetchResources.refetchAll(that)},that.fetchOneResource=function(key){return fluid.fetchResources.fetchOneResource(that.resourceSpecs[key],that)},that.refetchOneResource=function(key){return fluid.fetchResources.refetchOneResource(that.resourceSpecs[key],that)},that.resourceSpecs=fluid.copy(that.sourceResourceSpecs),that.onInit.addListener((function(completionPromise){completionPromise.then(callback,callback)})),fluid.each(options.onInitListeners,(function(args){that.onInit.addListener.apply(null,args)})),fluid.initResourceFetcher(that),fluid.each(that.resourceSpecs,(function(resourceSpec,key){fluid.fetchResources.subscribeOneResource(resourceSpec,key,that.options.ownerComponentId)})),that},fluid.fetchResources.fetchAll=function(resourceFetcher){return fluid.each(resourceFetcher.resourceSpecs,(function(resourceSpec){fluid.fetchResources.fetchOneResource(resourceSpec,resourceFetcher)})),fluid.fetchResources.checkCompletion(resourceFetcher.resourceSpecs,resourceFetcher),resourceFetcher.completionPromise},fluid.fetchResources.mutableResourceSpecFields=["promise","resourceText","parsed","locale","defaultLocale"],fluid.fetchResources.refetchOneResource=function(resourceSpec,resourceFetcher,defeatInitiate){return resourceSpec.promise.cancel(),fluid.fetchResources.mutableResourceSpecFields.forEach((function(field){delete resourceSpec[field]})),fluid.fetchResources.initOneResource(resourceSpec),defeatInitiate||fluid.fetchResources.initiateRefetch(resourceFetcher),resourceSpec.promise},fluid.fetchResources.initiateRefetch=function(resourceFetcher){resourceFetcher.completionPromise.cancel(),delete resourceFetcher.completionPromise,fluid.initResourceFetcher(resourceFetcher),fluid.fetchResources.fetchAll(resourceFetcher),resourceFetcher.fetchAll()},fluid.fetchResources.refetchAll=function(resourceFetcher,withoutLocales){var anyLaunched=!1;return fluid.each(resourceFetcher.resourceSpecs,(function(resourceSpec){(resourceSpec.locale||withoutLocales)&&(anyLaunched=!0,fluid.fetchResources.refetchOneResource(resourceSpec,resourceFetcher,!0))})),anyLaunched&&fluid.fetchResources.initiateRefetch(resourceFetcher),resourceFetcher.completionPromise},fluid.fetchResources.fireTransformEvent=function(resourceSpec,resourceFetcher){return fluid.promise.fireTransformEvent(resourceSpec.transformEvent,null,{resourceSpec:resourceSpec,resourceFetcher:resourceFetcher})},fluid.fetchResources.fetchOneResource=function(resourceSpec,resourceFetcher){return resourceSpec.launched||(resourceSpec.launched=!0,resourceFetcher.optionsReady.then((function(){var transformPromise=fluid.fetchResources.fireTransformEvent(resourceSpec,resourceFetcher);fluid.promise.follow(transformPromise,resourceSpec.promise),resourceSpec.promise.then((function(){fluid.fetchResources.checkCompletion(resourceFetcher.resourceSpecs,resourceFetcher)}),(function(error){resourceSpec.fetchError=error,resourceSpec.onError.fire(error),resourceFetcher.completionPromise.reject(error)}))}))),resourceSpec.promise},fluid.registerNamespace("fluid.resourceLoader.loaders"),fluid.resourceLoader.modelUpdated=function(resourceFetcher,modelOptions,early){resourceFetcher.options=$.extend(!0,{},resourceFetcher.options,modelOptions),early?resourceFetcher.optionsReady.resolve():resourceFetcher.refetchAll()},fluid.resourceLoader.sanitizeResourceSpec=function(resourceSpec){return fluid.transform(resourceSpec,(function(value){return fluid.isPrimitive(value)||fluid.isPlainObject(value)&&!fluid.isPromise(value)?value:fluid.NO_VALUE}))},fluid.ImmutableArray=function(){},fluid.ImmutableArray.prototype=[],fluid.ImmutableObject=function(){},fluid.copyImmutableResource=function(tocopy){var newContainer=fluid.isArrayable(tocopy)?new fluid.ImmutableArray:new fluid.ImmutableObject;return fluid.each(tocopy,(function(value,key){newContainer[key]=value})),newContainer},fluid.resourceLoader.renderImmutable=function(parsed,resourceSpec){return resourceSpec.immutableModelResource?fluid.copyImmutableResource(parsed):parsed},fluid.resourceLoader.resolveResourceLoader=function(resourceSpec){var loaders=[];return fluid.each(fluid.resourceLoader.loaders,(function(loader,key){fluid.isValue(resourceSpec[key])&&loaders.push({loader:loader,pathKey:key})})),0===loaders.length?loaders.push({loader:fluid.resourceLoader.loaders.noLoader}):loaders.length>1&&fluid.fail("Resource spec ",fluid.resourceLoader.sanitizeResourceSpec(resourceSpec)," is ambiguous because it has fields for multiple resource loaders filled out: at most one of the fields ",fluid.getMembers(loaders,"pathKey")," can be used"),loaders[0]},fluid.resourceLoader.loaders.resourceText=function(resourceSpec){return resourceSpec.resourceText},fluid.resourceLoader.loaders.resourceText.noPath=!0,fluid.resourceLoader.loaders.promiseFunc=function(resourceSpec){return fluid.event.resolveListener(resourceSpec.promiseFunc).apply(null,fluid.makeArray(resourceSpec.promiseArgs))},fluid.resourceLoader.loaders.promiseFunc.noPath=!0,fluid.resourceLoader.loaders.dataSource=function(resourceSpec){return fluid.getForComponent(resourceSpec.dataSource,"get"),resourceSpec.dataSource.get(resourceSpec.directModel,resourceSpec.options)},fluid.resourceLoader.loaders.dataSource.noPath=!0,fluid.resourceLoader.loaders.dataSource.parsed=!0,fluid.resourceLoader.loaders.noLoader=function(resourceSpec){return fluid.promise().resolve({noResource:!0,message:["No resource was configured for resource spec ",fluid.resourceLoader.sanitizeResourceSpec(resourceSpec),"; since it had none of the fields fields ",Object.keys(fluid.resourceLoader.loaders)+" filled out"]})},fluid.resourceLoader.loaders.noLoader.noPath=!0,fluid.resourceLoader.loaders.noLoader.parsed=!0,fluid.registerNamespace("fluid.resourceLoader.parsers"),fluid.resourceLoader.resolveResourceParser=function(resourceSpec){return!resourceSpec.loader.loader.parsed&&fluid.resourceLoader.parsers[resourceSpec.dataType]||fluid.identity},fluid.resourceLoader.parsers.json=function(resourceText){return fluid.dataSource.parseJSON(resourceText)},fluid.resourcesMergePolicy=function(target,source){return target=target||{},fluid.each(source,(function(oneResource,name){if(oneResource){fluid.isPrimitive(oneResource)&&(oneResource={url:oneResource});var oneR=target[name];for(var key in oneR||(oneR=target[name]={}),fluid.resourceLoader.loaders)if(key in oneResource)for(var key2 in fluid.resourceLoader.loaders)delete oneR[key2];$.extend(oneR,oneResource)}else target[name]=oneResource})),target},fluid.defaults("fluid.resourceLoader",{gradeNames:["fluid.modelComponent"],listeners:{"onCreate.loadResources":"{that}.resourceFetcher.fetchAll","onDestroy.destroyResourceEvents":"fluid.resourceLoader.destroyResourceEvents({that}.resourceFetcher)","{that}.resourceFetcher.onInit":{namespace:"resourceLoaderCompletion",funcName:"fluid.resourceLoader.subscribeCompletion",args:["{arguments}.0","{that}"]},"{that}.applier.earlyModelResolved":{funcName:"fluid.resourceLoader.modelUpdated",args:["{that}.resourceFetcher","{arguments}.0.resourceLoader",!0]}},modelListeners:{resourceLoader:{namespace:"resourceLoader",funcName:"fluid.resourceLoader.modelUpdated",excludeSource:"init",args:["{that}.resourceFetcher","{change}.value"]}},mergePolicy:{resources:fluid.resourcesMergePolicy},members:{resourceFetcher:{expander:{funcName:"fluid.resourceLoader.makeResourceFetcher",args:["{that}","{that}.options.resources","{that}.options.resourceOptions","{that}.transformResourceURL"]}}},resourceOptions:{terms:{}},resources:{},invokers:{transformResourceURL:{funcName:"fluid.stringTemplate",args:["{arguments}.0","{that}.options.resourceOptions.terms"]}},events:{onResourcesLoaded:null,onResourceError:null}}),fluid.resourceLoader.makeResourceFetcher=function(that,resourceSpecs,userResourceOptions,transformResourceURL){var resourceOptions=$.extend({ownerComponentId:that.id,ownerComponentPath:fluid.pathForComponent(that),onInitListeners:[[function(completionPromise){fluid.resourceLoader.subscribeCompletion(completionPromise,that)},"resourceLoaderCompletion"]]},userResourceOptions),fetcher=fluid.makeResourceFetcher(resourceSpecs,null,resourceOptions,transformResourceURL);return fluid.each(fetcher.resourceSpecs,(function(resourceSpec,key){resourceSpec.transformEvent.addListener((function(parsed){return that.resources[key]=resourceSpec,parsed}),"noteComponentResource","after:parsed"),resourceSpec.onError.addListener(that.events.onResourceError.fire)})),fetcher},fluid.resourceLoader.subscribeCompletion=function(completionPromise,resourceLoader){var fire=function(){resourceLoader.events.onResourcesLoaded.fire(resourceLoader.resourceFetcher.resourceSpecs)};completionPromise.then((function(){"constructed"===resourceLoader.lifecycleStatus||"treeConstructed"===resourceLoader.lifecycleStatus?fire():"destroyed"!==resourceLoader.lifecycleStatus&&resourceLoader.events.onCreate.addListener(fire,"fireOnResourcesLoaded")}),(function(error){fluid.log("Failure loading resources for component at path "+fluid.dumpComponentPath(resourceLoader)+": ",error)}))},fluid.resourceLoader.destroyResourceEvents=function(resourceFetcher){fluid.each(resourceFetcher.resourceSpecs,(function(resourceSpec){resourceSpec.transformEvent.destroy(),resourceSpec.onFetched.destroy()}))},fluid.resourceLoader.UrlClass=URL,fluid.resourceLoader.configureXHR=function(xhr,options){fluid.resourceLoader.loaders.XHR.copyProps.forEach((function(prop){fluid.isValue(options[prop])&&(xhr[prop]=options[prop])})),fluid.each(options.headers,(function(value,key){fluid.makeArray(value).forEach((function(oneValue){xhr.setRequestHeader(key,oneValue)}))}))},fluid.resourceLoader.loaders.XHR=function(resourceSpec){var togo=fluid.promise(),xhr=resourceSpec.xhr=new XMLHttpRequest;togo.then(null,null,(function(){xhr.abort()}));var sendError=function(){fluid.invokeLater((function(){togo.reject({isError:!0,status:xhr.status,textStatus:xhr.statusText})}))};xhr.addEventListener("load",(function(){fluid.dataSource.URL.isErrorStatus(xhr.status)?sendError():fluid.invokeLater((function(){var response=xhr.responseType&&"text"!==xhr.responseType?xhr.response:xhr.responseText;togo.resolve(response)}))})),xhr.addEventListener("error",sendError);var options=$.extend({async:!0},resourceSpec.options);return xhr.open(options.method||"GET",resourceSpec.url,options.async,options.username,options.password),fluid.resourceLoader.configureXHR(xhr,options),xhr.send(),togo},fluid.resourceLoader.loaders.XHR.copyProps=["contentType","responseType","timeout"],fluid.resourceLoader.loaders.url=fluid.resourceLoader.loaders.XHR,fluid.dataSource.URL.handleHttp=function(that,baseOptions,data){var promise=fluid.promise(),defaultOptions={method:"GET",async:!0};"set"===baseOptions.operation&&(defaultOptions.headers={"Content-Type":that.encoding.options.contentType},defaultOptions.method=baseOptions.writeMethod);var requestOptions=fluid.extend(!0,defaultOptions,baseOptions),whileMsg=" while executing HTTP "+requestOptions.method+" on url "+requestOptions.url;promise.accumulateRejectionReason=function(originError){return fluid.upgradeError(originError,whileMsg)};var xhr=promise.xhr=new XMLHttpRequest,sendError=function(){var relayed=fluid.dataSource.URL.relayError(xhr.status,xhr.statusText,whileMsg);requestOptions.notFoundIsEmpty&&404===relayed.statusCode?promise.resolve(void 0):promise.reject(relayed)};xhr.addEventListener("load",(function(){if(fluid.dataSource.URL.isErrorStatus(xhr.status))sendError();else{var response=xhr.responseType&&"text"!==xhr.responseType?xhr.response:xhr.responseText;promise.resolve(response)}})),xhr.addEventListener("error",sendError);var url=fluid.dataSource.URL.condenseUrl(requestOptions);return requestOptions.url=url,fluid.log("DataSource Issuing "+requestOptions.protocol.toUpperCase().slice(0,-1)+" request with options ",requestOptions),xhr.open(requestOptions.method||"GET",url.toString(),requestOptions.async),fluid.resourceLoader.configureXHR(xhr,requestOptions),xhr.send(data),promise},function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.accessibleAutocomplete=t():e.accessibleAutocomplete=t()}(window,(function(){return function(n){var r={};function o(e){if(r[e])return r[e].exports;var t=r[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,o),t.l=!0,t.exports}return o.m=n,o.c=r,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(t,e){if(1&e&&(t=o(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)o.d(n,r,function(e){return t[e]}.bind(null,r));return n},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="/",o(o.s=37)}([function(e,t,n){var m=n(1),v=n(6),y=n(7),g=n(16),_=n(18),b="prototype",w=function(e,t,n){var r,o,i,u,a=e&w.F,s=e&w.G,l=e&w.S,c=e&w.P,p=e&w.B,f=s?m:l?m[t]||(m[t]={}):(m[t]||{})[b],d=s?v:v[t]||(v[t]={}),h=d[b]||(d[b]={});for(r in s&&(n=t),n)i=((o=!a&&f&&void 0!==f[r])?f:n)[r],u=p&&o?_(i,m):c&&"function"==typeof i?_(Function.call,i):i,f&&g(f,r,i,e&w.U),d[r]!=i&&y(d,r,u),c&&h[r]!=i&&(h[r]=i)};m.core=v,w.F=1,w.G=2,w.S=4,w.P=8,w.B=16,w.W=32,w.U=64,w.R=128,e.exports=w},function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t,n){e.exports=!n(4)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},function(e,t){e.exports=function(e){try{return!!e()}catch(t){return!0}}},function(e,t,n){n.r(t),n.d(t,"h",(function(){return r})),n.d(t,"createElement",(function(){return r})),n.d(t,"cloneElement",(function(){return i})),n.d(t,"Component",(function(){return g})),n.d(t,"render",(function(){return _})),n.d(t,"rerender",(function(){return f})),n.d(t,"options",(function(){return E}));var s=function(){},E={},l=[],c=[];function r(e,t){var n,r,o,i,u=c;for(i=arguments.length;2<i--;)l.push(arguments[i]);for(t&&null!=t.children&&(l.length||l.push(t.children),delete t.children);l.length;)if((r=l.pop())&&void 0!==r.pop)for(i=r.length;i--;)l.push(r[i]);else"boolean"==typeof r&&(r=null),(o="function"!=typeof e)&&(null==r?r="":"number"==typeof r?r=String(r):"string"!=typeof r&&(o=!1)),o&&n?u[u.length-1]+=r:u===c?u=[r]:u.push(r),n=o;var a=new s;return a.nodeName=e,a.children=u,a.attributes=null==t?void 0:t,a.key=null==t?void 0:t.key,void 0!==E.vnode&&E.vnode(a),a}function M(e,t){for(var n in t)e[n]=t[n];return e}var o="function"==typeof Promise?Promise.resolve().then.bind(Promise.resolve()):setTimeout;function i(e,t){return r(e.nodeName,M(M({},e.attributes),t),2<arguments.length?[].slice.call(arguments,2):e.children)}var p=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,u=[];function a(e){!e._dirty&&(e._dirty=!0)&&1==u.push(e)&&(E.debounceRendering||o)(f)}function f(){var e,t=u;for(u=[];e=t.pop();)e._dirty&&V(e)}function N(e,t){return e.normalizedNodeName===t||e.nodeName.toLowerCase()===t.toLowerCase()}function I(e){var t=M({},e.attributes);t.children=e.children;var n=e.nodeName.defaultProps;if(void 0!==n)for(var r in n)void 0===t[r]&&(t[r]=n[r]);return t}function k(e){var t=e.parentNode;t&&t.removeChild(e)}function v(e,t,n,r,o){if("className"===t&&(t="class"),"key"===t);else if("ref"===t)n&&n(null),r&&r(e);else if("class"!==t||o)if("style"===t){if(r&&"string"!=typeof r&&"string"!=typeof n||(e.style.cssText=r||""),r&&"object"==typeof r){if("string"!=typeof n)for(var i in n)i in r||(e.style[i]="");for(var i in r)e.style[i]="number"==typeof r[i]&&!1===p.test(i)?r[i]+"px":r[i]}}else if("dangerouslySetInnerHTML"===t)r&&(e.innerHTML=r.__html||"");else if("o"==t[0]&&"n"==t[1]){var u=t!==(t=t.replace(/Capture$/,""));t=t.toLowerCase().substring(2),r?n||e.addEventListener(t,d,u):e.removeEventListener(t,d,u),(e._listeners||(e._listeners={}))[t]=r}else if("list"!==t&&"type"!==t&&!o&&t in e){try{e[t]=null==r?"":r}catch(s){}null!=r&&!1!==r||"spellcheck"==t||e.removeAttribute(t)}else{var a=o&&t!==(t=t.replace(/^xlink:?/,""));null==r||!1===r?a?e.removeAttributeNS("http://www.w3.org/1999/xlink",t.toLowerCase()):e.removeAttribute(t):"function"!=typeof r&&(a?e.setAttributeNS("http://www.w3.org/1999/xlink",t.toLowerCase(),r):e.setAttribute(t,r))}else e.className=r||""}function d(e){return this._listeners[e.type](E.event&&E.event(e)||e)}var A=[],P=0,j=!1,L=!1;function T(){for(var e;e=A.pop();)E.afterMount&&E.afterMount(e),e.componentDidMount&&e.componentDidMount()}function D(e,t,n,r,o){var i=e,u=j;if(null!=t&&"boolean"!=typeof t||(t=""),"string"==typeof t||"number"==typeof t)return e&&void 0!==e.splitText&&e.parentNode&&(!e._component||o)?e.nodeValue!=t&&(e.nodeValue=t):(i=document.createTextNode(t),e&&(e.parentNode&&e.parentNode.replaceChild(i,e),F(e,!0))),i.__preactattr_=!0,i;var a=t.nodeName;if("function"==typeof a)return function(e,t,n,r){for(var o=e&&e._component,i=o,u=e,a=o&&e._componentConstructor===t.nodeName,s=a,l=I(t);o&&!s&&(o=o._parentComponent);)s=o.constructor===t.nodeName;return o&&s&&(!r||o._component)?(U(o,l,3,n,r),e=o.base):(i&&!a&&(q(i),e=u=null),o=R(t.nodeName,l,n),e&&!o.nextBase&&(o.nextBase=e,u=null),U(o,l,1,n,r),e=o.base,u&&e!==u&&(u._component=null,F(u,!1))),e}(e,t,n,r);if(j="svg"===a||"foreignObject"!==a&&j,a=String(a),(!e||!N(e,a))&&(i=function(e,t){var n=t?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e);return n.normalizedNodeName=e,n}(a,j),e)){for(;e.firstChild;)i.appendChild(e.firstChild);e.parentNode&&e.parentNode.replaceChild(i,e),F(e,!0)}var s=i.firstChild,l=i.__preactattr_,c=t.children;if(null==l){l=i.__preactattr_={};for(var p=i.attributes,f=p.length;f--;)l[p[f].name]=p[f].value}return!L&&c&&1===c.length&&"string"==typeof c[0]&&null!=s&&void 0!==s.splitText&&null==s.nextSibling?s.nodeValue!=c[0]&&(s.nodeValue=c[0]):(c&&c.length||null!=s)&&function(e,t,n,r,o){var i,u,a,s,l,x,O,C,c=e.childNodes,p=[],f={},d=0,h=0,m=c.length,v=0,y=t?t.length:0;if(0!==m)for(var g=0;g<m;g++){var _=c[g],b=_.__preactattr_;null!=(w=y&&b?_._component?_._component.__key:b.key:null)?(d++,f[w]=_):(b||(void 0!==_.splitText?!o||_.nodeValue.trim():o))&&(p[v++]=_)}if(0!==y)for(g=0;g<y;g++){var w;if(l=null,null!=(w=(s=t[g]).key))d&&void 0!==f[w]&&(l=f[w],f[w]=void 0,d--);else if(h<v)for(i=h;i<v;i++)if(void 0!==p[i]&&(x=u=p[i],C=o,"string"==typeof(O=s)||"number"==typeof O?void 0!==x.splitText:"string"==typeof O.nodeName?!x._componentConstructor&&N(x,O.nodeName):C||x._componentConstructor===O.nodeName)){l=u,p[i]=void 0,i===v-1&&v--,i===h&&h++;break}l=D(l,s,n,r),a=c[g],l&&l!==e&&l!==a&&(null==a?e.appendChild(l):l===a.nextSibling?k(a):e.insertBefore(l,a))}if(d)for(var g in f)void 0!==f[g]&&F(f[g],!1);for(;h<=v;)void 0!==(l=p[v--])&&F(l,!1)}(i,c,n,r,L||null!=l.dangerouslySetInnerHTML),function(e,t,n){var r;for(r in n)t&&null!=t[r]||null==n[r]||v(e,r,n[r],n[r]=void 0,j);for(r in t)"children"===r||"innerHTML"===r||r in n&&t[r]===("value"===r||"checked"===r?e[r]:n[r])||v(e,r,n[r],n[r]=t[r],j)}(i,t.attributes,l),j=u,i}function F(e,t){var n=e._component;n?q(n):(null!=e.__preactattr_&&e.__preactattr_.ref&&e.__preactattr_.ref(null),!1!==t&&null!=e.__preactattr_||k(e),h(e))}function h(e){for(e=e.lastChild;e;){var t=e.previousSibling;F(e,!0),e=t}}var m=[];function R(e,t,n){var r,o=m.length;for(e.prototype&&e.prototype.render?(r=new e(t,n),g.call(r,t,n)):((r=new g(t,n)).constructor=e,r.render=y);o--;)if(m[o].constructor===e)return r.nextBase=m[o].nextBase,m.splice(o,1),r;return r}function y(e,t,n){return this.constructor(e,n)}function U(e,t,n,r,o){e._disable||(e._disable=!0,e.__ref=t.ref,e.__key=t.key,delete t.ref,delete t.key,void 0===e.constructor.getDerivedStateFromProps&&(!e.base||o?e.componentWillMount&&e.componentWillMount():e.componentWillReceiveProps&&e.componentWillReceiveProps(t,r)),r&&r!==e.context&&(e.prevContext||(e.prevContext=e.context),e.context=r),e.prevProps||(e.prevProps=e.props),e.props=t,e._disable=!1,0!==n&&(1!==n&&!1===E.syncComponentUpdates&&e.base?a(e):V(e,1,o)),e.__ref&&e.__ref(e))}function V(e,t,n,r){if(!e._disable){var o,i,u,a=e.props,s=e.state,l=e.context,c=e.prevProps||a,p=e.prevState||s,f=e.prevContext||l,d=e.base,h=e.nextBase,m=d||h,v=e._component,y=!1,g=f;if(e.constructor.getDerivedStateFromProps&&(s=M(M({},s),e.constructor.getDerivedStateFromProps(a,s)),e.state=s),d&&(e.props=c,e.state=p,e.context=f,2!==t&&e.shouldComponentUpdate&&!1===e.shouldComponentUpdate(a,s,l)?y=!0:e.componentWillUpdate&&e.componentWillUpdate(a,s,l),e.props=a,e.state=s,e.context=l),e.prevProps=e.prevState=e.prevContext=e.nextBase=null,e._dirty=!1,!y){o=e.render(a,s,l),e.getChildContext&&(l=M(M({},l),e.getChildContext())),d&&e.getSnapshotBeforeUpdate&&(g=e.getSnapshotBeforeUpdate(c,p));var _,b,w=o&&o.nodeName;if("function"==typeof w){var x=I(o);(i=v)&&i.constructor===w&&x.key==i.__key?U(i,x,1,l,!1):(_=i,e._component=i=R(w,x,l),i.nextBase=i.nextBase||h,i._parentComponent=e,U(i,x,0,l,!1),V(i,1,n,!0)),b=i.base}else u=m,(_=v)&&(u=e._component=null),(m||1===t)&&(u&&(u._component=null),b=function(t,n,r,o,i,u){P++||(j=null!=i&&void 0!==i.ownerSVGElement,L=null!=t&&!("__preactattr_"in t));var a=D(t,n,r,o,u);return i&&a.parentNode!==i&&i.appendChild(a),--P||(L=!1,u||T()),a}(u,o,l,n||!d,m&&m.parentNode,!0));if(m&&b!==m&&i!==v){var O=m.parentNode;O&&b!==O&&(O.replaceChild(b,m),_||(m._component=null,F(m,!1)))}if(_&&q(_),(e.base=b)&&!r){for(var C=e,S=e;S=S._parentComponent;)(C=S).base=b;b._component=C,b._componentConstructor=C.constructor}}for(!d||n?A.unshift(e):y||(e.componentDidUpdate&&e.componentDidUpdate(c,p,g),E.afterUpdate&&E.afterUpdate(e));e._renderCallbacks.length;)e._renderCallbacks.pop().call(e);P||r||T()}}function q(e){E.beforeUnmount&&E.beforeUnmount(e);var t=e.base;e._disable=!0,e.componentWillUnmount&&e.componentWillUnmount(),e.base=null;var n=e._component;n?q(n):t&&(t.__preactattr_&&t.__preactattr_.ref&&t.__preactattr_.ref(null),k(e.nextBase=t),m.push(e),h(t)),e.__ref&&e.__ref(null)}function g(e,t){this._dirty=!0,this.context=t,this.props=e,this.state=this.state||{},this._renderCallbacks=[]}function _(e,t,n){return function(e,t,n,r,o,i){P++||(j=null!=o&&void 0!==o.ownerSVGElement,L=null!=e&&!("__preactattr_"in e));var u=D(e,t,n,r,i);return o&&u.parentNode!==o&&o.appendChild(u),--P||(L=!1,i||T()),u}(n,e,{},!1,t,!1)}M(g.prototype,{setState:function(e,t){this.prevState||(this.prevState=this.state),this.state=M(M({},this.state),"function"==typeof e?e(this.state,this.props):e),t&&this._renderCallbacks.push(t),a(this)},forceUpdate:function(e){e&&this._renderCallbacks.push(e),V(this,2)},render:function(){}});var b={h:r,createElement:r,cloneElement:i,Component:g,render:_,rerender:f,options:E};t.default=b},function(e,t){var n=e.exports={version:"2.5.7"};"number"==typeof __e&&(__e=n)},function(e,t,n){var r=n(8),o=n(40);e.exports=n(3)?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){var o=n(9),i=n(38),u=n(39),a=Object.defineProperty;t.f=n(3)?Object.defineProperty:function(e,t,n){if(o(e),t=u(t,!0),o(n),i)try{return a(e,t,n)}catch(r){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){var r=n(2);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,t){var n=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+r).toString(36))}},function(e,t,n){var r=n(22);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},function(e,t){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){var r=n(4);e.exports=function(e,t){return!!e&&r((function(){t?e.call(null,(function(){}),1):e.call(null)}))}},function(e,t,n){var r=n(0);r(r.S+r.F,"Object",{assign:n(41)})},function(e,t,n){var r=n(2),o=n(1).document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},function(e,t,n){var i=n(1),u=n(7),a=n(17),s=n(10)("src"),r="toString",o=Function[r],l=(""+o).split(r);n(6).inspectSource=function(e){return o.call(e)},(e.exports=function(e,t,n,r){var o="function"==typeof n;o&&(a(n,"name")||u(n,"name",t)),e[t]!==n&&(o&&(a(n,s)||u(n,s,e[t]?""+e[t]:l.join(String(t)))),e===i?e[t]=n:r?e[t]?e[t]=n:u(e,t,n):(delete e[t],u(e,t,n)))})(Function.prototype,r,(function(){return"function"==typeof this&&this[s]||o.call(this)}))},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t,n){var i=n(19);e.exports=function(r,o,e){if(i(r),void 0===o)return r;switch(e){case 1:return function(e){return r.call(o,e)};case 2:return function(e,t){return r.call(o,e,t)};case 3:return function(e,t,n){return r.call(o,e,t,n)}}return function(){return r.apply(o,arguments)}}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t,n){var r=n(42),o=n(28);e.exports=Object.keys||function(e){return r(e,o)}},function(e,t,n){var r=n(11),o=n(12);e.exports=function(e){return r(o(e))}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var s=n(21),l=n(24),c=n(43);e.exports=function(a){return function(e,t,n){var r,o=s(e),i=l(o.length),u=c(n,i);if(a&&t!=t){for(;u<i;)if((r=o[u++])!=r)return!0}else for(;u<i;u++)if((a||u in o)&&o[u]===t)return a||u||0;return!a&&-1}}},function(e,t,n){var r=n(25),o=Math.min;e.exports=function(e){return 0<e?o(r(e),9007199254740991):0}},function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(0<e?r:n)(e)}},function(e,t,n){var r=n(27)("keys"),o=n(10);e.exports=function(e){return r[e]||(r[e]=o(e))}},function(e,t,n){var r=n(6),o=n(1),i="__core-js_shared__",u=o[i]||(o[i]={});(e.exports=function(e,t){return u[e]||(u[e]=void 0!==t?t:{})})("versions",[]).push({version:r.version,mode:n(44)?"pure":"global",copyright:"© 2018 Denis Pushkarev (zloirock.ru)"})},function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,t,n){var r=n(12);e.exports=function(e){return Object(r(e))}},function(e,t,n){var r=n(8).f,o=Function.prototype,i=/^\s*function ([^ (]*)/;"name"in o||n(3)&&r(o,"name",{configurable:!0,get:function(){try{return(""+this).match(i)[1]}catch(e){return""}}})},function(e,t,n){var r=n(0),o=n(32)(1);r(r.P+r.F*!n(13)([].map,!0),"Array",{map:function(e){return o(this,e,arguments[1])}})},function(e,t,n){var _=n(18),b=n(11),w=n(29),x=n(24),r=n(47);e.exports=function(p,e){var f=1==p,d=2==p,h=3==p,m=4==p,v=6==p,y=5==p||v,g=e||r;return function(e,t,n){for(var r,o,i=w(e),u=b(i),a=_(t,n,3),s=x(u.length),l=0,c=f?g(e,s):d?g(e,0):void 0;l<s;l++)if((y||l in u)&&(o=a(r=u[l],l,i),p))if(f)c[l]=o;else if(o)switch(p){case 3:return!0;case 5:return r;case 6:return l;case 2:c.push(r)}else if(m)return!1;return v?-1:h||m?m:c}}},function(e,t,n){var r=n(22);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,t,n){var r=n(27)("wks"),o=n(10),i=n(1).Symbol,u="function"==typeof i;(e.exports=function(e){return r[e]||(r[e]=u&&i[e]||(u?i:o)("Symbol."+e))}).store=r},function(e,t,n){var r=n(0),o=n(23)(!1),i=[].indexOf,u=!!i&&1/[1].indexOf(1,-0)<0;r(r.P+r.F*(u||!n(13)(i)),"Array",{indexOf:function(e){return u?i.apply(this,arguments)||0:o(this,e,arguments[1])}})},function(e,t,n){var r=n(0);r(r.S,"Object",{create:n(52)})},function(e,t,n){t.__esModule=!0,t.default=void 0,n(14),n(30),n(31),n(35),n(49),n(50);var r=n(5),o=function(e){return e&&e.__esModule?e:{default:e}}(n(51));function i(e){if(!e.element)throw new Error("element is not defined");if(!e.id)throw new Error("id is not defined");if(!e.source)throw new Error("source is not defined");Array.isArray(e.source)&&(e.source=u(e.source)),(0,r.render)((0,r.createElement)(o.default,e),e.element)}var u=function(n){return function(t,e){e(n.filter((function(e){return-1!==e.toLowerCase().indexOf(t.toLowerCase())})))}};i.enhanceSelectElement=function(n){if(!n.selectElement)throw new Error("selectElement is not defined");if(!n.source){var e=[].filter.call(n.selectElement.options,(function(e){return e.value||n.preserveNullOptions}));n.source=e.map((function(e){return e.textContent||e.innerText}))}if(n.onConfirm=n.onConfirm||function(t){var e=[].filter.call(n.selectElement.options,(function(e){return(e.textContent||e.innerText)===t}))[0];e&&(e.selected=!0)},n.selectElement.value||void 0===n.defaultValue){var t=n.selectElement.options[n.selectElement.options.selectedIndex];n.defaultValue=t.textContent||t.innerText}void 0===n.name&&(n.name=""),void 0===n.id&&(void 0===n.selectElement.id?n.id="":n.id=n.selectElement.id),void 0===n.autoselect&&(n.autoselect=!0);var r=document.createElement("div");n.selectElement.parentNode.insertBefore(r,n.selectElement),i(Object.assign({},n,{element:r})),n.selectElement.style.display="none",n.selectElement.id=n.selectElement.id+"-select"};var a=i;t.default=a},function(e,t,n){e.exports=!n(3)&&!n(4)((function(){return 7!=Object.defineProperty(n(15)("div"),"a",{get:function(){return 7}}).a}))},function(e,t,n){var o=n(2);e.exports=function(e,t){if(!o(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!o(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!o(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!o(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){var f=n(20),d=n(45),h=n(46),m=n(29),v=n(11),o=Object.assign;e.exports=!o||n(4)((function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach((function(e){t[e]=e})),7!=o({},e)[n]||Object.keys(o({},t)).join("")!=r}))?function(e,t){for(var n=m(e),r=arguments.length,o=1,i=d.f,u=h.f;o<r;)for(var a,s=v(arguments[o++]),l=i?f(s).concat(i(s)):f(s),c=l.length,p=0;p<c;)u.call(s,a=l[p++])&&(n[a]=s[a]);return n}:o},function(e,t,n){var u=n(17),a=n(21),s=n(23)(!1),l=n(26)("IE_PROTO");e.exports=function(e,t){var n,r=a(e),o=0,i=[];for(n in r)n!=l&&u(r,n)&&i.push(n);for(;t.length>o;)u(r,n=t[o++])&&(~s(i,n)||i.push(n));return i}},function(e,t,n){var r=n(25),o=Math.max,i=Math.min;e.exports=function(e,t){return(e=r(e))<0?o(e+t,0):i(e,t)}},function(e,t){e.exports=!1},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t){t.f={}.propertyIsEnumerable},function(e,t,n){var r=n(48);e.exports=function(e,t){return new(r(e))(t)}},function(e,t,n){var r=n(2),o=n(33),i=n(34)("species");e.exports=function(e){var t;return o(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!o(t.prototype)||(t=void 0),r(t)&&null===(t=t[i])&&(t=void 0)),void 0===t?Array:t}},function(e,t,n){var r=n(0),o=n(32)(2);r(r.P+r.F*!n(13)([].filter,!0),"Array",{filter:function(e){return o(this,e,arguments[1])}})},function(e,t,n){var r=n(0);r(r.S,"Array",{isArray:n(33)})},function(e,t,n){t.__esModule=!0,t.default=void 0,n(14),n(36),n(30),n(31),n(35),n(55),n(58);var $=n(5),J=o(n(60)),r=o(n(61));function o(e){return e&&e.__esModule?e:{default:e}}function X(){return(X=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function i(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}var u={13:"enter",27:"escape",32:"space",38:"up",40:"down"};function Y(){return"undefined"!=typeof navigator&&!(!navigator.userAgent.match(/(iPod|iPhone|iPad)/g)||!navigator.userAgent.match(/AppleWebKit/g))}var a=function(n){function e(e){var t;return(t=n.call(this,e)||this).elementReferences={},t.state={focused:null,hovered:null,menuOpen:!1,options:e.defaultValue?[e.defaultValue]:[],query:e.defaultValue,validChoiceMade:!1,selected:null,ariaHint:!0},t.handleComponentBlur=t.handleComponentBlur.bind(i(i(t))),t.handleKeyDown=t.handleKeyDown.bind(i(i(t))),t.handleUpArrow=t.handleUpArrow.bind(i(i(t))),t.handleDownArrow=t.handleDownArrow.bind(i(i(t))),t.handleEnter=t.handleEnter.bind(i(i(t))),t.handlePrintableKey=t.handlePrintableKey.bind(i(i(t))),t.handleListMouseLeave=t.handleListMouseLeave.bind(i(i(t))),t.handleOptionBlur=t.handleOptionBlur.bind(i(i(t))),t.handleOptionClick=t.handleOptionClick.bind(i(i(t))),t.handleOptionFocus=t.handleOptionFocus.bind(i(i(t))),t.handleOptionMouseDown=t.handleOptionMouseDown.bind(i(i(t))),t.handleOptionMouseEnter=t.handleOptionMouseEnter.bind(i(i(t))),t.handleInputBlur=t.handleInputBlur.bind(i(i(t))),t.handleInputChange=t.handleInputChange.bind(i(i(t))),t.handleInputFocus=t.handleInputFocus.bind(i(i(t))),t.pollInputElement=t.pollInputElement.bind(i(i(t))),t.getDirectInputChanges=t.getDirectInputChanges.bind(i(i(t))),t}!function(e,t){e.prototype=Object.create(t.prototype),(e.prototype.constructor=e).__proto__=t}(e,n);var t=e.prototype;return t.isQueryAnOption=function(e,t){var n=this;return-1!==t.map((function(e){return n.templateInputValue(e).toLowerCase()})).indexOf(e.toLowerCase())},t.componentDidMount=function(){this.pollInputElement()},t.componentWillUnmount=function(){clearTimeout(this.$pollInput)},t.pollInputElement=function(){var e=this;this.getDirectInputChanges(),this.$pollInput=setTimeout((function(){e.pollInputElement()}),100)},t.getDirectInputChanges=function(){var e=this.elementReferences[-1];e&&e.value!==this.state.query&&this.handleInputChange({target:{value:e.value}})},t.componentDidUpdate=function(e,t){var n=this.state.focused,r=null===n,o=t.focused!==n;o&&!r&&this.elementReferences[n].focus();var i=-1===n,u=o&&null===t.focused;if(i&&u){var a=this.elementReferences[n];a.setSelectionRange(0,a.value.length)}},t.hasAutoselect=function(){return!Y()&&this.props.autoselect},t.templateInputValue=function(e){var t=this.props.templates&&this.props.templates.inputValue;return t?t(e):e},t.templateSuggestion=function(e){var t=this.props.templates&&this.props.templates.suggestion;return t?t(e):e},t.handleComponentBlur=function(e){var t,n=this.state,r=n.options,o=n.query,i=n.selected;this.props.confirmOnBlur?(t=e.query||o,this.props.onConfirm(r[i])):t=o,this.setState({focused:null,menuOpen:e.menuOpen||!1,query:t,selected:null,validChoiceMade:this.isQueryAnOption(t,r)})},t.handleListMouseLeave=function(e){this.setState({hovered:null})},t.handleOptionBlur=function(e,t){var n=this.state,r=n.focused,o=n.menuOpen,i=n.options,u=n.selected,a=null===e.relatedTarget,s=e.relatedTarget===this.elementReferences[-1],l=r!==t&&-1!==r;if(!l&&a||!l&&!s){var c=o&&Y();this.handleComponentBlur({menuOpen:c,query:this.templateInputValue(i[u])})}},t.handleInputBlur=function(e){var t=this.state,n=t.focused,r=t.menuOpen,o=t.options,i=t.query,u=t.selected;if(-1===n){var a=r&&Y(),s=Y()?i:this.templateInputValue(o[u]);this.handleComponentBlur({menuOpen:a,query:s})}},t.handleInputChange=function(e){var n=this,t=this.props,r=t.minLength,o=t.source,i=t.showAllValues,u=this.hasAutoselect(),a=e.target.value,s=0===a.length,l=this.state.query.length!==a.length,c=a.length>=r;this.setState({query:a,ariaHint:s}),i||!s&&l&&c?o(a,(function(e){var t=0<e.length;n.setState({menuOpen:t,options:e,selected:u&&t?0:-1,validChoiceMade:!1})})):!s&&c||this.setState({menuOpen:!1,options:[]})},t.handleInputClick=function(e){this.handleInputChange(e)},t.handleInputFocus=function(e){var t=this.state,n=t.query,r=t.validChoiceMade,o=t.options,i=this.props.minLength,u=!r&&n.length>=i&&0<o.length;u?this.setState((function(e){var t=e.menuOpen;return{focused:-1,menuOpen:u||t,selected:-1}})):this.setState({focused:-1})},t.handleOptionFocus=function(e){this.setState({focused:e,hovered:null,selected:e})},t.handleOptionMouseEnter=function(e,t){Y()||this.setState({hovered:t})},t.handleOptionClick=function(e,t){var n=this.state.options[t],r=this.templateInputValue(n);this.props.onConfirm(n),this.setState({focused:-1,hovered:null,menuOpen:!1,query:r,selected:-1,validChoiceMade:!0}),this.forceUpdate()},t.handleOptionMouseDown=function(e){e.preventDefault()},t.handleUpArrow=function(e){e.preventDefault();var t=this.state,n=t.menuOpen,r=t.selected;-1!==r&&n&&this.handleOptionFocus(r-1)},t.handleDownArrow=function(e){var t=this;if(e.preventDefault(),this.props.showAllValues&&!1===this.state.menuOpen)e.preventDefault(),this.props.source("",(function(e){t.setState({menuOpen:!0,options:e,selected:0,focused:0,hovered:null})}));else if(!0===this.state.menuOpen){var n=this.state,r=n.menuOpen,o=n.options,i=n.selected;i!==o.length-1&&r&&this.handleOptionFocus(i+1)}},t.handleSpace=function(e){var t=this;this.props.showAllValues&&!1===this.state.menuOpen&&""===this.state.query&&(e.preventDefault(),this.props.source("",(function(e){t.setState({menuOpen:!0,options:e})}))),-1!==this.state.focused&&(e.preventDefault(),this.handleOptionClick(e,this.state.focused))},t.handleEnter=function(e){this.state.menuOpen&&(e.preventDefault(),0<=this.state.selected&&this.handleOptionClick(e,this.state.selected))},t.handlePrintableKey=function(e){var t=this.elementReferences[-1];e.target===t||t.focus()},t.handleKeyDown=function(e){switch(u[e.keyCode]){case"up":this.handleUpArrow(e);break;case"down":this.handleDownArrow(e);break;case"space":this.handleSpace(e);break;case"enter":this.handleEnter(e);break;case"escape":this.handleComponentBlur({query:this.state.query});break;default:(function(e){return 47<e&&e<58||32===e||8===e||64<e&&e<91||95<e&&e<112||185<e&&e<193||218<e&&e<223})(e.keyCode)&&this.handlePrintableKey(e)}},t.render=function(){var e,i=this,t=this.props,n=t.cssNamespace,r=t.displayMenu,u=t.id,o=t.minLength,a=t.name,s=t.placeholder,l=t.required,c=t.showAllValues,p=t.tNoResults,f=t.tStatusQueryTooShort,d=t.tStatusNoResults,h=t.tStatusSelectedOption,m=t.tStatusResults,v=t.tAssistiveHint,y=t.dropdownArrow,g=this.state,_=g.focused,b=g.hovered,w=g.menuOpen,x=g.options,O=g.query,C=g.selected,S=g.ariaHint,E=g.validChoiceMade,M=this.hasAutoselect(),N=-1===_,I=0===x.length,k=0!==O.length,A=O.length>=o,P=this.props.showNoOptionsFound&&N&&I&&k&&A,j=n+"__wrapper",L=n+"__input",T=null!==_?" "+L+"--focused":"",B=this.props.showAllValues?" "+L+"--show-all-values":" "+L+"--default",D=n+"__dropdown-arrow-down",F=-1!==_&&null!==_,R=n+"__menu",U=R+"--"+r,V=R+"--"+(w||P?"visible":"hidden"),q=n+"__option",W=n+"__hint",H=this.templateInputValue(x[C]),K=H&&0===H.toLowerCase().indexOf(O.toLowerCase())&&M?O+H.substr(O.length):"",Q=u+"__assistiveHint",z=S?{"aria-describedby":Q}:null;return c&&"string"==typeof(e=y({className:D}))&&(e=(0,$.createElement)("div",{className:n+"__dropdown-arrow-down-wrapper",dangerouslySetInnerHTML:{__html:e}})),(0,$.createElement)("div",{className:j,onKeyDown:this.handleKeyDown},(0,$.createElement)(J.default,{id:u,length:x.length,queryLength:O.length,minQueryLength:o,selectedOption:this.templateInputValue(x[C]),selectedOptionIndex:C,validChoiceMade:E,isInFocus:null!==this.state.focused,tQueryTooShort:f,tNoResults:d,tSelectedOption:h,tResults:m}),K&&(0,$.createElement)("span",null,(0,$.createElement)("input",{className:W,readonly:!0,tabIndex:"-1",value:K})),(0,$.createElement)("input",X({"aria-expanded":w?"true":"false","aria-activedescendant":!!F&&u+"__option--"+_,"aria-owns":u+"__listbox","aria-autocomplete":this.hasAutoselect()?"both":"list"},z,{autoComplete:"off",className:""+L+T+B,id:u,onClick:function(e){return i.handleInputClick(e)},onBlur:this.handleInputBlur},function(e){return{onInput:e}}(this.handleInputChange),{onFocus:this.handleInputFocus,name:a,placeholder:s,ref:function(e){i.elementReferences[-1]=e},type:"text",role:"combobox",required:l,value:O})),e,(0,$.createElement)("ul",{className:R+" "+U+" "+V,onMouseLeave:function(e){return i.handleListMouseLeave(e)},id:u+"__listbox",role:"listbox"},x.map((function(e,t){var n=(-1===_?C===t:_===t)&&null===b?" "+q+"--focused":"",r=t%2?" "+q+"--odd":"",o=Y()?"<span id="+u+"__option-suffix--"+t+' style="border:0;clip:rect(0 0 0 0);height:1px;marginBottom:-1px;marginRight:-1px;overflow:hidden;padding:0;position:absolute;whiteSpace:nowrap;width:1px"> '+(t+1)+" of "+x.length+"</span>":"";return(0,$.createElement)("li",{"aria-selected":_===t?"true":"false",className:""+q+n+r,dangerouslySetInnerHTML:{__html:i.templateSuggestion(e)+o},id:u+"__option--"+t,key:t,onBlur:function(e){return i.handleOptionBlur(e,t)},onClick:function(e){return i.handleOptionClick(e,t)},onMouseDown:i.handleOptionMouseDown,onMouseEnter:function(e){return i.handleOptionMouseEnter(e,t)},ref:function(e){i.elementReferences[t]=e},role:"option",tabIndex:"-1","aria-posinset":t+1,"aria-setsize":x.length})})),P&&(0,$.createElement)("li",{className:q+" "+q+"--no-results"},p())),(0,$.createElement)("span",{id:Q,style:{display:"none"}},v()))},e}($.Component);(t.default=a).defaultProps={autoselect:!1,cssNamespace:"autocomplete",defaultValue:"",displayMenu:"inline",minLength:0,name:"input-autocomplete",placeholder:"",onConfirm:function(){},confirmOnBlur:!0,showNoOptionsFound:!0,showAllValues:!1,required:!1,tNoResults:function(){return"No results found"},tAssistiveHint:function(){return"When autocomplete results are available use up and down arrows to review and enter to select. Touch device users, explore by touch or with swipe gestures."},dropdownArrow:r.default}},function(e,t,r){var o=r(9),i=r(53),u=r(28),a=r(26)("IE_PROTO"),s=function(){},l="prototype",c=function(){var e,t=r(15)("iframe"),n=u.length;for(t.style.display="none",r(54).appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),c=e.F;n--;)delete c[l][u[n]];return c()};e.exports=Object.create||function(e,t){var n;return null!==e?(s[l]=o(e),n=new s,s[l]=null,n[a]=e):n=c(),void 0===t?n:i(n,t)}},function(e,t,n){var u=n(8),a=n(9),s=n(20);e.exports=n(3)?Object.defineProperties:function(e,t){a(e);for(var n,r=s(t),o=r.length,i=0;i<o;)u.f(e,n=r[i++],t[n]);return e}},function(e,t,n){var r=n(1).document;e.exports=r&&r.documentElement},function(e,t,n){var r=n(0);r(r.P,"Function",{bind:n(56)})},function(e,t,n){var i=n(19),u=n(2),a=n(57),s=[].slice,l={};e.exports=Function.bind||function(t){var n=i(this),r=s.call(arguments,1),o=function(){var e=r.concat(s.call(arguments));return this instanceof o?function(e,t,n){if(!(t in l)){for(var r=[],o=0;o<t;o++)r[o]="a["+o+"]";l[t]=Function("F,a","return new F("+r.join(",")+")")}return l[t](e,n)}(n,e.length,e):a(n,e,t)};return u(n.prototype)&&(o.prototype=n.prototype),o}},function(e,t){e.exports=function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)}},function(e,t,n){n(59)("match",1,(function(r,o,e){return[function(e){var t=r(this),n=null==e?void 0:e[o];return void 0!==n?n.call(e,t):new RegExp(e)[o](String(t))},e]}))},function(e,t,n){var a=n(7),s=n(16),l=n(4),c=n(12),p=n(34);e.exports=function(t,e,n){var r=p(t),o=n(c,r,""[t]),i=o[0],u=o[1];l((function(){var e={};return e[r]=function(){return 7},7!=""[t](e)}))&&(s(String.prototype,t,i),a(RegExp.prototype,r,2==e?function(e,t){return u.call(e,this,t)}:function(e){return u.call(e,this)}))}},function(e,t,n){t.__esModule=!0,t.default=void 0,n(36);var _=n(5),o=function(o){function e(){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=o.call.apply(o,[this].concat(n))||this).state={bump:!1,debounced:!1},e}!function(e,t){e.prototype=Object.create(t.prototype),(e.prototype.constructor=e).__proto__=t}(e,o);var t=e.prototype;return t.componentWillMount=function(){var e=this;this.debounceStatusUpdate=function(o,i,u){var a;return function(){var e=this,t=arguments,n=function(){a=null,u||o.apply(e,t)},r=u&&!a;clearTimeout(a),a=setTimeout(n,i),r&&o.apply(e,t)}}((function(){if(!e.state.debounced){var t=!e.props.isInFocus||e.props.validChoiceMade;e.setState((function(e){return{bump:!e.bump,debounced:!0,silenced:t}}))}}),1400)},t.componentWillReceiveProps=function(e){e.queryLength,this.setState({debounced:!1})},t.render=function(){var g,e=this.props,t=e.id,n=e.length,r=e.queryLength,o=e.minQueryLength,i=e.selectedOption,u=e.selectedOptionIndex,a=e.tQueryTooShort,s=e.tNoResults,l=e.tSelectedOption,c=e.tResults,p=this.state,f=p.bump,d=p.debounced,h=p.silenced,m=r<o,v=0===n,y=i?l(i,n,u):"";return g=m?a(o):v?s():c(n,y),this.debounceStatusUpdate(),(0,_.createElement)("div",{style:{border:"0",clip:"rect(0 0 0 0)",height:"1px",marginBottom:"-1px",marginRight:"-1px",overflow:"hidden",padding:"0",position:"absolute",whiteSpace:"nowrap",width:"1px"}},(0,_.createElement)("div",{id:t+"__status--A",role:"status","aria-atomic":"true","aria-live":"polite"},!h&&d&&f?g:""),(0,_.createElement)("div",{id:t+"__status--B",role:"status","aria-atomic":"true","aria-live":"polite"},h||!d||f?"":g))},e}(_.Component);(t.default=o).defaultProps={tQueryTooShort:function(e){return"Type in "+e+" or more characters for results"},tNoResults:function(){return"No search results"},tSelectedOption:function(e,t,n){return e+" "+(n+1)+" of "+t+" is highlighted"},tResults:function(e,t){return e+" "+(1===e?"result":"results")+" "+(1===e?"is":"are")+" available. "+t}}},function(e,t,n){t.__esModule=!0,t.default=void 0;var r=n(5);t.default=function(e){var t=e.className;return(0,r.createElement)("svg",{version:"1.1",xmlns:"http://www.w3.org/2000/svg",className:t,focusable:"false"},(0,r.createElement)("g",{stroke:"none",fill:"none","fill-rule":"evenodd"},(0,r.createElement)("polygon",{fill:"#000000",points:"0 0 22 0 11 17"})))}}]).default})),window.$=jQuery;/*! lz4.js v0.3.3 Released under the MIT license. https://github.com/ukyo/lz4.js/LICENSE */var lz4={};(function(){var c;c||(c=eval("(function() { try { return Module || {} } catch(e) { return {} } })()"));var l={},n;for(n in c)c.hasOwnProperty(n)&&(l[n]=c[n]);var q="object"==typeof window,v="function"==typeof importScripts,w="object"==typeof process&&"function"==typeof require&&!q&&!v,aa=!q&&!w&&!v;if(w){c.print||(c.print=function(a){process.stdout.write(a+"\n")}),c.printErr||(c.printErr=function(a){process.stderr.write(a+"\n")});var ba=require("fs"),ca=require("path");c.read=function(a,b){a=ca.normalize(a);var d=ba.readFileSync(a);return d||a==ca.resolve(a)||(a=path.join(__dirname,"..","src",a),d=ba.readFileSync(a)),d&&!b&&(d=d.toString()),d},c.readBinary=function(a){return(a=c.read(a,!0)).buffer||(a=new Uint8Array(a)),assert(a.buffer),a},c.load=function(a){da(read(a))},c.thisProgram||(c.thisProgram=1<process.argv.length?process.argv[1].replace(/\\/g,"/"):"unknown-program"),c.arguments=process.argv.slice(2),"undefined"!=typeof module&&(module.exports=c),process.on("uncaughtException",(function(a){if(!(a instanceof x))throw a})),c.inspect=function(){return"[Emscripten Module object]"}}else if(aa)c.print||(c.print=print),"undefined"!=typeof printErr&&(c.printErr=printErr),c.read="undefined"!=typeof read?read:function(){throw"no read() available (jsc?)"},c.readBinary=function(a){return"function"==typeof readbuffer?new Uint8Array(readbuffer(a)):(assert("object"==typeof(a=read(a,"binary"))),a)},"undefined"!=typeof scriptArgs?c.arguments=scriptArgs:void 0!==arguments&&(c.arguments=arguments),eval("if (typeof gc === 'function' && gc.toString().indexOf('[native code]') > 0) var gc = undefined");else{if(!q&&!v)throw"Unknown runtime environment. Where are we?";c.read=function(a){var b=new XMLHttpRequest;return b.open("GET",a,!1),b.send(null),b.responseText},void 0!==arguments&&(c.arguments=arguments),"undefined"!=typeof console?(c.print||(c.print=function(a){console.log(a)}),c.printErr||(c.printErr=function(a){console.log(a)})):c.print||(c.print=function(){}),v&&(c.load=importScripts),void 0===c.setWindowTitle&&(c.setWindowTitle=function(a){document.title=a})}function da(a){eval.call(null,a)}for(n in!c.load&&c.read&&(c.load=function(a){da(c.read(a))}),c.print||(c.print=function(){}),c.printErr||(c.printErr=c.print),c.arguments||(c.arguments=[]),c.thisProgram||(c.thisProgram="./this.program"),c.print=c.print,c.K=c.printErr,c.preRun=[],c.postRun=[],l)l.hasOwnProperty(n)&&(c[n]=l[n]);var z={ja:function(a){ea=a},ha:function(){return ea},T:function(){return y},S:function(a){y=a},Q:function(a){switch(a){case"i1":case"i8":return 1;case"i16":return 2;case"i32":case"float":return 4;case"i64":case"double":return 8;default:return"*"===a[a.length-1]?z.F:"i"===a[0]?(assert(0==(a=parseInt(a.substr(1)))%8),a/8):0}},ga:function(a){return Math.max(z.Q(a),z.F)},la:16,xa:function(a,b){return"double"===b||"i64"===b?7&a&&(assert(4==(7&a)),a+=4):assert(0==(3&a)),a},ra:function(a,b,d){return d||"i64"!=a&&"double"!=a?a?Math.min(b||(a?z.ga(a):0),z.F):Math.min(b,8):8},I:function(a,b,d){return d&&d.length?(d.splice||(d=Array.prototype.slice.call(d)),d.splice(0,0,b),c["dynCall_"+a].apply(null,d)):c["dynCall_"+a].call(null,b)},C:[],V:function(a){for(var b=0;b<z.C.length;b++)if(!z.C[b])return z.C[b]=a,2*(1+b);throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."},ia:function(a){z.C[(a-2)/2]=null},r:function(a){z.r.L||(z.r.L={}),z.r.L[a]||(z.r.L[a]=1,c.K(a))},J:{},ta:function(a,b){assert(b),z.J[b]||(z.J[b]={});var d=z.J[b];return d[a]||(d[a]=function(){return z.I(b,a,arguments)}),d[a]},sa:function(){throw"You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work"},D:function(a){var b=y;return y=(y=y+a|0)+15&-16,b},ka:function(a){var b=A;return A=(A=A+a|0)+15&-16,b},B:function(a){var b=C;return(a=(C=(C=C+a|0)+15&-16)>=D)&&(E("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+D+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which adjusts the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 "),a=!0),a?(C=b,0):b},G:function(a,b){return Math.ceil(a/(b||16))*(b||16)},wa:function(a,b,d){return d?+(a>>>0)+4294967296*+(b>>>0):+(a>>>0)+4294967296*+(0|b)},U:8,F:4,ma:0};z.addFunction=z.V,z.removeFunction=z.ia;var F=!1,G,H,ea,buffer;function assert(a,b){a||E("Assertion failed: "+b)}function ga(a){var b;switch("*"===(b="i32").charAt(b.length-1)&&(b="i32"),b){case"i1":case"i8":return I[a>>0];case"i16":return J[a>>1];case"i32":case"i64":return K[a>>2];case"float":return L[a>>2];case"double":return M[a>>3];default:E("invalid type for setValue: "+b)}return null}function N(a,b,d,e){var g,k;"number"==typeof a?(g=!0,k=a):(g=!1,k=a.length);var f,u,h="string"==typeof b?b:null;if(d=4==d?e:[O,z.D,z.ka,z.B][void 0===d?2:d](Math.max(k,h?1:b.length)),g){for(e=d,assert(0==(3&d)),a=d+(-4&k);e<a;e+=4)K[e>>2]=0;for(a=d+k;e<a;)I[e++>>0]=0;return d}if("i8"===h)return a.subarray||a.slice?P.set(a,d):P.set(new Uint8Array(a),d),d;for(e=0;e<k;){var m=a[e];if("function"==typeof m&&(m=z.ua(m)),0===(g=h||b[e]))e++;else{"i64"==g&&(g="i32");var t,p=d+e;switch("*"===(t=(t=g)||"i8").charAt(t.length-1)&&(t="i32"),t){case"i1":case"i8":I[p>>0]=m;break;case"i16":J[p>>1]=m;break;case"i32":K[p>>2]=m;break;case"i64":H=[m>>>0,(G=m,1<=+ha(G)?0<G?(0|ja(+ka(G/4294967296),4294967295))>>>0:~~+la((G-+(~~G>>>0))/4294967296)>>>0:0)],K[p>>2]=H[0],K[p+4>>2]=H[1];break;case"float":L[p>>2]=m;break;case"double":M[p>>3]=m;break;default:E("invalid type for setValue: "+t)}u!==g&&(f=z.Q(g),u=g),e+=f}}return d}function ma(a){var b;if(0===b||!a)return"";for(var e,d=0,g=0;(d|=e=P[a+g>>0],0!=e||b)&&(g++,!b||g!=b););if(b||(b=g),e="",128>d){for(;0<b;)d=String.fromCharCode.apply(String,P.subarray(a,a+Math.min(b,1024))),e=e?e+d:d,a+=1024,b-=1024;return e}return c.UTF8ToString(a)}function na(a){var d=!!c.___cxa_demangle;if(d)try{var e=O(a.length);fa(a.substr(1),e);var g=O(4),k=c.___cxa_demangle(e,0,0,g);if(0===ga(g)&&k)return ma(k)}catch(h){}finally{e&&Q(e),g&&Q(g),k&&Q(k)}var f=3,u={v:"void",b:"bool",c:"char",s:"short",i:"int",l:"long",f:"float",d:"double",w:"wchar_t",a:"signed char",h:"unsigned char",t:"unsigned short",j:"unsigned int",m:"unsigned long",x:"long long",y:"unsigned long long",z:"..."},m=[],p=!0;e=a;try{if("Object._main"==a||"_main"==a)return"main()";if("number"==typeof a&&(a=ma(a)),"_"!==a[0]||"_"!==a[1]||"Z"!==a[2])return a;switch(a[3]){case"n":return"operator new()";case"d":return"operator delete()"}e=function b(d,e,g){e=e||1/0;var h,t="",k=[];if("N"===a[f]){for(f++,"K"===a[f]&&f++,h=[];"E"!==a[f];)if("S"===a[f]){f++;var r=a.indexOf("_",f);h.push(m[a.substring(f,r)||0]||"?"),f=r+1}else if("C"===a[f])h.push(h[h.length-1]),f+=2;else{var B=(r=parseInt(a.substr(f))).toString().length;if(!r||!B){f--;break}var ia=a.substr(f+B,r);h.push(ia),m.push(ia),f+=B+r}if(f++,h=h.join("::"),0==--e)return d?[h]:h}else("K"===a[f]||p&&"L"===a[f])&&f++,(r=parseInt(a.substr(f)))&&(B=r.toString().length,h=a.substr(f+B,r),f+=B+r);p=!1,"I"===a[f]?(f++,r=b(!0),t+=(B=b(!0,1,!0))[0]+" "+h+"<"+r.join(", ")+">"):t=h;a:for(;f<a.length&&0<e--;)if(h=a[f++],h in u)k.push(u[h]);else switch(h){case"P":k.push(b(!0,1,!0)[0]+"*");break;case"R":k.push(b(!0,1,!0)[0]+"&");break;case"L":f++,r=a.indexOf("E",f)-f,k.push(a.substr(f,r)),f+=r+2;break;case"A":if(r=parseInt(a.substr(f)),f+=r.toString().length,"_"!==a[f])throw"?";f++,k.push(b(!0,1,!0)[0]+" ["+r+"]");break;case"E":break a;default:t+="?"+h;break a}return g||1!==k.length||"void"!==k[0]||(k=[]),d?(t&&k.push(t+"?"),k):t+"("+k.join(", ")+")"}()}catch(t){e+="?"}return 0<=e.indexOf("?")&&!d&&z.r("warning: a problem occurred in builtin C++ name demangling; build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),e}function oa(){return pa().replace(/__Z[\w\d_]+/g,(function(a){var b=na(a);return a===b?a:a+" ["+b+"]"}))}function pa(){var a=Error();if(!a.stack){try{throw Error(0)}catch(b){a=b}if(!a.stack)return"(no stack trace available)"}return a.stack.toString()}function qa(){var a=C;return 0<a%4096&&(a+=4096-a%4096),a}!function(){var d,a={stackSave:function(){z.T()},stackRestore:function(){z.S()},arrayToC:function(a){for(var b=z.D(a.length),d=b,h=0;h<a.length;h++)I[d++>>0]=a[h];return b},stringToC:function(a){var b=0;return null!=a&&0!==a&&fa(a,b=z.D(1+(a.length<<2))),b}},b=/^function\s*\(([^)]*)\)\s*{\s*([^*]*?)[\s;]*(?:return\s*(.*?)[;\s]*)?}$/;for(d in a)a.hasOwnProperty(d)&&a[d].toString().match(b).slice(1)}();for(var I,P,J,ra,K,sa,L,M,ta=0,A=0,ua=0,y=0,R=0,va=0,C=0,wa=c.TOTAL_STACK||5242880,D=c.TOTAL_MEMORY||33554432,S=65536;S<D||S<2*wa;)S=16777216>S?2*S:S+16777216;function T(a){for(;0<a.length;){var b=a.shift();if("function"==typeof b)b();else{var d=b.qa;"number"==typeof d?void 0===b.H?z.I("v",d):z.I("vi",d,[b.H]):d(void 0===b.H?null:b.H)}}}S!==D&&(D=S),assert("undefined"!=typeof Int32Array&&"undefined"!=typeof Float64Array&&!!new Int32Array(1).subarray&&!!new Int32Array(1).set,"JS engine does not provide full typed array support"),buffer=new ArrayBuffer(D),I=new Int8Array(buffer),J=new Int16Array(buffer),K=new Int32Array(buffer),P=new Uint8Array(buffer),ra=new Uint16Array(buffer),sa=new Uint32Array(buffer),L=new Float32Array(buffer),M=new Float64Array(buffer),K[0]=255,assert(255===P[0]&&0===P[3],"Typed arrays 2 must be run on a little-endian system"),c.HEAP=void 0,c.buffer=buffer,c.HEAP8=I,c.HEAP16=J,c.HEAP32=K,c.HEAPU8=P,c.HEAPU16=ra,c.HEAPU32=sa,c.HEAPF32=L,c.HEAPF64=M;var U=[],V=[],xa=[],ya=[],za=[],W=!1;function Aa(){var a=c.preRun.shift();U.unshift(a)}function Ba(a,b){for(var d=0,e=0;e<a.length;++e){55296<=(g=a.charCodeAt(e))&&57343>=g&&(g=65536+((1023&g)<<10)|1023&a.charCodeAt(++e)),127>=g?++d:d=2047>=g?d+2:65535>=g?d+3:2097151>=g?d+4:67108863>=g?d+5:d+6}e=0;if(0<(k=(d=Array(d+1)).length)){for(var g=e,k=e+k-1,h=0;h<a.length;++h){var f=a.charCodeAt(h);if(55296<=f&&57343>=f&&(f=65536+((1023&f)<<10)|1023&a.charCodeAt(++h)),127>=f){if(e>=k)break;d[e++]=f}else{if(2047>=f){if(e+1>=k)break;d[e++]=192|f>>6}else{if(65535>=f){if(e+2>=k)break;d[e++]=224|f>>12}else{if(2097151>=f){if(e+3>=k)break;d[e++]=240|f>>18}else{if(67108863>=f){if(e+4>=k)break;d[e++]=248|f>>24}else{if(e+5>=k)break;d[e++]=252|f>>30,d[e++]=128|f>>24&63}d[e++]=128|f>>18&63}d[e++]=128|f>>12&63}d[e++]=128|f>>6&63}d[e++]=128|63&f}}d[e]=0,e-=g}else e=0;return b&&(d.length=e),d}function fa(a,b){for(var d=Ba(a,void 0),e=0;e<d.length;)I[b+e>>0]=d[e],e+=1}Math.imul&&-5===Math.imul(4294967295,5)||(Math.imul=function(a,b){var d=65535&a,e=65535&b;return d*e+((a>>>16)*e+d*(b>>>16)<<16)|0}),Math.va=Math.imul,Math.clz32||(Math.clz32=function(a){a>>>=0;for(var b=0;32>b;b++)if(a&1<<31-b)return b;return 32}),Math.oa=Math.clz32;var ha=Math.abs,la=Math.ceil,ka=Math.floor,ja=Math.min;c.preloadedImages={},c.preloadedAudios={};var Ca=[function(a,b){a:for(var g,k,h,f,u,d=b,e=P,p="";g=e[d++];)128&g?(k=63&e[d++],192==(224&g)?p+=String.fromCharCode((31&g)<<6|k):(h=63&e[d++],224==(240&g)?g=(15&g)<<12|k<<6|h:(f=63&e[d++],240==(248&g)?g=(7&g)<<18|k<<12|h<<6|f:(u=63&e[d++],248==(252&g)?g=(3&g)<<24|k<<18|h<<12|f<<6|u:g=(1&g)<<30|k<<24|h<<18|f<<12|u<<6|63&e[d++])),65536>g?p+=String.fromCharCode(g):(g-=65536,p+=String.fromCharCode(55296|g>>10,56320|1023&g)))):p+=String.fromCharCode(g);X[a].n=Error(p)},function(a,b,d){X[a].A(b,d)},function(a,b,d){return X[a].u(b,d)}],ta=8,A=ta+1296;V.push(),N([0,32,0,0,0,0,0,0,0,0,0,0,36,3,0,0,47,3,0,0,61,3,0,0,88,3,0,0,112,3,0,0,146,3,0,0,177,3,0,0,203,3,0,0,235,3,0,0,2,4,0,0,26,4,0,0,49,4,0,0,75,4,0,0,104,4,0,0,128,4,0,0,150,4,0,0,169,4,0,0,195,4,0,0,224,4,0,0,254,4,0,0,0,0,1,0,0,0,4,0,0,0,16,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,123,114,101,116,117,114,110,32,76,90,52,74,83,95,114,101,97,100,40,36,48,44,32,36,49,44,32,36,50,41,125,0,123,76,90,52,74,83,95,119,114,105,116,101,40,36,48,44,32,36,49,44,32,36,50,41,125,0,123,76,90,52,74,83,95,101,114,114,111,114,40,36,48,44,32,36,49,41,125,0,79,75,95,78,111,69,114,114,111,114,0,69,82,82,79,82,95,71,69,78,69,82,73,67,0,69,82,82,79,82,95,109,97,120,66,108,111,99,107,83,105,122,101,95,105,110,118,97,108,105,100,0,69,82,82,79,82,95,98,108,111,99,107,77,111,100,101,95,105,110,118,97,108,105,100,0,69,82,82,79,82,95,99,111,110,116,101,110,116,67,104,101,99,107,115,117,109,70,108,97,103,95,105,110,118,97,108,105,100,0,69,82,82,79,82,95,99,111,109,112,114,101,115,115,105,111,110,76,101,118,101,108,95,105,110,118,97,108,105,100,0,69,82,82,79,82,95,104,101,97,100,101,114,86,101,114,115,105,111,110,95,119,114,111,110,103,0,69,82,82,79,82,95,98,108,111,99,107,67,104,101,99,107,115,117,109,95,117,110,115,117,112,112,111,114,116,101,100,0,69,82,82,79,82,95,114,101,115,101,114,118,101,100,70,108,97,103,95,115,101,116,0,69,82,82,79,82,95,97,108,108,111,99,97,116,105,111,110,95,102,97,105,108,101,100,0,69,82,82,79,82,95,115,114,99,83,105,122,101,95,116,111,111,76,97,114,103,101,0,69,82,82,79,82,95,100,115,116,77,97,120,83,105,122,101,95,116,111,111,83,109,97,108,108,0,69,82,82,79,82,95,102,114,97,109,101,72,101,97,100,101,114,95,105,110,99,111,109,112,108,101,116,101,0,69,82,82,79,82,95,102,114,97,109,101,84,121,112,101,95,117,110,107,110,111,119,110,0,69,82,82,79,82,95,102,114,97,109,101,83,105,122,101,95,119,114,111,110,103,0,69,82,82,79,82,95,115,114,99,80,116,114,95,119,114,111,110,103,0,69,82,82,79,82,95,100,101,99,111,109,112,114,101,115,115,105,111,110,70,97,105,108,101,100,0,69,82,82,79,82,95,104,101,97,100,101,114,67,104,101,99,107,115,117,109,95,105,110,118,97,108,105,100,0,69,82,82,79,82,95,99,111,110,116,101,110,116,67,104,101,99,107,115,117,109,95,105,110,118,97,108,105,100,0,69,82,82,79,82,95,109,97,120,67,111,100,101,0],"i8",4,z.U);var Da=z.G(N(12,"i8",2),8);function Ka(a){return c.___errno_location&&(K[c.___errno_location()>>2]=a),a}function Y(a){Y.fa||(C=qa(),Y.fa=!0,assert(z.B),Y.ea=z.B,z.B=function(){E("cannot dynamically allocate, sbrk now has control")});var b=C;return 0==a||Y.ea(a)?b:4294967295}assert(0==Da%8),c._i64Subtract=Ea,c._i64Add=Fa,c._memset=Ga,c._bitshift64Lshr=Ha,c._bitshift64Shl=Ia,c._memcpy=Ja,c._memmove=La;var Ma=N([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",2);c._llvm_cttz_i32=Na,ua=y=z.G(A),R=ua+wa,va=C=z.G(R),assert(va<D,"TOTAL_MEMORY not big enough for stack"),c.W={Math:Math,Int8Array:Int8Array,Int16Array:Int16Array,Int32Array:Int32Array,Uint8Array:Uint8Array,Uint16Array:Uint16Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array,NaN:NaN,Infinity:1/0},c.X={abort:E,assert:assert,invoke_iiiiiii:function(a,b,d,e,g,k,h){try{return c.dynCall_iiiiiii(a,b,d,e,g,k,h)}catch(f){if("number"!=typeof f&&"longjmp"!==f)throw f;Z.setThrew(1,0)}},_sysconf:function(a){switch(a){case 30:return 4096;case 85:return S/4096;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"==typeof navigator&&navigator.hardwareConcurrency||1}return Ka(22),-1},_pthread_self:function(){return 0},_abort:function(){c.abort()},___setErrNo:Ka,_sbrk:Y,_time:function(a){var b=Date.now()/1e3|0;return a&&(K[a>>2]=b),b},_emscripten_memcpy_big:function(a,b,d){return P.set(P.subarray(b,b+d),a),a},_emscripten_asm_const_3:function(a,b,d,e){return Ca[a](b,d,e)},_emscripten_asm_const_2:function(a,b,d){return Ca[a](b,d)},STACKTOP:y,STACK_MAX:R,tempDoublePtr:Da,ABORT:F,cttz_i8:Ma};var Z=function(global,env,buffer){"use asm";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buffer);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=new global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.STACKTOP|0;var j=env.STACK_MAX|0;var k=env.tempDoublePtr|0;var l=env.ABORT|0;var m=env.cttz_i8|0;var n=0;var o=0;var p=0;var q=0;var r=global.NaN,s=global.Infinity;var t=0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0.0;var C=0;var D=0;var E=0;var F=0;var G=0;var H=0;var I=0;var J=0;var K=0;var L=0;var M=global.Math.floor;var N=global.Math.abs;var O=global.Math.sqrt;var P=global.Math.pow;var Q=global.Math.cos;var R=global.Math.sin;var S=global.Math.tan;var T=global.Math.acos;var U=global.Math.asin;var V=global.Math.atan;var W=global.Math.atan2;var X=global.Math.exp;var Y=global.Math.log;var Z=global.Math.ceil;var _=global.Math.imul;var $=global.Math.min;var aa=global.Math.clz32;var ba=env.abort;var ca=env.assert;var da=env.invoke_iiiiiii;var ea=env._sysconf;var fa=env._pthread_self;var ga=env._abort;var ha=env.___setErrNo;var ia=env._sbrk;var ja=env._time;var ka=env._emscripten_memcpy_big;var la=env._emscripten_asm_const_3;var ma=env._emscripten_asm_const_2;var na=0.0;function pa(a){a=a|0;var b=0;b=i;i=i+a|0;i=i+15&-16;return b|0}function qa(){return i|0}function ra(a){a=a|0;i=a}function sa(a,b){a=a|0;b=b|0;i=a;j=b}function ta(a,b){a=a|0;b=b|0;if(!n){n=a;o=b}}function ua(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0]}function va(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0];a[k+4>>0]=a[b+4>>0];a[k+5>>0]=a[b+5>>0];a[k+6>>0]=a[b+6>>0];a[k+7>>0]=a[b+7>>0]}function wa(a){a=a|0;C=a}function xa(){return C|0}function ya(){c[3]=_a(8192)|0;c[4]=_a(8192)|0;return}function za(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=_a(64)|0;f=_a(152)|0;if(!f){$a(g);g=0;return g|0}if(c[f+-4>>2]&3)db(f|0,0,152)|0;c[f+56>>2]=100;c[f+60>>2]=0;c[g+4>>2]=f;f=g+8|0;c[f>>2]=a;c[g+12>>2]=b;c[g+16>>2]=d;d=g+20|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[g+40>>2]=e;d=g+44|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;f=Ha(8192,f)|0;if(f>>>0<=(c[2]|0)>>>0)return g|0;$a(c[4]|0);c[2]=f;c[4]=_a(f)|0;return g|0}function Aa(a){a=a|0;var b=0;b=c[a+4>>2]|0;if(!b){$a(a);return}$a(c[b+144>>2]|0);$a(c[b+72>>2]|0);$a(b);$a(a);return}function Ba(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=c[b+4>>2]|0;l=c[4]|0;d=b+8|0;do{if((c[2]|0)>>>0>=15){m=k+60|0;if(!(c[m>>2]|0)){f=k;e=f+56|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(e|0));j=k+32|0;d=(c[j>>2]|0)<3?1:2;e=k+148|0;if((c[e>>2]|0)>>>0<d>>>0){f=k+144|0;$a(c[f>>2]|0);if((c[j>>2]|0)<3){g=_a(16416)|0;if((g|0)!=0?(c[g+-4>>2]&3|0)!=0:0)db(g|0,0,16416)|0;db(g|0,0,16416)|0;c[f>>2]=g}else c[f>>2]=_a(262192)|0;c[e>>2]=d}d=c[k>>2]|0;if(d){d=d+-4|0;if(d>>>0>3)d=-2;else h=14}else{c[k>>2]=4;d=0;h=14}if((h|0)==14)d=c[100+(d<<2)>>2]|0;c[k+64>>2]=d;i=k+4|0;f=(c[i>>2]|0)==0&1;f=(c[b+44>>2]|0)==0?d+(f<<17)|0:f<<16;d=k+68|0;if((c[d>>2]|0)>>>0<f>>>0){c[d>>2]=f;e=k+72|0;$a(c[e>>2]|0);d=_a(f)|0;if(!d){c[e>>2]=d;d=-9;break}if(c[d+-4>>2]&3)db(d|0,0,f|0)|0;c[e>>2]=d}else d=c[k+72>>2]|0;c[k+76>>2]=d;c[k+80>>2]=0;d=k+96|0;c[k+104>>2]=0;c[d+12>>2]=606290984;c[k+112>>2]=-2048144777;c[d+20>>2]=0;c[k+120>>2]=1640531535;e=d;c[e>>2]=0;c[e+4>>2]=0;c[d+44>>2]=0;d=c[j>>2]|0;e=k+144|0;if((d|0)<3)db(c[e>>2]|0,0,16416)|0;else{j=c[e>>2]|0;c[j+262148>>2]=0;c[j+262172>>2]=d}g=l;a[g>>0]=4;a[g+1>>0]=34;a[g+2>>0]=77;a[g+3>>0]=24;h=g+4|0;f=k+16|0;d=f;a[h>>0]=c[i>>2]<<5&32|c[k+8>>2]<<2&4|(((c[d>>2]|0)!=0|(c[d+4>>2]|0)!=0)&1)<<3|64;d=g+6|0;a[g+5>>0]=c[k>>2]<<4&112;e=c[f>>2]|0;f=c[f+4>>2]|0;if((e|0)==0&(f|0)==0)e=7;else{a[d>>0]=e;d=eb(e|0,f|0,8)|0;a[g+7>>0]=d;d=eb(e|0,f|0,16)|0;a[g+8>>0]=d;d=eb(e|0,f|0,24)|0;a[g+9>>0]=d;a[g+10>>0]=f;d=eb(e|0,f|0,40)|0;a[g+11>>0]=d;d=eb(e|0,f|0,48)|0;a[g+12>>0]=d;e=eb(e|0,f|0,56)|0;a[g+13>>0]=e;e=k+88|0;c[e>>2]=0;c[e+4>>2]=0;e=15;d=g+14|0}a[d>>0]=Ia(h,d-h|0)|0;c[m>>2]=1;d=g+e-l|0;if(d>>>0<=4294967277){la(1,b|0,c[4]|0,d|0)|0;b=1;return b|0}}else d=-1}else d=-11}while(0);ma(0,b|0,c[20+(0-d<<2)>>2]|0)|0;b=0;return b|0}function Ca(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=i;i=i+16|0;p=y;s=c[a+4>>2]|0;t=c[4]|0;b=c[2]|0;u=c[3]|0;v=la(2,a|0,u|0,8192)|0;d=u;q=c[s+64>>2]|0;w=u+v|0;m=w;a:do{if((c[s+60>>2]|0)==1)if(b>>>0>=(Ha(v,s)|0)>>>0){c[p>>2]=0;n=s+4|0;l=s+32|0;g=(c[n>>2]|0)==1;g=(c[l>>2]|0)<3?g?1:2:g?3:4;r=s+80|0;b=c[r>>2]|0;do{if(!b){b=t;f=0}else{e=q-b|0;d=s+76|0;b=(c[d>>2]|0)+b|0;if(e>>>0>v>>>0){gb(b|0,u|0,v|0)|0;c[r>>2]=(c[r>>2]|0)+v;b=t;f=0;d=m;break}gb(b|0,u|0,e|0)|0;b=t;b=b+(Ja(b,c[d>>2]|0,q,g,c[s+144>>2]|0,c[l>>2]|0)|0)|0;if(!(c[n>>2]|0))c[d>>2]=(c[d>>2]|0)+q;c[r>>2]=0;f=1;d=u+e|0}}while(0);o=w;j=s+144|0;h=f;while(1){e=d;f=o-d|0;if(f>>>0<q>>>0)break;h=b;b=h+(Ja(h,e,q,g,c[j>>2]|0,c[l>>2]|0)|0)|0;h=2;d=e+q|0}k=s+36|0;if((c[k>>2]|0)!=0&e>>>0<w>>>0){g=b+(Ja(b,e,f,g,c[j>>2]|0,c[l>>2]|0)|0)|0;b=2;f=m}else{g=b;b=h;f=d}do{if((c[n>>2]|0)==0&(b|0)==2){if(c[p>>2]|0){c[s+76>>2]=c[s+72>>2];break}b=Ka(s)|0;if(!b){b=-1;x=26;break a}c[s+76>>2]=(c[s+72>>2]|0)+b}}while(0);d=s+76|0;b=c[d>>2]|0;e=s+72|0;if((b+q|0)>>>0>((c[e>>2]|0)+(c[s+68>>2]|0)|0)>>>0?(c[k>>2]|0)==0:0){b=Ka(s)|0;b=(c[e>>2]|0)+b|0;c[d>>2]=b}d=f;if(d>>>0<w>>>0){w=o-f|0;gb(b|0,d|0,w|0)|0;c[r>>2]=w}if((c[s+8>>2]|0)==1)Ra(s+96|0,u,v);b=s+88|0;w=b;w=cb(c[w>>2]|0,c[w+4>>2]|0,v|0,0)|0;c[b>>2]=w;c[b+4>>2]=C;b=g-t|0;if(b>>>0<=4294967277){la(1,a|0,c[4]|0,b|0)|0;x=1;i=y;return x|0}}else{b=-11;x=26}else{b=-1;x=26}}while(0);ma(0,a|0,c[20+(0-b<<2)>>2]|0)|0;x=0;i=y;return x|0}function Da(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=c[b+4>>2]|0;k=c[4]|0;d=c[2]|0;if(c[j+80>>2]|0)if((c[j+60>>2]|0)==1){g=j+80|0;e=c[g>>2]|0;if(d>>>0>=(e+8|0)>>>0){f=j+4|0;d=c[j+32>>2]|0;l=(c[f>>2]|0)==1;m=k;h=j+76|0;e=m+(Ja(m,c[h>>2]|0,e,(d|0)<3?l?1:2:l?3:4,c[j+144>>2]|0,d)|0)|0;if(!(c[f>>2]|0)){f=(c[h>>2]|0)+(c[g>>2]|0)|0;c[h>>2]=f}else f=c[h>>2]|0;c[g>>2]=0;d=j+72|0;if((f+(c[j+64>>2]|0)|0)>>>0>((c[d>>2]|0)+(c[j+68>>2]|0)|0)>>>0){m=Ka(j)|0;c[h>>2]=(c[d>>2]|0)+m}d=e-k|0;if(d>>>0<=4294967277)i=10}else d=-11}else d=-1;else{d=0;i=10}do{if((i|0)==10){e=k;a[e+d>>0]=0;a[e+(d+1)>>0]=0;a[e+(d+2)>>0]=0;a[e+(d+3)>>0]=0;f=e+(d+4)|0;if((c[j+8>>2]|0)==1){m=Sa(j+96|0)|0;a[f>>0]=m;a[e+(d+5)>>0]=m>>>8;a[e+(d+6)>>0]=m>>>16;a[e+(d+7)>>0]=m>>>24;d=e+(d+8)|0}else d=f;c[j+60>>2]=0;f=j+16|0;e=c[f>>2]|0;f=c[f+4>>2]|0;if(!((e|0)==0&(f|0)==0)?(m=j+88|0,!((e|0)==(c[m>>2]|0)?(f|0)==(c[m+4>>2]|0):0)):0){d=-14;break}d=d-k|0;if(d>>>0<=4294967277){la(1,b|0,c[4]|0,d|0)|0;m=1;return m|0}}}while(0);ma(0,b|0,c[20+(0-d<<2)>>2]|0)|0;m=0;return m|0}function Ea(){var a=0,b=0;a=_a(4)|0;b=_a(160)|0;if(!b){b=0;return b|0}if(c[b+-4>>2]&3)db(b|0,0,160)|0;c[b+32>>2]=100;c[a>>2]=b;if((c[2]|0)>>>0>=8192){b=a;return b|0}$a(c[4]|0);c[2]=8192;c[4]=_a(8192)|0;b=a;return b|0}function Fa(a){a=a|0;a=c[a>>2]|0;if(!a)return;$a(c[a+60>>2]|0);$a(c[a+72>>2]|0);$a(a);return}function Ga(b){b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;X=i;i=i+16|0;V=X;N=la(2,b|0,c[3]|0,8192)|0;e=8192;U=0;a:while(1){D=c[b>>2]|0;O=c[4]|0;T=c[3]|0;S=T+U|0;T=T+N|0;F=O;B=F+e|0;c[V>>2]=0;I=D+56|0;M=c[I>>2]|0;if(!((M|0)==0|(S|0)==(M|0))){e=-15;W=99;break}m=D+36|0;n=T;o=D+64|0;p=D+68|0;q=D+60|0;r=D+48|0;s=B;t=D+8|0;u=D+16|0;v=D+4|0;w=D+40|0;x=D+96|0;G=D+88|0;J=D+92|0;y=D+84|0;z=D+144|0;K=D+76|0;L=D+80|0;M=D+72|0;A=D+148|0;E=1;l=O;H=1;k=0;j=S;b:while(1){if(!E)break;c:do{switch(c[m>>2]|0){case 0:{h=j;e=n-j|0;if(e>>>0<=14){c[o>>2]=0;c[p>>2]=7;c[m>>2]=1;f=7;g=0;W=11;break c}e=La(D,h,e)|0;if(e>>>0>4294967277){W=99;break a}Z=k;Y=H;f=l;g=E;j=h+e|0;k=Z;H=Y;l=f;E=g;continue b}case 1:{e=n-j|0;h=j;f=c[p>>2]|0;g=c[o>>2]|0;W=11;break}case 2:if((n-j|0)>>>0>3){h=j;f=j+4|0;W=20;break c}else{c[o>>2]=0;c[m>>2]=3;W=17;break c}case 3:{W=17;break}case 4:{h=c[p>>2]|0;e=j;f=n-j|0;h=f>>>0<h>>>0?f:h;f=l;Z=s-l|0;h=Z>>>0<h>>>0?Z:h;gb(f|0,e|0,h|0)|0;if(c[t>>2]|0)Ra(x,e,h);Z=u;if(!((c[Z>>2]|0)==0&(c[Z+4>>2]|0)==0)){Y=w;Y=bb(c[Y>>2]|0,c[Y+4>>2]|0,h|0,0)|0;Z=w;c[Z>>2]=Y;c[Z+4>>2]=C}if(!(c[v>>2]|0))Ma(D,f,h,F,0);g=e+h|0;e=f+h|0;f=c[p>>2]|0;if((f|0)==(h|0)){c[m>>2]=2;h=k;Y=H;Z=E;l=e;j=g;k=h;H=Y;E=Z;continue b}else{H=f-h|0;c[p>>2]=H;Z=k;E=0;l=e;H=H+4|0;j=g;k=Z;continue b}}case 5:{e=c[p>>2]|0;if((n-j|0)>>>0<e>>>0){c[o>>2]=0;c[m>>2]=6;f=j;g=k;h=H;Y=l;Z=E;j=f;k=g;H=h;l=Y;E=Z;continue b}else{c[m>>2]=7;k=j;h=H;Y=l;Z=E;j=j+e|0;H=h;l=Y;E=Z;continue b}}case 6:{e=c[o>>2]|0;f=(c[p>>2]|0)-e|0;g=j;Z=n-j|0;f=f>>>0>Z>>>0?Z:f;gb((c[q>>2]|0)+e|0,g|0,f|0)|0;e=(c[o>>2]|0)+f|0;c[o>>2]=e;f=g+f|0;g=c[p>>2]|0;if(g>>>0>e>>>0){Y=k;Z=l;E=0;H=g-e+4|0;j=f;k=Y;l=Z;continue b}else{k=c[q>>2]|0;c[m>>2]=7;h=H;Y=l;Z=E;j=f;H=h;l=Y;E=Z;continue b}}case 7:if((s-l|0)>>>0<(c[r>>2]|0)>>>0){c[m>>2]=9;f=j;g=k;h=H;Y=l;Z=E;j=f;k=g;H=h;l=Y;E=Z;continue b}else{c[m>>2]=8;f=j;g=k;h=H;Y=l;Z=E;j=f;k=g;H=h;l=Y;E=Z;continue b}case 8:{e=l;f=oa[((c[v>>2]|0)==0?5:6)&7](k,e,c[p>>2]|0,c[r>>2]|0,c[K>>2]|0,c[L>>2]|0)|0;if((f|0)<0){e=-1;W=99;break a}if(c[t>>2]|0)Ra(x,e,f);Z=u;if(!((c[Z>>2]|0)==0&(c[Z+4>>2]|0)==0)){Y=w;Y=bb(c[Y>>2]|0,c[Y+4>>2]|0,f|0,((f|0)<0)<<31>>31|0)|0;Z=w;c[Z>>2]=Y;c[Z+4>>2]=C}if(!(c[v>>2]|0))Ma(D,e,f,F,0);c[m>>2]=2;g=j;h=k;Y=H;Z=E;l=e+f|0;j=g;k=h;H=Y;E=Z;continue b}case 9:{do{if(!(c[v>>2]|0)){e=c[K>>2]|0;f=c[M>>2]|0;g=c[L>>2]|0;if((e|0)!=(f|0)){h=f+(g>>>0>65536?65536:g)|0;c[y>>2]=h;f=g;e=5;break}if(g>>>0>131072){gb(e|0,e+(g+-65536)|0,65536)|0;c[L>>2]=65536;e=c[M>>2]|0;f=65536}else f=g;h=e+f|0;c[y>>2]=h;e=5}else{h=c[y>>2]|0;f=c[L>>2]|0;e=6}}while(0);e=oa[e&7](k,h,c[p>>2]|0,c[r>>2]|0,c[K>>2]|0,f)|0;if((e|0)<0){e=-16;W=99;break a}if(c[t>>2]|0)Ra(x,c[y>>2]|0,e);Z=u;if(!((c[Z>>2]|0)==0&(c[Z+4>>2]|0)==0)){Y=w;Y=bb(c[Y>>2]|0,c[Y+4>>2]|0,e|0,((e|0)<0)<<31>>31|0)|0;Z=w;c[Z>>2]=Y;c[Z+4>>2]=C}c[G>>2]=e;c[J>>2]=0;c[m>>2]=10;f=j;g=k;h=H;Y=l;Z=E;j=f;k=g;H=h;l=Y;E=Z;continue b}case 10:{Z=c[J>>2]|0;e=(c[G>>2]|0)-Z|0;f=l;Y=s-l|0;e=e>>>0>Y>>>0?Y:e;gb(f|0,(c[y>>2]|0)+Z|0,e|0)|0;if(!(c[v>>2]|0))Ma(D,f,e,F,1);Z=(c[J>>2]|0)+e|0;c[J>>2]=Z;e=f+e|0;if((Z|0)!=(c[G>>2]|0)){Y=j;Z=k;E=0;l=e;H=4;j=Y;k=Z;continue b}c[m>>2]=2;g=j;h=k;Y=H;Z=E;l=e;j=g;k=h;H=Y;E=Z;continue b}case 11:{Z=w;if(!((c[Z>>2]|0)==0&(c[Z+4>>2]|0)==0)){e=-14;W=99;break a}if(!(c[t>>2]&1073741823)){c[m>>2]=0;h=j;Y=k;Z=l;E=0;H=0;j=h;k=Y;l=Z;continue b}if((n-j|0)<4){c[o>>2]=0;c[m>>2]=12;W=75;break c}else{g=j;e=j+4|0;W=78;break c}}case 12:{W=75;break}case 13:if((n-j|0)>3){f=j;e=j+4|0;W=85;break c}else{c[o>>2]=4;c[p>>2]=8;c[m>>2]=14;W=82;break c}case 14:{W=82;break}case 15:{Y=c[p>>2]|0;Z=n-j|0;Z=Y>>>0>Z>>>0?Z:Y;f=j+Z|0;e=Y-Z|0;c[p>>2]=e;if((Y|0)!=(Z|0)){Y=k;Z=l;E=0;H=e;j=f;k=Y;l=Z;continue b}c[m>>2]=0;Y=k;Z=l;E=0;H=0;j=f;k=Y;l=Z;continue b}default:{f=j;g=k;h=H;Y=l;Z=E;j=f;k=g;H=h;l=Y;E=Z;continue b}}}while(0);do{if((W|0)==11){W=0;f=f-g|0;e=f>>>0>e>>>0?e:f;gb(D+144+g|0,h|0,e|0)|0;f=(c[o>>2]|0)+e|0;c[o>>2]=f;g=h+e|0;e=c[p>>2]|0;if(e>>>0<=f>>>0){e=La(D,z,e)|0;if(e>>>0>4294967277){W=99;break a}else{f=k;h=H;Y=l;Z=E;j=g;k=f;H=h;l=Y;E=Z;continue b}}else{Y=k;Z=l;E=0;H=e-f+4|0;j=g;k=Y;l=Z;continue b}}else if((W|0)==17){W=0;Z=c[o>>2]|0;e=4-Z|0;f=j;Y=n-j|0;e=e>>>0>Y>>>0?Y:e;gb((c[q>>2]|0)+Z|0,f|0,e|0)|0;f=f+e|0;e=(c[o>>2]|0)+e|0;c[o>>2]=e;if(e>>>0<4){Y=k;Z=l;E=0;H=4-e|0;j=f;k=Y;l=Z;continue b}else{h=c[q>>2]|0;W=20;break}}else if((W|0)==75){W=0;Z=c[o>>2]|0;e=4-Z|0;f=j;Y=n-j|0;e=e>>>0>Y>>>0?Y:e;gb((c[q>>2]|0)+Z|0,f|0,e|0)|0;f=f+e|0;e=(c[o>>2]|0)+e|0;c[o>>2]=e;if(e>>>0<4){Y=k;Z=l;E=0;H=4-e|0;j=f;k=Y;l=Z;continue b}else{g=c[q>>2]|0;e=f;W=78;break}}else if((W|0)==82){W=0;g=c[o>>2]|0;f=(c[p>>2]|0)-g|0;e=j;Z=n-j|0;f=f>>>0>Z>>>0?Z:f;gb(D+144+g|0,e|0,f|0)|0;e=e+f|0;f=(c[o>>2]|0)+f|0;c[o>>2]=f;g=c[p>>2]|0;if(g>>>0>f>>>0){Y=k;Z=l;E=0;H=g-f|0;j=e;k=Y;l=Z;continue b}else{f=A;W=85}}}while(0);if((W|0)==20){W=0;g=h;e=g+3|0;g=d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[e>>0]<<24&2130706432;if(!g){c[m>>2]=11;g=H;Y=l;Z=E;k=h;j=f;H=g;l=Y;E=Z;continue}if(g>>>0>(c[r>>2]|0)>>>0){e=-1;W=99;break a}c[p>>2]=g;if((a[e>>0]|0)<0){c[m>>2]=4;g=H;Y=l;Z=E;k=h;j=f;H=g;l=Y;E=Z;continue}else{c[m>>2]=5;k=(l|0)==(B|0);Z=l;E=k?0:E;H=k?g+4|0:H;k=h;j=f;l=Z;continue}}else if((W|0)==78){W=0;Z=g;Z=d[Z>>0]|d[Z+1>>0]<<8|d[Z+2>>0]<<16|d[Z+3>>0]<<24;if((Z|0)!=(Sa(x)|0)){e=-18;W=99;break a}c[m>>2]=0;Z=l;E=0;H=0;k=g;j=e;l=Z;continue}else if((W|0)==85){W=0;h=f;h=d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24;Y=u;c[Y>>2]=h;c[Y+4>>2]=0;c[p>>2]=h;c[m>>2]=15;h=H;Y=l;Z=E;k=f;j=e;H=h;l=Y;E=Z;continue}}do{if(((c[v>>2]|0)==0?(P=c[K>>2]|0,Q=c[M>>2]|0,(P|0)!=(Q|0)&(c[V>>2]|0)==0):0)?(R=c[m>>2]|0,(R+-1|0)>>>0<10):0){if((R|0)!=10){Y=c[L>>2]|0;Z=Y>>>0>65536?65536:Y;gb(Q|0,P+(Y-Z)|0,Z|0)|0;Y=c[M>>2]|0;c[K>>2]=Y;c[L>>2]=Z;c[y>>2]=Y+Z;break}f=(c[y>>2]|0)-Q|0;e=c[G>>2]|0;if(e>>>0>65536)e=0;else{e=65536-e|0;e=e>>>0>f>>>0?f:e}gb(Q+(f-e)|0,P+((c[L>>2]|0)-(c[J>>2]|0)-e)|0,e|0)|0;c[K>>2]=c[M>>2];c[L>>2]=f+(c[J>>2]|0)}}while(0);if(j>>>0<T>>>0)c[I>>2]=j;else c[I>>2]=0;e=l-O|0;if(H>>>0>4294967277){e=H;break}U=j-S+U|0;if(e)la(1,b|0,c[4]|0,e|0)|0;if(!H){e=1;W=106;break}if(!(N>>>0>U>>>0|(e|0)==8192)){e=1;W=106;break}}if((W|0)!=99)if((W|0)==106){i=X;return e|0}ma(0,b|0,c[20+(0-e<<2)>>2]|0)|0;Z=0;i=X;return Z|0}function Ha(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+64|0;d=h;e=d;f=e+56|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(f|0));c[d+8>>2]=1;f=(b|0)==0?d:b;b=c[f>>2]|0;if(b){b=b+-4|0;if(b>>>0>3)e=-2;else g=3}else{b=0;g=3}if((g|0)==3)e=c[100+(b<<2)>>2]|0;d=(a>>>0)/(e>>>0)|0;if(!(c[f+36>>2]|0))b=e;else b=(a>>>0)%(e>>>0)|0;a=(d<<2)+4+(_(e,d)|0)+b+((c[f+8>>2]<<2)+4)|0;i=h;return a|0}function Ia(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;e=a;n=a+b|0;f=b>>>0>15;if(!(e&3)){if(f){i=a+(b+-16)|0;j=606290984;k=-2048144777;l=0;m=1640531535;do{f=j+(_(c[e>>2]|0,-2048144777)|0)|0;f=f<<13|f>>>19;j=_(f,-1640531535)|0;o=e;a=k+(_(c[o+4>>2]|0,-2048144777)|0)|0;a=a<<13|a>>>19;k=_(a,-1640531535)|0;g=l+(_(c[o+8>>2]|0,-2048144777)|0)|0;g=g<<13|g>>>19;l=_(g,-1640531535)|0;h=m+(_(c[o+12>>2]|0,-2048144777)|0)|0;h=h<<13|h>>>19;m=_(h,-1640531535)|0;o=o+16|0;e=o}while(o>>>0<=i>>>0);f=(_(f,1013904226)|0|j>>>31)+(_(a,465361024)|0|k>>>25)+(_(g,2006650880)|0|l>>>20)+(_(h,-423362560)|0|m>>>14)|0}else f=374761393;a=f+b|0;while(1){f=e+4|0;if(f>>>0>n>>>0)break;o=a+(_(c[e>>2]|0,-1028477379)|0)|0;a=_(o<<17|o>>>15,668265263)|0;e=f}while(1){if(e>>>0>=n>>>0)break;o=a+(_(d[e>>0]|0,374761393)|0)|0;a=_(o<<11|o>>>21,-1640531535)|0;e=e+1|0}o=_(a^a>>>15,-2048144777)|0;o=_(o^o>>>13,-1028477379)|0;o=o^o>>>16;o=o>>>8;o=o&255;return o|0}else{if(f){h=a+(b+-16)|0;j=606290984;k=-2048144777;l=0;m=1640531535;do{i=e;i=j+(_(d[i>>0]|d[i+1>>0]<<8|d[i+2>>0]<<16|d[i+3>>0]<<24,-2048144777)|0)|0;i=i<<13|i>>>19;j=_(i,-1640531535)|0;o=e;f=o+4|0;f=k+(_(d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24,-2048144777)|0)|0;f=f<<13|f>>>19;k=_(f,-1640531535)|0;a=o+8|0;a=l+(_(d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24,-2048144777)|0)|0;a=a<<13|a>>>19;l=_(a,-1640531535)|0;g=o+12|0;g=m+(_(d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24,-2048144777)|0)|0;g=g<<13|g>>>19;m=_(g,-1640531535)|0;o=o+16|0;e=o}while(o>>>0<=h>>>0);f=(_(i,1013904226)|0|j>>>31)+(_(f,465361024)|0|k>>>25)+(_(a,2006650880)|0|l>>>20)+(_(g,-423362560)|0|m>>>14)|0}else f=374761393;a=f+b|0;while(1){f=e+4|0;if(f>>>0>n>>>0)break;o=e;o=a+(_(d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24,-1028477379)|0)|0;a=_(o<<17|o>>>15,668265263)|0;e=f}while(1){if(e>>>0>=n>>>0)break;o=a+(_(d[e>>0]|0,374761393)|0)|0;a=_(o<<11|o>>>21,-1640531535)|0;e=e+1|0}o=_(a^a>>>15,-2048144777)|0;o=_(o^o>>>13,-1028477379)|0;o=o^o>>>16;o=o>>>8;o=o&255;return o|0}return 0}function Ja(b,c,d,e,f,g){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=b+4|0;g=oa[e&7](f,c,i,d,d+-1|0,g)|0;a[b>>0]=g;f=b+1|0;a[f>>0]=g>>>8;h=b+2|0;a[h>>0]=g>>>16;e=b+3|0;a[e>>0]=g>>>24;if(g){d=g;d=d+4|0;return d|0}a[b>>0]=d;a[f>>0]=d>>>8;a[h>>0]=d>>>16;a[e>>0]=d>>>24^128;gb(i|0,c|0,d|0)|0;d=d+4|0;return d|0}function Ka(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+144|0;if((c[a+32>>2]|0)<3){b=c[b>>2]|0;e=c[a+72>>2]|0;a=b+16400|0;d=c[a>>2]|0;d=d>>>0<65536?d:65536;hb(e|0,(c[b+16392>>2]|0)+((c[b+16400>>2]|0)-d)|0,d|0)|0;c[b+16392>>2]=e;c[a>>2]=d;return d|0}e=c[b>>2]|0;f=e+262160|0;d=(c[e+262144>>2]|0)-((c[e+262148>>2]|0)+(c[f>>2]|0))|0;d=(d|0)<65536?d:65536;g=c[a+72>>2]|0;h=e+262144|0;hb(g|0,(c[h>>2]|0)+(0-d)|0,d|0)|0;a=e+262148|0;b=(c[h>>2]|0)-(c[a>>2]|0)|0;c[h>>2]=g+d;c[a>>2]=g+(d-b);b=b-d|0;c[f>>2]=b;c[e+262164>>2]=b;a=e+262168|0;if((c[a>>2]|0)>>>0>=b>>>0){h=d;return h|0}c[a>>2]=b;h=d;return h|0}function La(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;if(f>>>0<7){b=-12;return b|0}c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[b+28>>2]=0;i=d[e>>0]|0;j=d[e+1>>0]<<8;g=d[e+2>>0]<<16;h=d[e+3>>0]<<24;if((i&240|j|g|h|0)==407710288){c[b+12>>2]=1;if((b+144|0)==(e|0)){c[b+64>>2]=f;c[b+68>>2]=8;c[b+36>>2]=14;b=f;return b|0}else{c[b+36>>2]=13;b=4;return b|0}}if((i|j|g|h|0)!=407708164){b=-13;return b|0}c[b+12>>2]=0;i=e+4|0;j=a[i>>0]|0;k=j&255;h=k>>>5&1;l=k&16;m=k>>>3&1;n=k>>>2&1;o=m<<3|7;if(o>>>0>f>>>0){g=b+144|0;if((g|0)!=(e|0))gb(g|0,e|0,f|0)|0;c[b+64>>2]=f;c[b+68>>2]=o;c[b+36>>2]=1;b=f;return b|0}g=a[e+5>>0]|0;f=(g&255)>>>4&7;if((k&192|0)!=64){b=-6;return b|0}if(l){b=-7;return b|0}if((j&3)!=0|g<<24>>24<0){b=-8;return b|0}if(f>>>0<4){b=-2;return b|0}if(g&15){b=-8;return b|0}l=Ia(i,o+-5|0)|0;if(l<<24>>24!=(a[e+(o+-1)>>0]|0)){b=-17;return b|0}i=b+4|0;c[i>>2]=h;c[b+8>>2]=n;c[b>>2]=f;g=f+-4|0;if(g>>>0>3)g=-2;else g=c[100+(g<<2)>>2]|0;l=b+48|0;c[l>>2]=g;if(m){r=d[e+6>>0]|0;q=fb(d[e+7>>0]|0,0,8)|0;m=C;p=fb(d[e+8>>0]|0,0,16)|0;m=m|C;j=fb(d[e+9>>0]|0,0,24)|0;m=m|C|d[e+10>>0];f=fb(d[e+11>>0]|0,0,40)|0;m=m|C;k=fb(d[e+12>>0]|0,0,48)|0;k=cb(r|q|p|j|f|0,m|0,k|0,C|0)|0;m=C;f=fb(d[e+13>>0]|0,0,56)|0;f=cb(k|0,m|0,f|0,C|0)|0;m=C;e=b+16|0;c[e>>2]=f;c[e+4>>2]=m;e=b+40|0;c[e>>2]=f;c[e+4>>2]=m}if(n){h=b+96|0;c[b+104>>2]=0;c[h+12>>2]=606290984;c[b+112>>2]=-2048144777;c[h+20>>2]=0;c[b+120>>2]=1640531535;g=h;c[g>>2]=0;c[g+4>>2]=0;c[h+44>>2]=0;h=c[i>>2]|0;g=c[l>>2]|0}g=g+(((h|0)==0&1)<<17)|0;i=b+52|0;if(g>>>0>(c[i>>2]|0)>>>0){j=b+60|0;$a(c[j>>2]|0);k=b+72|0;$a(c[k>>2]|0);c[i>>2]=g;g=c[l>>2]|0;h=_a(g)|0;if(!h){c[j>>2]=h;r=-1;return r|0}if(c[h+-4>>2]&3)db(h|0,0,g|0)|0;c[j>>2]=h;h=c[i>>2]|0;g=_a(h)|0;if(!g){c[k>>2]=g;r=-1;return r|0}if(c[g+-4>>2]&3)db(g|0,0,h|0)|0;c[k>>2]=g}else g=c[b+72>>2]|0;c[b+64>>2]=0;c[b+68>>2]=0;c[b+76>>2]=g;c[b+80>>2]=0;c[b+84>>2]=g;c[b+92>>2]=0;c[b+88>>2]=0;c[b+36>>2]=2;r=o;return r|0}function Ma(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=a+80|0;g=c[m>>2]|0;if(!g){l=a+76|0;c[l>>2]=b;h=b}else{h=a+76|0;l=h;h=c[h>>2]|0}if((h+g|0)==(b|0)){c[m>>2]=g+d;return}i=b-e+d|0;if(i>>>0>65535){c[l>>2]=e;c[m>>2]=i;return}j=a+72|0;k=c[j>>2]|0;i=(h|0)==(k|0);if(!f){if(!i){a=65536-d|0;a=a>>>0>g>>>0?g:a;gb(k|0,h+(g-a)|0,a|0)|0;gb((c[j>>2]|0)+a|0,b|0,d|0)|0;c[l>>2]=c[j>>2];c[m>>2]=a+d;return}if((g+d|0)>>>0>(c[a+52>>2]|0)>>>0){l=65536-d|0;gb(h|0,h+(g-l)|0,l|0)|0;c[m>>2]=l;h=c[j>>2]|0;g=l}gb(h+g|0,b|0,d|0)|0;c[m>>2]=(c[m>>2]|0)+d;return}else{if(i){c[m>>2]=g+d;return}f=(c[a+84>>2]|0)-k|0;i=c[a+88>>2]|0;e=a+92|0;if(i>>>0>65536)i=0;else{i=65536-i|0;i=i>>>0>f>>>0?f:i}gb(k+(f-i)|0,h+(g-(c[e>>2]|0)-i)|0,i|0)|0;c[l>>2]=c[j>>2];c[m>>2]=f+(c[e>>2]|0)+d;return}}function Na(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;i=b;h=e;u=b+f|0;v=e+g|0;if(!g){if((f|0)==1)i=(a[b>>0]|0)!=0;else i=1;z=i<<31>>31;return z|0}w=e+(g+-8)|0;x=e+(g+-5)|0;y=e;q=e+(g+-12)|0;r=w;s=b+(f+-5)|0;t=b+(f+-8)|0;p=b+(f+-15)|0;a:while(1){j=i;i=j+1|0;j=d[j>>0]|0;g=j>>>4;if((g|0)==15){g=15;do{o=i;n=o+1|0;i=n;o=a[o>>0]|0;g=g+(o&255)|0}while(n>>>0<p>>>0&o<<24>>24==-1);if((g|0)<0)break}o=h;m=o+g|0;if(m>>>0>q>>>0){z=11;break}f=i;if((f+g|0)>>>0>t>>>0){z=11;break}else i=f;while(1){l=i;A=l;A=d[A>>0]|d[A+1>>0]<<8|d[A+2>>0]<<16|d[A+3>>0]<<24;l=l+4|0;l=d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24;n=h;k=n;a[k>>0]=A;a[k+1>>0]=A>>8;a[k+2>>0]=A>>16;a[k+3>>0]=A>>24;n=n+4|0;a[n>>0]=l;a[n+1>>0]=l>>8;a[n+2>>0]=l>>16;a[n+3>>0]=l>>24;h=h+8|0;if(h>>>0>=m>>>0)break;else i=i+8|0}k=f+g|0;k=g-((d[k>>0]|d[k+1>>0]<<8)&65535)|0;l=o+k|0;i=f+(g+2)|0;if(l>>>0<e>>>0)break;h=j&15;if((h|0)==15){h=15;do{f=i;if(f>>>0>s>>>0)break a;i=f+1|0;A=a[f>>0]|0;h=h+(A&255)|0}while(A<<24>>24==-1);if((h|0)<0)break}n=o+(g+(h+4))|0;h=n;f=m-l|0;if((f|0)<8){A=c[116+(f<<2)>>2]|0;a[m>>0]=a[l>>0]|0;a[o+(g+1)>>0]=a[o+(k+1)>>0]|0;a[o+(g+2)>>0]=a[o+(k+2)>>0]|0;a[o+(g+3)>>0]=a[o+(k+3)>>0]|0;k=k+(c[148+(f<<2)>>2]|0)|0;l=o+k|0;m=o+(g+4)|0;l=d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24;a[m>>0]=l;a[m+1>>0]=l>>8;a[m+2>>0]=l>>16;a[m+3>>0]=l>>24;k=k-A|0}else{j=l;j=d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24;l=l+4|0;l=d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24;A=m;m=A;a[m>>0]=j;a[m+1>>0]=j>>8;a[m+2>>0]=j>>16;a[m+3>>0]=j>>24;A=A+4|0;a[A>>0]=l;a[A+1>>0]=l>>8;a[A+2>>0]=l>>16;a[A+3>>0]=l>>24;k=k+8|0}j=o+(g+8)|0;f=o+k|0;g=j;if(n>>>0<=q>>>0){g=j;while(1){o=f;l=o;l=d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24;o=o+4|0;o=d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24;A=g;m=A;a[m>>0]=l;a[m+1>>0]=l>>8;a[m+2>>0]=l>>16;a[m+3>>0]=l>>24;A=A+4|0;a[A>>0]=o;a[A+1>>0]=o>>8;a[A+2>>0]=o>>16;a[A+3>>0]=o>>24;g=g+8|0;if(g>>>0<n>>>0)f=f+8|0;else continue a}}if(n>>>0>x>>>0)break;if(j>>>0<w>>>0){g=j;j=g;while(1){m=f;B=m;B=d[B>>0]|d[B+1>>0]<<8|d[B+2>>0]<<16|d[B+3>>0]<<24;m=m+4|0;m=d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24;A=j;l=A;a[l>>0]=B;a[l+1>>0]=B>>8;a[l+2>>0]=B>>16;a[l+3>>0]=B>>24;A=A+4|0;a[A>>0]=m;a[A+1>>0]=m>>8;a[A+2>>0]=m>>16;a[A+3>>0]=m>>24;j=j+8|0;if(j>>>0>=w>>>0)break;else f=f+8|0}f=o+(k+(r-g))|0;g=r}while(1){if(g>>>0>=n>>>0)continue a;a[g>>0]=a[f>>0]|0;f=f+1|0;g=g+1|0}}if((z|0)==11)if(!((i+g|0)!=(u|0)|m>>>0>v>>>0)){gb(o|0,i|0,g|0)|0;B=m-y|0;return B|0}B=b-i+-1|0;return B|0}function Oa(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;l=h;db(f|0,0,16416)|0;o=i>>>0>2113929216;if(o)m=0;else m=((i|0)/255|0)+i+16|0;q=(i|0)<65547;n=g;k=g+i|0;z=g+(i+-12)|0;A=g+(i+-5)|0;if((m|0)<=(j|0))if(q){if(o){h=0;return h|0}a:do{if((i|0)<13)r=n;else{Ua(g,f,2,g);m=g+1|0;u=g;o=m;m=(_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>19;while(1){i=64;r=1;while(1){q=o+r|0;r=i>>>6;if(q>>>0>z>>>0){r=n;break a}p=g+(e[f+(m<<1)>>1]|0)|0;j=m;m=(_(d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24,-1640531535)|0)>>>19;b[f+(j<<1)>>1]=o-u;j=p;if((d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24|0)==(d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24|0))break;else{o=q;i=i+1|0}}i=n;while(1){t=o;if(o>>>0<=i>>>0)break;m=p;if(m>>>0<=g>>>0)break;q=o+-1|0;m=m+-1|0;if((a[q>>0]|0)!=(a[m>>0]|0))break;o=q;p=m}m=o;s=m-n|0;o=l+1|0;if(s>>>0>14){a[l>>0]=-16;r=m+241|0;q=n+14-m|0;m=m+240+((q|0)>-255?q:-255)-n|0;q=(m>>>0)%255|0;i=s+-15|0;while(1){if((i|0)<=254)break;j=o;a[j>>0]=-1;i=i+-255|0;o=j+1|0}a[o>>0]=r-n+(q-m);o=o+1|0}else a[l>>0]=s<<4;m=o+s|0;while(1){y=n;w=y;w=d[w>>0]|d[w+1>>0]<<8|d[w+2>>0]<<16|d[w+3>>0]<<24;y=y+4|0;y=d[y>>0]|d[y+1>>0]<<8|d[y+2>>0]<<16|d[y+3>>0]<<24;j=o;x=j;a[x>>0]=w;a[x+1>>0]=w>>8;a[x+2>>0]=w>>16;a[x+3>>0]=w>>24;j=j+4|0;a[j>>0]=y;a[j+1>>0]=y>>8;a[j+2>>0]=y>>16;a[j+3>>0]=y>>24;o=o+8|0;if(o>>>0>=m>>>0){n=t;break}else n=n+8|0}while(1){r=n;o=n-p&65535;a[m>>0]=o;a[m+1>>0]=o>>8;m=m+2|0;o=Va(r+4|0,p+4|0,A)|0;r=r+(o+4)|0;n=d[l>>0]|0;if(o>>>0>14){a[l>>0]=n+15;p=o+-15|0;n=14-o|0;n=o+495+(n>>>0>4294966786?n:-510)|0;o=(n>>>0)%510|0;l=p;while(1){if(l>>>0<=509)break;j=m;a[j>>0]=-1;a[j+1>>0]=-1;m=j+2|0;l=l+-510|0}l=p+(o-n)|0;if(l>>>0>254){a[m>>0]=-1;l=l+-255|0;m=m+1|0}j=m;a[j>>0]=l;l=j+1|0}else{a[l>>0]=n+o;l=m}n=r;if(n>>>0>z>>>0)break a;Ua(n+-2|0,f,2,g);m=r;p=g+(e[f+((_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>19<<1)>>1]|0)|0;Ua(n,f,2,g);o=p;if((o+65535|0)>>>0<n>>>0)break;if((d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24|0)!=(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24|0))break;a[l>>0]=0;n=r;m=l+1|0}m=n+1|0;n=r;o=m;m=(_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>19}}}while(0);i=r;q=k-r|0;if(q>>>0>14){p=l;a[p>>0]=-16;o=k+241|0;m=r+14-k|0;k=k+(m>>>0>4294967041?m:-255)+240-r|0;m=(k>>>0)%255|0;n=q+-15|0;while(1){l=p+1|0;if(n>>>0<=254)break;a[l>>0]=-1;p=l;n=n+-255|0}a[l>>0]=o-r+(m-k);k=p+2|0}else{k=l;a[k>>0]=q<<4;l=k;k=k+1|0}gb(k|0,i|0,q|0)|0;h=l+(q+1)-h|0;return h|0}else{if(o){h=0;return h|0}Ua(g,f,0,g);m=g+1|0;o=m;m=(_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>20;b:while(1){r=64;s=1;while(1){t=o;i=o;o=o+s|0;j=r;r=r+1|0;s=j>>>6;if(o>>>0>z>>>0){r=n;break b}p=c[f+(m<<2)>>2]|0;q=m;m=(_(d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24,-1640531535)|0)>>>20;c[f+(q<<2)>>2]=t;q=p;if((q+65535|0)>>>0<i>>>0)continue;if((d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24|0)==(d[i>>0]|d[i+1>>0]<<8|d[i+2>>0]<<16|d[i+3>>0]<<24|0))break}i=n;while(1){m=t;if(m>>>0<=i>>>0)break;o=p;if(o>>>0<=g>>>0)break;q=m+-1|0;m=o+-1|0;if((a[q>>0]|0)!=(a[m>>0]|0))break;t=q;p=m}s=t-n|0;o=l+1|0;if(s>>>0>14){a[l>>0]=-16;m=t+241|0;q=n+14-t|0;q=t+240+((q|0)>-255?q:-255)-n|0;i=(q>>>0)%255|0;r=s+-15|0;while(1){if((r|0)<=254)break;j=o;a[j>>0]=-1;r=r+-255|0;o=j+1|0}a[o>>0]=m-n+(i-q);o=o+1|0}else a[l>>0]=s<<4;m=o+s|0;while(1){y=n;w=y;w=d[w>>0]|d[w+1>>0]<<8|d[w+2>>0]<<16|d[w+3>>0]<<24;y=y+4|0;y=d[y>>0]|d[y+1>>0]<<8|d[y+2>>0]<<16|d[y+3>>0]<<24;j=o;x=j;a[x>>0]=w;a[x+1>>0]=w>>8;a[x+2>>0]=w>>16;a[x+3>>0]=w>>24;j=j+4|0;a[j>>0]=y;a[j+1>>0]=y>>8;a[j+2>>0]=y>>16;a[j+3>>0]=y>>24;o=o+8|0;if(o>>>0>=m>>>0){n=t;break}else n=n+8|0}while(1){r=n;o=n-p&65535;a[m>>0]=o;a[m+1>>0]=o>>8;m=m+2|0;o=Va(r+4|0,p+4|0,A)|0;r=r+(o+4)|0;n=d[l>>0]|0;if(o>>>0>14){a[l>>0]=n+15;p=o+-15|0;n=14-o|0;n=o+495+(n>>>0>4294966786?n:-510)|0;o=(n>>>0)%510|0;l=p;while(1){if(l>>>0<=509)break;j=m;a[j>>0]=-1;a[j+1>>0]=-1;m=j+2|0;l=l+-510|0}l=p+(o-n)|0;if(l>>>0>254){a[m>>0]=-1;l=l+-255|0;m=m+1|0}j=m;a[j>>0]=l;l=j+1|0}else{a[l>>0]=n+o;l=m}n=r;if(n>>>0>z>>>0)break b;Ua(n+-2|0,f,0,g);m=r;p=c[f+((_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>20<<2)>>2]|0;Ua(n,f,0,g);o=p;if((o+65535|0)>>>0<n>>>0)break;if((d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24|0)!=(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24|0))break;a[l>>0]=0;n=r;m=l+1|0}m=n+1|0;n=r;o=m;m=(_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>20}i=r;q=k-r|0;if(q>>>0>14){a[l>>0]=-16;p=k+241|0;n=r+14-k|0;k=k+(n>>>0>4294967041?n:-255)+240-r|0;n=(k>>>0)%255|0;o=q+-15|0;while(1){m=l+1|0;if(o>>>0<=254)break;a[m>>0]=-1;l=m;o=o+-255|0}a[m>>0]=p-r+(n-k);k=l+2|0}else{k=l;a[k>>0]=q<<4;m=k;k=k+1|0}gb(k|0,i|0,q|0)|0;h=m+(q+1)-h|0;return h|0}y=h+j|0;if(!q){if(o){h=0;return h|0}Ua(g,f,0,g);m=g+1|0;o=m;m=(_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>20;c:while(1){r=64;s=1;while(1){t=o;i=o;o=o+s|0;w=r;r=r+1|0;s=w>>>6;if(o>>>0>z>>>0){x=n;v=l;l=160;break c}q=c[f+(m<<2)>>2]|0;p=m;m=(_(d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24,-1640531535)|0)>>>20;c[f+(p<<2)>>2]=t;p=q;if((p+65535|0)>>>0<i>>>0)continue;if((d[p>>0]|d[p+1>>0]<<8|d[p+2>>0]<<16|d[p+3>>0]<<24|0)==(d[i>>0]|d[i+1>>0]<<8|d[i+2>>0]<<16|d[i+3>>0]<<24|0))break}i=n;while(1){m=t;if(m>>>0<=i>>>0)break;o=q;if(o>>>0<=g>>>0)break;p=m+-1|0;m=o+-1|0;if((a[p>>0]|0)!=(a[m>>0]|0))break;t=p;q=m}s=t-n|0;m=l+1|0;if((l+(s+8+((s>>>0)/255|0)+1)|0)>>>0>y>>>0){u=0;l=168;break}if(s>>>0>14){a[l>>0]=-16;o=t+241|0;p=n+14-t|0;p=t+240+((p|0)>-255?p:-255)-n|0;i=(p>>>0)%255|0;r=s+-15|0;while(1){if((r|0)<=254)break;w=m;a[w>>0]=-1;r=r+-255|0;m=w+1|0}a[m>>0]=o-n+(i-p);m=m+1|0}else a[l>>0]=s<<4;o=m+s|0;while(1){s=n;i=s;i=d[i>>0]|d[i+1>>0]<<8|d[i+2>>0]<<16|d[i+3>>0]<<24;s=s+4|0;s=d[s>>0]|d[s+1>>0]<<8|d[s+2>>0]<<16|d[s+3>>0]<<24;w=m;r=w;a[r>>0]=i;a[r+1>>0]=i>>8;a[r+2>>0]=i>>16;a[r+3>>0]=i>>24;w=w+4|0;a[w>>0]=s;a[w+1>>0]=s>>8;a[w+2>>0]=s>>16;a[w+3>>0]=s>>24;m=m+8|0;if(m>>>0>=o>>>0){n=t;break}else n=n+8|0}while(1){w=n;m=n-q&65535;a[o>>0]=m;a[o+1>>0]=m>>8;m=o+2|0;p=Va(w+4|0,q+4|0,A)|0;n=w+(p+4)|0;if((o+((p>>>8)+8)|0)>>>0>y>>>0){u=0;l=168;break c}o=d[l>>0]|0;if(p>>>0>14){a[l>>0]=o+15;q=p+-15|0;o=14-p|0;o=p+495+(o>>>0>4294966786?o:-510)|0;p=(o>>>0)%510|0;l=q;while(1){if(l>>>0<=509)break;w=m;a[w>>0]=-1;a[w+1>>0]=-1;m=w+2|0;l=l+-510|0}l=q+(p-o)|0;if(l>>>0>254){a[m>>0]=-1;l=l+-255|0;m=m+1|0}w=m;a[w>>0]=l;l=w+1|0}else{a[l>>0]=o+p;l=m}o=n;if(o>>>0>z>>>0){x=n;v=l;l=160;break c}Ua(o+-2|0,f,0,g);m=n;q=c[f+((_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>20<<2)>>2]|0;Ua(o,f,0,g);p=q;if((p+65535|0)>>>0<o>>>0)break;if((d[p>>0]|d[p+1>>0]<<8|d[p+2>>0]<<16|d[p+3>>0]<<24|0)!=(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24|0))break;a[l>>0]=0;o=l+1|0}m=o+1|0;o=m;m=(_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>20}if((l|0)==160){i=x;q=k-x|0;if((v-h+q+1+(((q+240|0)>>>0)/255|0)|0)>>>0>j>>>0){h=0;return h|0}if(q>>>0>14){p=v;a[p>>0]=-16;o=k+241|0;m=x+14-k|0;k=k+(m>>>0>4294967041?m:-255)+240-x|0;m=(k>>>0)%255|0;n=q+-15|0;while(1){l=p+1|0;if(n>>>0<=254)break;a[l>>0]=-1;p=l;n=n+-255|0}a[l>>0]=o-x+(m-k);k=p+2|0}else{k=v;a[k>>0]=q<<4;l=k;k=k+1|0}gb(k|0,i|0,q|0)|0;h=l+(q+1)-h|0;return h|0}else if((l|0)==168)return u|0}else{if(o){h=0;return h|0}d:do{if((i|0)>=13){Ua(g,f,2,g);m=g+1|0;v=g;o=m;m=(_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>19;e:while(1){r=64;s=1;while(1){q=o+s|0;s=r>>>6;if(q>>>0>z>>>0){w=n;p=l;break d}i=g+(e[f+(m<<1)>>1]|0)|0;x=m;m=(_(d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24,-1640531535)|0)>>>19;b[f+(x<<1)>>1]=o-v;x=i;if((d[x>>0]|d[x+1>>0]<<8|d[x+2>>0]<<16|d[x+3>>0]<<24|0)==(d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24|0))break;else{o=q;r=r+1|0}}r=n;while(1){u=o;if(o>>>0<=r>>>0)break;m=i;if(m>>>0<=g>>>0)break;q=o+-1|0;m=m+-1|0;if((a[q>>0]|0)!=(a[m>>0]|0))break;o=q;i=m}t=o-n|0;m=l+1|0;if((l+(t+8+((t>>>0)/255|0)+1)|0)>>>0>y>>>0){u=0;l=168;break}if(t>>>0>14){a[l>>0]=-16;s=o+241|0;q=n+14-o|0;o=o+240+((q|0)>-255?q:-255)-n|0;q=(o>>>0)%255|0;r=t+-15|0;while(1){if((r|0)<=254)break;x=m;a[x>>0]=-1;r=r+-255|0;m=x+1|0}a[m>>0]=s-n+(q-o);m=m+1|0}else a[l>>0]=t<<4;o=m+t|0;while(1){t=n;r=t;r=d[r>>0]|d[r+1>>0]<<8|d[r+2>>0]<<16|d[r+3>>0]<<24;t=t+4|0;t=d[t>>0]|d[t+1>>0]<<8|d[t+2>>0]<<16|d[t+3>>0]<<24;x=m;s=x;a[s>>0]=r;a[s+1>>0]=r>>8;a[s+2>>0]=r>>16;a[s+3>>0]=r>>24;x=x+4|0;a[x>>0]=t;a[x+1>>0]=t>>8;a[x+2>>0]=t>>16;a[x+3>>0]=t>>24;m=m+8|0;if(m>>>0>=o>>>0){n=u;break}else n=n+8|0}while(1){x=n;m=n-i&65535;a[o>>0]=m;a[o+1>>0]=m>>8;m=o+2|0;q=Va(x+4|0,i+4|0,A)|0;n=x+(q+4)|0;if((o+((q>>>8)+8)|0)>>>0>y>>>0){u=0;l=168;break e}o=d[l>>0]|0;if(q>>>0>14){a[l>>0]=o+15;i=q+-15|0;o=14-q|0;o=q+495+(o>>>0>4294966786?o:-510)|0;q=(o>>>0)%510|0;l=i;while(1){if(l>>>0<=509)break;x=m;a[x>>0]=-1;a[x+1>>0]=-1;m=x+2|0;l=l+-510|0}l=i+(q-o)|0;if(l>>>0>254){a[m>>0]=-1;l=l+-255|0;m=m+1|0}x=m;a[x>>0]=l;l=x+1|0}else{a[l>>0]=o+q;l=m}m=n;if(m>>>0>z>>>0){w=n;p=l;break d}Ua(m+-2|0,f,2,g);o=n;i=g+(e[f+((_(d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24,-1640531535)|0)>>>19<<1)>>1]|0)|0;Ua(m,f,2,g);q=i;if((q+65535|0)>>>0<m>>>0)break;if((d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24|0)!=(d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24|0))break;a[l>>0]=0;o=l+1|0}m=m+1|0;o=m;m=(_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>19}if((l|0)==168)return u|0}else{w=n;p=l}}while(0);i=w;q=k-w|0;if((p-h+q+1+(((q+240|0)>>>0)/255|0)|0)>>>0>j>>>0){h=0;return h|0}if(q>>>0>14){a[p>>0]=-16;o=k+241|0;m=w+14-k|0;k=k+(m>>>0>4294967041?m:-255)+240-w|0;m=(k>>>0)%255|0;n=q+-15|0;while(1){l=p+1|0;if(n>>>0<=254)break;a[l>>0]=-1;p=l;n=n+-255|0}a[l>>0]=o-w+(m-k);k=p+2|0}else{k=p;a[k>>0]=q<<4;l=k;k=k+1|0}gb(k|0,i|0,q|0)|0;h=l+(q+1)-h|0;return h|0}return 0}function Pa(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;G=e;j=f;F=b+16392|0;n=c[F>>2]|0;I=b+16400|0;o=c[I>>2]|0;p=n+o|0;k=n;if(c[b+16388>>2]|0){g=0;return g|0}H=b+16384|0;i=c[H>>2]|0;if(i>>>0>2147483648?1:i>>>0>((o|0)!=0&p>>>0<e>>>0?p:G)>>>0){i=i+-65536|0;k=0;while(1){if((k|0)==4096)break;E=b+(k<<2)|0;D=c[E>>2]|0;c[E>>2]=D>>>0<i>>>0?0:D-i|0;k=k+1|0}c[H>>2]=65536;i=c[I>>2]|0;if(i>>>0>65536){c[I>>2]=65536;i=65536}k=n+(o-i)|0;c[F>>2]=k;m=k;r=65536;l=i}else{m=n;r=i;l=o}i=e+g|0;if(i>>>0>m>>>0&i>>>0<p>>>0){k=p-i|0;if(k>>>0>65536){k=65536;l=65536}else{l=k;E=l>>>0<4;k=E?0:l;l=E?0:l}c[I>>2]=l;E=n+(o-k)|0;c[F>>2]=E;l=k;k=E}m=l>>>0<65536&l>>>0<r>>>0;if((p|0)==(e|0)){t=e+(0-l)|0;q=e;x=e+(g+-12)|0;y=e+(g+-5)|0;z=f+h|0;k=g>>>0>2113929216;a:do{if(m)if(!k){u=e+(0-r)|0;v=t;b:do{if((g|0)>=13){w=u;Ua(e,b,1,w);k=e+1|0;l=k;k=(_(d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24,-1640531535)|0)>>>20;while(1){p=64;r=1;while(1){m=l+r|0;G=p;p=p+1|0;r=G>>>6;if(m>>>0>x>>>0)break b;n=w+(c[b+(k<<2)>>2]|0)|0;G=k;k=(_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>20;c[b+(G<<2)>>2]=l-u;if(n>>>0<t>>>0){l=m;continue}o=n;if((o+65535|0)>>>0<l>>>0){l=m;continue}if((d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24|0)==(d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24|0))break;else l=m}o=q;p=v;while(1){s=l;if(l>>>0<=o>>>0)break;k=n;if(k>>>0<=p>>>0)break;m=l+-1|0;k=k+-1|0;if((a[m>>0]|0)!=(a[k>>0]|0))break;l=m;n=k}r=l-q|0;k=j+1|0;if((j+(r+8+((r>>>0)/255|0)+1)|0)>>>0>z>>>0){i=0;break a}if(r>>>0>14){a[j>>0]=-16;p=l+241|0;m=q+14-l|0;l=l+240+((m|0)>-255?m:-255)-q|0;m=(l>>>0)%255|0;o=r+-15|0;while(1){if((o|0)<=254)break;G=k;a[G>>0]=-1;o=o+-255|0;k=G+1|0}a[k>>0]=p-q+(m-l);k=k+1|0}else a[j>>0]=r<<4;l=k+r|0;while(1){F=q;E=F;E=d[E>>0]|d[E+1>>0]<<8|d[E+2>>0]<<16|d[E+3>>0]<<24;F=F+4|0;F=d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24;G=k;e=G;a[e>>0]=E;a[e+1>>0]=E>>8;a[e+2>>0]=E>>16;a[e+3>>0]=E>>24;G=G+4|0;a[G>>0]=F;a[G+1>>0]=F>>8;a[G+2>>0]=F>>16;a[G+3>>0]=F>>24;k=k+8|0;if(k>>>0>=l>>>0){q=s;break}else q=q+8|0}while(1){G=q;k=q-n&65535;a[l>>0]=k;a[l+1>>0]=k>>8;k=l+2|0;m=Va(G+4|0,n+4|0,y)|0;q=G+(m+4)|0;if((l+((m>>>8)+8)|0)>>>0>z>>>0){i=0;break a}l=d[j>>0]|0;if(m>>>0>14){a[j>>0]=l+15;n=m+-15|0;l=14-m|0;l=m+495+(l>>>0>4294966786?l:-510)|0;m=(l>>>0)%510|0;j=n;while(1){if(j>>>0<=509)break;G=k;a[G>>0]=-1;a[G+1>>0]=-1;k=G+2|0;j=j+-510|0}j=n+(m-l)|0;if(j>>>0>254){a[k>>0]=-1;j=j+-255|0;k=k+1|0}G=k;a[G>>0]=j;j=G+1|0}else{a[j>>0]=l+m;j=k}k=q;if(k>>>0>x>>>0)break b;Ua(k+-2|0,b,1,w);l=q;n=w+(c[b+((_(d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24,-1640531535)|0)>>>20<<2)>>2]|0)|0;Ua(k,b,1,w);m=n;if(m>>>0<t>>>0|(m+65535|0)>>>0<k>>>0)break;if((d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24|0)!=(d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24|0))break;a[j>>0]=0;l=j+1|0}k=k+1|0;l=k;k=(_(d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24,-1640531535)|0)>>>20}}}while(0);p=q;o=i-q|0;if((j-f+o+1+(((o+240|0)>>>0)/255|0)|0)>>>0<=h>>>0){if(o>>>0>14){n=j;a[n>>0]=-16;m=i+241|0;k=q+14-i|0;i=i+(k>>>0>4294967041?k:-255)+240-q|0;k=(i>>>0)%255|0;l=o+-15|0;while(1){j=n+1|0;if(l>>>0<=254)break;a[j>>0]=-1;n=j;l=l+-255|0}a[j>>0]=m-q+(k-i);i=n+2|0}else{i=j;a[i>>0]=o<<4;j=i;i=i+1|0}gb(i|0,p|0,o|0)|0;i=j+(o+1)-f|0}else i=0}else i=0;else if(!k){v=e+(0-r)|0;c:do{if((g|0)>=13){u=v;Ua(e,b,1,u);k=e+1|0;l=k;k=(_(d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24,-1640531535)|0)>>>20;while(1){p=64;r=1;while(1){m=l+r|0;G=p;p=p+1|0;r=G>>>6;if(m>>>0>x>>>0)break c;n=u+(c[b+(k<<2)>>2]|0)|0;o=k;k=(_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>20;c[b+(o<<2)>>2]=l-v;o=n;if((o+65535|0)>>>0<l>>>0){l=m;continue}if((d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24|0)==(d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24|0))break;else l=m}o=q;p=t;while(1){s=l;if(l>>>0<=o>>>0)break;k=n;if(k>>>0<=p>>>0)break;m=l+-1|0;k=k+-1|0;if((a[m>>0]|0)!=(a[k>>0]|0))break;l=m;n=k}k=l;r=k-q|0;l=j+1|0;if((j+(r+8+((r>>>0)/255|0)+1)|0)>>>0>z>>>0){i=0;break a}if(r>>>0>14){a[j>>0]=-16;p=k+241|0;m=q+14-k|0;k=k+240+((m|0)>-255?m:-255)-q|0;m=(k>>>0)%255|0;o=r+-15|0;while(1){if((o|0)<=254)break;G=l;a[G>>0]=-1;o=o+-255|0;l=G+1|0}a[l>>0]=p-q+(m-k);l=l+1|0}else a[j>>0]=r<<4;m=l+r|0;k=q;while(1){F=k;E=F;E=d[E>>0]|d[E+1>>0]<<8|d[E+2>>0]<<16|d[E+3>>0]<<24;F=F+4|0;F=d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24;G=l;e=G;a[e>>0]=E;a[e+1>>0]=E>>8;a[e+2>>0]=E>>16;a[e+3>>0]=E>>24;G=G+4|0;a[G>>0]=F;a[G+1>>0]=F>>8;a[G+2>>0]=F>>16;a[G+3>>0]=F>>24;l=l+8|0;if(l>>>0>=m>>>0){q=s;l=m;break}else k=k+8|0}while(1){G=q;k=q-n&65535;a[l>>0]=k;a[l+1>>0]=k>>8;k=l+2|0;m=Va(G+4|0,n+4|0,y)|0;q=G+(m+4)|0;if((l+((m>>>8)+8)|0)>>>0>z>>>0){i=0;break a}l=d[j>>0]|0;if(m>>>0>14){a[j>>0]=l+15;n=m+-15|0;l=14-m|0;l=m+495+(l>>>0>4294966786?l:-510)|0;m=(l>>>0)%510|0;j=n;while(1){if(j>>>0<=509)break;G=k;a[G>>0]=-1;a[G+1>>0]=-1;k=G+2|0;j=j+-510|0}j=n+(m-l)|0;if(j>>>0>254){a[k>>0]=-1;j=j+-255|0;k=k+1|0}G=k;a[G>>0]=j;j=G+1|0}else{a[j>>0]=l+m;j=k}k=q;if(k>>>0>x>>>0)break c;Ua(k+-2|0,b,1,u);l=q;n=u+(c[b+((_(d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24,-1640531535)|0)>>>20<<2)>>2]|0)|0;Ua(k,b,1,u);m=n;if((m+65535|0)>>>0<k>>>0)break;if((d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24|0)!=(d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24|0))break;a[j>>0]=0;l=j+1|0}k=k+1|0;l=k;k=(_(d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24,-1640531535)|0)>>>20}}}while(0);p=q;o=i-q|0;if((j-f+o+1+(((o+240|0)>>>0)/255|0)|0)>>>0<=h>>>0){if(o>>>0>14){a[j>>0]=-16;n=i+241|0;l=q+14-i|0;i=i+(l>>>0>4294967041?l:-255)+240-q|0;l=(i>>>0)%255|0;m=o+-15|0;while(1){k=j+1|0;if(m>>>0<=254)break;a[k>>0]=-1;j=k;m=m+-255|0}a[k>>0]=n-q+(l-i);i=j+2|0}else{i=j;a[i>>0]=o<<4;k=i;i=i+1|0}gb(i|0,p|0,o|0)|0;i=k+(o+1)-f|0}else i=0}else i=0}while(0);c[I>>2]=(c[I>>2]|0)+g;c[H>>2]=(c[H>>2]|0)+g;g=i;return g|0}d:do{if(m){E=e+(0-l)|0;D=k;y=D+l|0;q=e;z=y-q|0;A=e+(g+-12)|0;B=e+(g+-5)|0;C=f+h|0;if(g>>>0<=2113929216){w=e+(0-r)|0;e:do{if((g|0)>=13){x=w;Ua(e,b,1,x);l=e+1|0;m=l;l=(_(d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24,-1640531535)|0)>>>20;while(1){s=64;t=1;while(1){p=m+t|0;v=s;s=s+1|0;t=v>>>6;if(p>>>0>A>>>0)break e;o=x+(c[b+(l<<2)>>2]|0)|0;v=o>>>0<e>>>0;n=v?z:0;v=v?k:G;u=l;l=(_(d[p>>0]|d[p+1>>0]<<8|d[p+2>>0]<<16|d[p+3>>0]<<24,-1640531535)|0)>>>20;c[b+(u<<2)>>2]=m-w;if(o>>>0<E>>>0){m=p;continue}r=o;if((r+65535|0)>>>0<m>>>0){m=p;continue}u=r+n|0;if((d[u>>0]|d[u+1>>0]<<8|d[u+2>>0]<<16|d[u+3>>0]<<24|0)==(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24|0))break;else m=p}r=q;s=v;t=n+-1|0;while(1){u=m;if(m>>>0<=r>>>0)break;l=o;if((l+n|0)>>>0<=s>>>0)break;p=m+-1|0;if((a[p>>0]|0)!=(a[l+t>>0]|0))break;m=p;o=l+-1|0}t=m-q|0;l=j+1|0;if((j+(t+8+((t>>>0)/255|0)+1)|0)>>>0>C>>>0){j=F;i=0;break d}if(t>>>0>14){a[j>>0]=-16;s=m+241|0;p=q+14-m|0;m=m+240+((p|0)>-255?p:-255)-q|0;p=(m>>>0)%255|0;r=t+-15|0;while(1){if((r|0)<=254)break;J=l;a[J>>0]=-1;r=r+-255|0;l=J+1|0}a[l>>0]=s-q+(p-m);l=l+1|0}else a[j>>0]=t<<4;m=l+t|0;while(1){t=q;r=t;r=d[r>>0]|d[r+1>>0]<<8|d[r+2>>0]<<16|d[r+3>>0]<<24;t=t+4|0;t=d[t>>0]|d[t+1>>0]<<8|d[t+2>>0]<<16|d[t+3>>0]<<24;J=l;s=J;a[s>>0]=r;a[s+1>>0]=r>>8;a[s+2>>0]=r>>16;a[s+3>>0]=r>>24;J=J+4|0;a[J>>0]=t;a[J+1>>0]=t>>8;a[J+2>>0]=t>>16;a[J+3>>0]=t>>24;l=l+8|0;if(l>>>0>=m>>>0){q=u;r=v;s=m;break}else q=q+8|0}while(1){p=q;m=o;l=q-o&65535;a[s>>0]=l;a[s+1>>0]=l>>8;l=s+2|0;if((r|0)==(D|0)){J=p+(y-(m+n))|0;J=J>>>0>B>>>0?B:J;o=Va(p+4|0,m+(n+4)|0,J)|0;m=o+4|0;n=p+m|0;if((n|0)==(J|0)){J=Va(n,e,B)|0;n=p+(m+J)|0;o=o+J|0}}else{o=Va(p+4|0,m+4|0,B)|0;n=p+(o+4)|0}q=n;if((s+((o>>>8)+8)|0)>>>0>C>>>0){j=F;i=0;break d}m=d[j>>0]|0;if(o>>>0>14){a[j>>0]=m+15;p=o+-15|0;m=14-o|0;m=o+495+(m>>>0>4294966786?m:-510)|0;o=(m>>>0)%510|0;j=p;while(1){if(j>>>0<=509)break;J=l;a[J>>0]=-1;a[J+1>>0]=-1;l=J+2|0;j=j+-510|0}j=p+(o-m)|0;if(j>>>0>254){a[l>>0]=-1;j=j+-255|0;l=l+1|0}J=l;a[J>>0]=j;j=J+1|0}else{a[j>>0]=m+o;j=l}if(n>>>0>A>>>0)break e;Ua(n+-2|0,b,1,x);o=x+(c[b+((_(d[n>>0]|d[n+1>>0]<<8|d[n+2>>0]<<16|d[n+3>>0]<<24,-1640531535)|0)>>>20<<2)>>2]|0)|0;m=o>>>0<e>>>0;p=m?z:0;Ua(n,b,1,x);l=o;if(l>>>0<E>>>0|(l+65535|0)>>>0<n>>>0)break;J=l+p|0;if((d[J>>0]|d[J+1>>0]<<8|d[J+2>>0]<<16|d[J+3>>0]<<24|0)!=(d[n>>0]|d[n+1>>0]<<8|d[n+2>>0]<<16|d[n+3>>0]<<24|0))break;a[j>>0]=0;r=m?k:G;s=j+1|0;n=p}l=n+1|0;m=l;l=(_(d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24,-1640531535)|0)>>>20}}}while(0);o=q;p=i-q|0;if((j-f+p+1+(((p+240|0)>>>0)/255|0)|0)>>>0<=h>>>0){if(p>>>0>14){a[j>>0]=-16;n=i+241|0;l=q+14-i|0;i=i+(l>>>0>4294967041?l:-255)+240-q|0;l=(i>>>0)%255|0;m=p+-15|0;while(1){k=j+1|0;if(m>>>0<=254)break;a[k>>0]=-1;j=k;m=m+-255|0}a[k>>0]=n-q+(l-i);i=j+2|0}else{i=j;a[i>>0]=p<<4;k=i;i=i+1|0}gb(i|0,o|0,p|0)|0;j=F;i=k+(p+1)-f|0}else{j=F;i=0}}else{j=F;i=0}}else{D=k;y=D+l|0;l=e;z=y-l|0;A=e+(g+-12)|0;B=e+(g+-5)|0;C=f+h|0;if(g>>>0<=2113929216){w=e+(0-r)|0;f:do{if((g|0)<13)q=l;else{x=w;Ua(e,b,1,x);m=e+1|0;n=m;m=(_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>20;while(1){s=64;t=1;while(1){q=n+t|0;J=s;s=s+1|0;t=J>>>6;if(q>>>0>A>>>0){q=l;break f}o=x+(c[b+(m<<2)>>2]|0)|0;v=o>>>0<e>>>0;p=v?z:0;v=v?k:G;r=m;m=(_(d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24,-1640531535)|0)>>>20;c[b+(r<<2)>>2]=n-w;r=o;if((r+65535|0)>>>0<n>>>0){n=q;continue}J=r+p|0;if((d[J>>0]|d[J+1>>0]<<8|d[J+2>>0]<<16|d[J+3>>0]<<24|0)==(d[n>>0]|d[n+1>>0]<<8|d[n+2>>0]<<16|d[n+3>>0]<<24|0))break;else n=q}r=l;s=v;t=p+-1|0;while(1){u=n;if(n>>>0<=r>>>0)break;m=o;if((m+p|0)>>>0<=s>>>0)break;q=n+-1|0;if((a[q>>0]|0)!=(a[m+t>>0]|0))break;n=q;o=m+-1|0}t=n-l|0;m=j+1|0;if((j+(t+8+((t>>>0)/255|0)+1)|0)>>>0>C>>>0){j=F;i=0;break d}if(t>>>0>14){a[j>>0]=-16;s=n+241|0;q=l+14-n|0;n=n+240+((q|0)>-255?q:-255)-l|0;q=(n>>>0)%255|0;r=t+-15|0;while(1){if((r|0)<=254)break;J=m;a[J>>0]=-1;r=r+-255|0;m=J+1|0}a[m>>0]=s-l+(q-n);m=m+1|0}else a[j>>0]=t<<4;n=m+t|0;while(1){E=l;s=E;s=d[s>>0]|d[s+1>>0]<<8|d[s+2>>0]<<16|d[s+3>>0]<<24;E=E+4|0;E=d[E>>0]|d[E+1>>0]<<8|d[E+2>>0]<<16|d[E+3>>0]<<24;J=m;t=J;a[t>>0]=s;a[t+1>>0]=s>>8;a[t+2>>0]=s>>16;a[t+3>>0]=s>>24;J=J+4|0;a[J>>0]=E;a[J+1>>0]=E>>8;a[J+2>>0]=E>>16;a[J+3>>0]=E>>24;m=m+8|0;if(m>>>0>=n>>>0){l=u;r=v;s=n;break}else l=l+8|0}while(1){q=l;n=o;m=l-o&65535;a[s>>0]=m;a[s+1>>0]=m>>8;m=s+2|0;if((r|0)==(D|0)){J=q+(y-(n+p))|0;J=J>>>0>B>>>0?B:J;o=Va(q+4|0,n+(p+4)|0,J)|0;l=o+4|0;n=q+l|0;if((n|0)==(J|0)){J=Va(n,e,B)|0;q=q+(l+J)|0;o=o+J|0}else q=n}else{o=Va(q+4|0,n+4|0,B)|0;q=q+(o+4)|0}l=q;if((s+((o>>>8)+8)|0)>>>0>C>>>0){j=F;i=0;break d}n=d[j>>0]|0;if(o>>>0>14){a[j>>0]=n+15;p=o+-15|0;n=14-o|0;n=o+495+(n>>>0>4294966786?n:-510)|0;o=(n>>>0)%510|0;j=p;while(1){if(j>>>0<=509)break;J=m;a[J>>0]=-1;a[J+1>>0]=-1;m=J+2|0;j=j+-510|0}j=p+(o-n)|0;if(j>>>0>254){a[m>>0]=-1;j=j+-255|0;m=m+1|0}J=m;a[J>>0]=j;j=J+1|0}else{a[j>>0]=n+o;j=m}if(q>>>0>A>>>0){q=l;break f}Ua(q+-2|0,b,1,x);o=x+(c[b+((_(d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24,-1640531535)|0)>>>20<<2)>>2]|0)|0;n=o>>>0<e>>>0;p=n?z:0;Ua(q,b,1,x);m=o;if((m+65535|0)>>>0<q>>>0)break;J=m+p|0;if((d[J>>0]|d[J+1>>0]<<8|d[J+2>>0]<<16|d[J+3>>0]<<24|0)!=(d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24|0))break;a[j>>0]=0;r=n?k:G;s=j+1|0}m=q+1|0;n=m;m=(_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-1640531535)|0)>>>20}}}while(0);o=q;p=i-q|0;if((j-f+p+1+(((p+240|0)>>>0)/255|0)|0)>>>0<=h>>>0){if(p>>>0>14){a[j>>0]=-16;n=i+241|0;l=q+14-i|0;i=i+(l>>>0>4294967041?l:-255)+240-q|0;l=(i>>>0)%255|0;m=p+-15|0;while(1){k=j+1|0;if(m>>>0<=254)break;a[k>>0]=-1;j=k;m=m+-255|0}a[k>>0]=n-q+(l-i);i=j+2|0}else{i=j;a[i>>0]=p<<4;k=i;i=i+1|0}gb(i|0,o|0,p|0)|0;j=F;i=k+(p+1)-f|0}else{j=F;i=0}}else{j=F;i=0}}}while(0);c[j>>2]=G;c[I>>2]=g;c[H>>2]=(c[H>>2]|0)+g;J=i;return J|0}function Qa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(d>>>0>2113929216)f=0;else f=((d|0)/255|0)+d+16|0;if((f|0)>(e|0)){d=Ya(a,b,c,d,e,1)|0;return d|0}else{d=Ya(a,b,c,d,e,0)|0;return d|0}return 0}function Ra(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;n=b+e|0;f=a;f=cb(c[f>>2]|0,c[f+4>>2]|0,e|0,0)|0;o=a;c[o>>2]=f;c[o+4>>2]=C;o=a+44|0;f=c[o>>2]|0;if((f+e|0)>>>0<16){gb(a+28+f|0,b|0,e|0)|0;c[o>>2]=(c[o>>2]|0)+e;return}if(!f)f=b;else{l=a+28|0;gb(l+f|0,b|0,16-f|0)|0;l=_(d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24,-2048144777)|0;f=a+12|0;l=(c[f>>2]|0)+l|0;c[f>>2]=_(l<<13|l>>>19,-1640531535)|0;f=a+32|0;l=_(d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24,-2048144777)|0;m=a+16|0;l=(c[m>>2]|0)+l|0;c[m>>2]=_(l<<13|l>>>19,-1640531535)|0;f=f+4|0;f=_(d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24,-2048144777)|0;m=a+20|0;f=(c[m>>2]|0)+f|0;c[m>>2]=_(f<<13|f>>>19,-1640531535)|0;m=a+40|0;m=_(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24,-2048144777)|0;f=a+24|0;m=(c[f>>2]|0)+m|0;c[f>>2]=_(m<<13|m>>>19,-1640531535)|0;f=b+(16-(c[o>>2]|0))|0;c[o>>2]=0}g=f;m=b+(e+-16)|0;if(f>>>0<=m>>>0){i=a+12|0;j=a+16|0;k=a+20|0;l=a+24|0;f=c[i>>2]|0;b=c[j>>2]|0;e=c[k>>2]|0;h=c[l>>2]|0;do{p=g;p=f+(_(d[p>>0]|d[p+1>>0]<<8|d[p+2>>0]<<16|d[p+3>>0]<<24,-2048144777)|0)|0;f=_(p<<13|p>>>19,-1640531535)|0;p=g;q=p+4|0;q=b+(_(d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24,-2048144777)|0)|0;b=_(q<<13|q>>>19,-1640531535)|0;q=p+8|0;q=e+(_(d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24,-2048144777)|0)|0;e=_(q<<13|q>>>19,-1640531535)|0;q=p+12|0;q=h+(_(d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24,-2048144777)|0)|0;h=_(q<<13|q>>>19,-1640531535)|0;p=p+16|0;g=p}while(p>>>0<=m>>>0);c[i>>2]=f;c[j>>2]=b;c[k>>2]=e;c[l>>2]=h}f=g;if(f>>>0>=n>>>0)return;q=n-g|0;gb(a+28|0,f|0,q|0)|0;c[o>>2]=q;return}function Sa(a){a=a|0;var b=0,e=0,f=0,g=0,h=0,i=0;b=a+28|0;f=b+(c[a+44>>2]|0)|0;g=a;e=c[g>>2]|0;g=c[g+4>>2]|0;if(g>>>0>0|(g|0)==0&e>>>0>15){i=c[a+12>>2]|0;h=c[a+16>>2]|0;g=c[a+20>>2]|0;a=c[a+24>>2]|0;a=(i<<1|i>>>31)+(h<<7|h>>>25)+(g<<12|g>>>20)+(a<<18|a>>>14)|0}else a=(c[a+8>>2]|0)+374761393|0;e=a+e|0;while(1){a=b+4|0;if(a>>>0>f>>>0)break;i=b;i=e+(_(d[i>>0]|d[i+1>>0]<<8|d[i+2>>0]<<16|d[i+3>>0]<<24,-1028477379)|0)|0;e=_(i<<17|i>>>15,668265263)|0;b=a}while(1){if(b>>>0>=f>>>0)break;i=e+(_(d[b>>0]|0,374761393)|0)|0;e=_(i<<11|i>>>21,-1640531535)|0;b=b+1|0}i=_(e^e>>>15,-2048144777)|0;i=_(i^i>>>13,-1028477379)|0;return i^i>>>16|0}function Ta(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;j=b;D=e;if(!i){A=b+f|0;B=e+g|0;if(!g){if((f|0)==1)j=(a[b>>0]|0)!=0;else j=1;E=j<<31>>31;return E|0}x=e+(g+-8)|0;y=e+(g+-5)|0;z=e;t=e+(g+-12)|0;u=x;v=b+(f+-5)|0;w=b+(f+-8)|0;s=b+(f+-15)|0;g=D;a:while(1){l=j;j=l+1|0;l=d[l>>0]|0;k=l>>>4;if((k|0)==15){k=15;do{h=j;D=h+1|0;j=D;h=a[h>>0]|0;k=k+(h&255)|0}while(D>>>0<s>>>0&h<<24>>24==-1);if((k|0)<0)break}r=g;o=r+k|0;if(o>>>0>t>>>0){E=12;break}f=j;if((f+k|0)>>>0>w>>>0){E=12;break}else{j=g;g=f}while(1){D=g;C=D;C=d[C>>0]|d[C+1>>0]<<8|d[C+2>>0]<<16|d[C+3>>0]<<24;D=D+4|0;D=d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24;h=j;i=h;a[i>>0]=C;a[i+1>>0]=C>>8;a[i+2>>0]=C>>16;a[i+3>>0]=C>>24;h=h+4|0;a[h>>0]=D;a[h+1>>0]=D>>8;a[h+2>>0]=D>>16;a[h+3>>0]=D>>24;j=j+8|0;if(j>>>0>=o>>>0)break;else g=g+8|0}m=f+k|0;m=k-((d[m>>0]|d[m+1>>0]<<8)&65535)|0;n=r+m|0;j=f+(k+2)|0;if(n>>>0<e>>>0)break;g=l&15;if((g|0)==15){g=15;do{f=j;if(f>>>0>v>>>0)break a;j=f+1|0;h=a[f>>0]|0;g=g+(h&255)|0}while(h<<24>>24==-1);if((g|0)<0)break}p=r+(k+(g+4))|0;q=p;g=o-n|0;if((g|0)<8){l=c[116+(g<<2)>>2]|0;a[o>>0]=a[n>>0]|0;a[r+(k+1)>>0]=a[r+(m+1)>>0]|0;a[r+(k+2)>>0]=a[r+(m+2)>>0]|0;a[r+(k+3)>>0]=a[r+(m+3)>>0]|0;h=m+(c[148+(g<<2)>>2]|0)|0;i=r+h|0;D=r+(k+4)|0;i=d[i>>0]|d[i+1>>0]<<8|d[i+2>>0]<<16|d[i+3>>0]<<24;a[D>>0]=i;a[D+1>>0]=i>>8;a[D+2>>0]=i>>16;a[D+3>>0]=i>>24;l=h-l|0}else{h=n;i=h;i=d[i>>0]|d[i+1>>0]<<8|d[i+2>>0]<<16|d[i+3>>0]<<24;h=h+4|0;h=d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24;l=o;D=l;a[D>>0]=i;a[D+1>>0]=i>>8;a[D+2>>0]=i>>16;a[D+3>>0]=i>>24;l=l+4|0;a[l>>0]=h;a[l+1>>0]=h>>8;a[l+2>>0]=h>>16;a[l+3>>0]=h>>24;l=m+8|0}f=r+(k+8)|0;g=r+l|0;k=f;if(p>>>0<=t>>>0){k=f;while(1){D=g;C=D;C=d[C>>0]|d[C+1>>0]<<8|d[C+2>>0]<<16|d[C+3>>0]<<24;D=D+4|0;D=d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24;h=k;i=h;a[i>>0]=C;a[i+1>>0]=C>>8;a[i+2>>0]=C>>16;a[i+3>>0]=C>>24;h=h+4|0;a[h>>0]=D;a[h+1>>0]=D>>8;a[h+2>>0]=D>>16;a[h+3>>0]=D>>24;k=k+8|0;if(k>>>0<p>>>0)g=g+8|0;else{g=q;continue a}}}if(p>>>0>y>>>0)break;if(f>>>0<x>>>0){k=f;f=k;while(1){D=g;C=D;C=d[C>>0]|d[C+1>>0]<<8|d[C+2>>0]<<16|d[C+3>>0]<<24;D=D+4|0;D=d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24;h=f;i=h;a[i>>0]=C;a[i+1>>0]=C>>8;a[i+2>>0]=C>>16;a[i+3>>0]=C>>24;h=h+4|0;a[h>>0]=D;a[h+1>>0]=D>>8;a[h+2>>0]=D>>16;a[h+3>>0]=D>>24;f=f+8|0;if(f>>>0>=x>>>0)break;else g=g+8|0}g=r+(l+(u-k))|0;k=u}while(1){if(k>>>0>=p>>>0){g=q;continue a}a[k>>0]=a[g>>0]|0;g=g+1|0;k=k+1|0}}if((E|0)==12)if(!((j+k|0)!=(A|0)|o>>>0>B>>>0)){gb(r|0,j|0,k|0)|0;E=o-z|0;return E|0}E=b-j+-1|0;return E|0}C=h+i|0;if((C|0)!=(e|0)){w=b+f|0;x=e+g|0;y=e+(0-i)|0;z=i>>>0<65536;if(!g){if((f|0)==1)j=(a[b>>0]|0)!=0;else j=1;E=j<<31>>31;return E|0}A=e+(g+-8)|0;B=e+(g+-5)|0;C=e;s=e+(g+-12)|0;t=A;u=b+(f+-5)|0;v=b+(f+-8)|0;r=b+(f+-15)|0;l=D;b:while(1){f=j;j=f+1|0;f=d[f>>0]|0;k=f>>>4;if((k|0)==15){k=15;do{q=j;p=q+1|0;j=p;q=a[q>>0]|0;k=k+(q&255)|0}while(p>>>0<r>>>0&q<<24>>24==-1);if((k|0)<0)break}q=l;p=q+k|0;if(p>>>0>s>>>0){E=107;break}g=j;if((g+k|0)>>>0>v>>>0){E=107;break}else j=g;while(1){n=j;F=n;F=d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24;n=n+4|0;n=d[n>>0]|d[n+1>>0]<<8|d[n+2>>0]<<16|d[n+3>>0]<<24;o=l;m=o;a[m>>0]=F;a[m+1>>0]=F>>8;a[m+2>>0]=F>>16;a[m+3>>0]=F>>24;o=o+4|0;a[o>>0]=n;a[o+1>>0]=n>>8;a[o+2>>0]=n>>16;a[o+3>>0]=n>>24;l=l+8|0;if(l>>>0>=p>>>0)break;else j=j+8|0}m=g+k|0;m=k-((d[m>>0]|d[m+1>>0]<<8)&65535)|0;o=q+m|0;j=g+(k+2)|0;if(z&o>>>0<y>>>0)break;g=f&15;if((g|0)==15){g=15;do{f=j;if(f>>>0>u>>>0)break b;j=f+1|0;F=a[f>>0]|0;g=g+(F&255)|0}while(F<<24>>24==-1);if((g|0)<0)break}n=g+4|0;l=q+(k+n)|0;if(o>>>0<e>>>0){if(l>>>0>B>>>0)break;g=o;m=C-g|0;if(n>>>0<=m>>>0){hb(p|0,h+(g-C+i)|0,n|0)|0;continue}gb(p|0,h+(i-m)|0,m|0)|0;f=q+(k+m)|0;l=f;g=n-m|0;if(g>>>0<=(l-C|0)>>>0){gb(f|0,e|0,g|0)|0;l=q+(k+n)|0;continue}g=q+(k+n)|0;f=D;while(1){k=l;if(k>>>0>=g>>>0)continue b;l=f;a[k>>0]=a[l>>0]|0;f=l+1|0;l=k+1|0}}n=l;g=p-o|0;if((g|0)<8){F=c[116+(g<<2)>>2]|0;a[p>>0]=a[o>>0]|0;a[q+(k+1)>>0]=a[q+(m+1)>>0]|0;a[q+(k+2)>>0]=a[q+(m+2)>>0]|0;a[q+(k+3)>>0]=a[q+(m+3)>>0]|0;m=m+(c[148+(g<<2)>>2]|0)|0;o=q+m|0;p=q+(k+4)|0;o=d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24;a[p>>0]=o;a[p+1>>0]=o>>8;a[p+2>>0]=o>>16;a[p+3>>0]=o>>24;m=m-F|0}else{f=o;f=d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24;o=o+4|0;o=d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24;F=p;p=F;a[p>>0]=f;a[p+1>>0]=f>>8;a[p+2>>0]=f>>16;a[p+3>>0]=f>>24;F=F+4|0;a[F>>0]=o;a[F+1>>0]=o>>8;a[F+2>>0]=o>>16;a[F+3>>0]=o>>24;m=m+8|0}f=q+(k+8)|0;g=q+m|0;k=f;if(l>>>0<=s>>>0){k=f;while(1){q=g;o=q;o=d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24;q=q+4|0;q=d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24;F=k;p=F;a[p>>0]=o;a[p+1>>0]=o>>8;a[p+2>>0]=o>>16;a[p+3>>0]=o>>24;F=F+4|0;a[F>>0]=q;a[F+1>>0]=q>>8;a[F+2>>0]=q>>16;a[F+3>>0]=q>>24;k=k+8|0;if(k>>>0<l>>>0)g=g+8|0;else{l=n;continue b}}}if(l>>>0>B>>>0)break;if(f>>>0<A>>>0){k=f;f=k;while(1){p=g;G=p;G=d[G>>0]|d[G+1>>0]<<8|d[G+2>>0]<<16|d[G+3>>0]<<24;p=p+4|0;p=d[p>>0]|d[p+1>>0]<<8|d[p+2>>0]<<16|d[p+3>>0]<<24;F=f;o=F;a[o>>0]=G;a[o+1>>0]=G>>8;a[o+2>>0]=G>>16;a[o+3>>0]=G>>24;F=F+4|0;a[F>>0]=p;a[F+1>>0]=p>>8;a[F+2>>0]=p>>16;a[F+3>>0]=p>>24;f=f+8|0;if(f>>>0>=A>>>0)break;else g=g+8|0}g=q+(m+(t-k))|0;k=t}while(1){if(k>>>0>=l>>>0){l=n;continue b}a[k>>0]=a[g>>0]|0;g=g+1|0;k=k+1|0}}if((E|0)==107)if(!((j+k|0)!=(w|0)|p>>>0>x>>>0)){gb(q|0,j|0,k|0)|0;G=p-C|0;return G|0}G=b-j+-1|0;return G|0}if((i|0)>65534){A=h+(i+-65536)|0;B=b+f|0;k=i+g|0;z=h+k|0;if(!g){if((f|0)==1)j=(a[b>>0]|0)!=0;else j=1;G=j<<31>>31;return G|0}x=h+(k+-8)|0;y=h+(k+-5)|0;t=h+(k+-12)|0;u=x;v=b+(f+-5)|0;w=b+(f+-8)|0;s=b+(f+-15)|0;g=D;c:while(1){l=j;j=l+1|0;l=d[l>>0]|0;k=l>>>4;if((k|0)==15){k=15;do{G=j;F=G+1|0;j=F;G=a[G>>0]|0;k=k+(G&255)|0}while(F>>>0<s>>>0&G<<24>>24==-1);if((k|0)<0)break}r=g;o=r+k|0;if(o>>>0>t>>>0){E=45;break}f=j;if((f+k|0)>>>0>w>>>0){E=45;break}else{j=g;g=f}while(1){F=g;e=F;e=d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24;F=F+4|0;F=d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24;G=j;h=G;a[h>>0]=e;a[h+1>>0]=e>>8;a[h+2>>0]=e>>16;a[h+3>>0]=e>>24;G=G+4|0;a[G>>0]=F;a[G+1>>0]=F>>8;a[G+2>>0]=F>>16;a[G+3>>0]=F>>24;j=j+8|0;if(j>>>0>=o>>>0)break;else g=g+8|0}m=f+k|0;m=k-((d[m>>0]|d[m+1>>0]<<8)&65535)|0;n=r+m|0;j=f+(k+2)|0;if(n>>>0<A>>>0)break;g=l&15;if((g|0)==15){g=15;do{f=j;if(f>>>0>v>>>0)break c;j=f+1|0;G=a[f>>0]|0;g=g+(G&255)|0}while(G<<24>>24==-1);if((g|0)<0)break}p=r+(k+(g+4))|0;q=p;g=o-n|0;if((g|0)<8){l=c[116+(g<<2)>>2]|0;a[o>>0]=a[n>>0]|0;a[r+(k+1)>>0]=a[r+(m+1)>>0]|0;a[r+(k+2)>>0]=a[r+(m+2)>>0]|0;a[r+(k+3)>>0]=a[r+(m+3)>>0]|0;G=m+(c[148+(g<<2)>>2]|0)|0;h=r+G|0;F=r+(k+4)|0;h=d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24;a[F>>0]=h;a[F+1>>0]=h>>8;a[F+2>>0]=h>>16;a[F+3>>0]=h>>24;l=G-l|0}else{G=n;h=G;h=d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24;G=G+4|0;G=d[G>>0]|d[G+1>>0]<<8|d[G+2>>0]<<16|d[G+3>>0]<<24;l=o;F=l;a[F>>0]=h;a[F+1>>0]=h>>8;a[F+2>>0]=h>>16;a[F+3>>0]=h>>24;l=l+4|0;a[l>>0]=G;a[l+1>>0]=G>>8;a[l+2>>0]=G>>16;a[l+3>>0]=G>>24;l=m+8|0}f=r+(k+8)|0;g=r+l|0;k=f;if(p>>>0<=t>>>0){k=f;while(1){F=g;e=F;e=d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24;F=F+4|0;F=d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24;G=k;h=G;a[h>>0]=e;a[h+1>>0]=e>>8;a[h+2>>0]=e>>16;a[h+3>>0]=e>>24;G=G+4|0;a[G>>0]=F;a[G+1>>0]=F>>8;a[G+2>>0]=F>>16;a[G+3>>0]=F>>24;k=k+8|0;if(k>>>0<p>>>0)g=g+8|0;else{g=q;continue c}}}if(p>>>0>y>>>0)break;if(f>>>0<x>>>0){k=f;f=k;while(1){F=g;e=F;e=d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24;F=F+4|0;F=d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24;G=f;h=G;a[h>>0]=e;a[h+1>>0]=e>>8;a[h+2>>0]=e>>16;a[h+3>>0]=e>>24;G=G+4|0;a[G>>0]=F;a[G+1>>0]=F>>8;a[G+2>>0]=F>>16;a[G+3>>0]=F>>24;f=f+8|0;if(f>>>0>=x>>>0)break;else g=g+8|0}g=r+(l+(u-k))|0;k=u}while(1){if(k>>>0>=p>>>0){g=q;continue c}a[k>>0]=a[g>>0]|0;g=g+1|0;k=k+1|0}}if((E|0)==45)if(!((j+k|0)!=(B|0)|o>>>0>z>>>0)){gb(r|0,j|0,k|0)|0;G=o-C|0;return G|0}G=b-j+-1|0;return G|0}else{A=b+f|0;k=i+g|0;z=h+k|0;if(!g){if((f|0)==1)j=(a[b>>0]|0)!=0;else j=1;G=j<<31>>31;return G|0}x=h+(k+-8)|0;y=h+(k+-5)|0;t=h+(k+-12)|0;u=x;v=b+(f+-5)|0;w=b+(f+-8)|0;s=b+(f+-15)|0;g=D;d:while(1){l=j;j=l+1|0;l=d[l>>0]|0;k=l>>>4;if((k|0)==15){k=15;do{G=j;F=G+1|0;j=F;G=a[G>>0]|0;k=k+(G&255)|0}while(F>>>0<s>>>0&G<<24>>24==-1);if((k|0)<0)break}r=g;o=r+k|0;if(o>>>0>t>>>0){E=76;break}f=j;if((f+k|0)>>>0>w>>>0){E=76;break}else{j=g;g=f}while(1){F=g;D=F;D=d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24;F=F+4|0;F=d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24;G=j;e=G;a[e>>0]=D;a[e+1>>0]=D>>8;a[e+2>>0]=D>>16;a[e+3>>0]=D>>24;G=G+4|0;a[G>>0]=F;a[G+1>>0]=F>>8;a[G+2>>0]=F>>16;a[G+3>>0]=F>>24;j=j+8|0;if(j>>>0>=o>>>0)break;else g=g+8|0}m=f+k|0;m=k-((d[m>>0]|d[m+1>>0]<<8)&65535)|0;n=r+m|0;j=f+(k+2)|0;if(n>>>0<h>>>0)break;g=l&15;if((g|0)==15){g=15;do{f=j;if(f>>>0>v>>>0)break d;j=f+1|0;G=a[f>>0]|0;g=g+(G&255)|0}while(G<<24>>24==-1);if((g|0)<0)break}p=r+(k+(g+4))|0;q=p;g=o-n|0;if((g|0)<8){l=c[116+(g<<2)>>2]|0;a[o>>0]=a[n>>0]|0;a[r+(k+1)>>0]=a[r+(m+1)>>0]|0;a[r+(k+2)>>0]=a[r+(m+2)>>0]|0;a[r+(k+3)>>0]=a[r+(m+3)>>0]|0;G=m+(c[148+(g<<2)>>2]|0)|0;e=r+G|0;F=r+(k+4)|0;e=d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24;a[F>>0]=e;a[F+1>>0]=e>>8;a[F+2>>0]=e>>16;a[F+3>>0]=e>>24;l=G-l|0}else{G=n;e=G;e=d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24;G=G+4|0;G=d[G>>0]|d[G+1>>0]<<8|d[G+2>>0]<<16|d[G+3>>0]<<24;l=o;F=l;a[F>>0]=e;a[F+1>>0]=e>>8;a[F+2>>0]=e>>16;a[F+3>>0]=e>>24;l=l+4|0;a[l>>0]=G;a[l+1>>0]=G>>8;a[l+2>>0]=G>>16;a[l+3>>0]=G>>24;l=m+8|0}f=r+(k+8)|0;g=r+l|0;k=f;if(p>>>0<=t>>>0){k=f;while(1){F=g;D=F;D=d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24;F=F+4|0;F=d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24;G=k;e=G;a[e>>0]=D;a[e+1>>0]=D>>8;a[e+2>>0]=D>>16;a[e+3>>0]=D>>24;G=G+4|0;a[G>>0]=F;a[G+1>>0]=F>>8;a[G+2>>0]=F>>16;a[G+3>>0]=F>>24;k=k+8|0;if(k>>>0<p>>>0)g=g+8|0;else{g=q;continue d}}}if(p>>>0>y>>>0)break;if(f>>>0<x>>>0){k=f;f=k;while(1){F=g;D=F;D=d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24;F=F+4|0;F=d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24;G=f;e=G;a[e>>0]=D;a[e+1>>0]=D>>8;a[e+2>>0]=D>>16;a[e+3>>0]=D>>24;G=G+4|0;a[G>>0]=F;a[G+1>>0]=F>>8;a[G+2>>0]=F>>16;a[G+3>>0]=F>>24;f=f+8|0;if(f>>>0>=x>>>0)break;else g=g+8|0}g=r+(l+(u-k))|0;k=u}while(1){if(k>>>0>=p>>>0){g=q;continue d}a[k>>0]=a[g>>0]|0;g=g+1|0;k=k+1|0}}if((E|0)==76)if(!((j+k|0)!=(A|0)|o>>>0>z>>>0)){gb(r|0,j|0,k|0)|0;G=o-C|0;return G|0}G=b-j+-1|0;return G|0}return 0}function Ua(a,e,f,g){a=a|0;e=e|0;f=f|0;g=g|0;var h=0;h=_(d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24,-1640531535)|0;if((f|0)==2){b[e+(h>>>19<<1)>>1]=a-g;return}h=h>>>20;switch(f|0){case 0:{c[e+(h<<2)>>2]=a;return}case 1:{c[e+(h<<2)>>2]=a-g;return}default:return}}function Va(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=e+-3|0;h=c;i=b;while(1){c=i;g=h;if(i>>>0>=j>>>0)break;c=d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24;f=d[i>>0]|d[i+1>>0]<<8|d[i+2>>0]<<16|d[i+3>>0]<<24;if((c|0)!=(f|0)){k=5;break}h=h+4|0;i=i+4|0}if((k|0)==5){b=i+((ib(c^f|0)|0)>>>3)-b|0;return b|0}if(i>>>0<(e+-1|0)>>>0?(d[h>>0]|d[h+1>>0]<<8)<<16>>16==(d[i>>0]|d[i+1>>0]<<8)<<16>>16:0){g=h+2|0;c=i+2|0}f=c;if(f>>>0<e>>>0?(a[g>>0]|0)==(a[f>>0]|0):0)c=f+1|0;b=c-b|0;return b|0}function Wa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;if(a&3){a=0;return a|0}db(a|0,0,131072)|0;db(a+131072|0,-1,131072)|0;c[a+262168>>2]=65536;h=b+-65536|0;c[a+262148>>2]=h;c[a+262144>>2]=b;c[a+262152>>2]=h;c[a+262160>>2]=65536;c[a+262164>>2]=65536;if(e>>>0>2113929216)h=0;else h=((e|0)/255|0)+e+16|0;if((h|0)>(f|0)){a=Xa(a,b,d,e,f,g,1)|0;return a|0}else{a=Xa(a,b,d,e,f,g,0)|0;return a|0}return 0}function Xa(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,ca=0;m=g+i|0;Y=g+(i+-12)|0;$=g+(i+-5)|0;aa=$;ba=h+j|0;W=1<<((k|0)>16?16:(k|0)<1?9:k)+-1;Q=f+262144|0;c[Q>>2]=(c[Q>>2]|0)+i;Q=f+131072|0;R=f+262148|0;S=f+262152|0;T=f+262160|0;U=f+262164|0;V=f+262168|0;X=(l|0)==0;D=g;l=g+1|0;k=h;i=0;n=0;B=0;C=0;A=0;a:while(1){z=l;o=i;while(1){w=z;if(w>>>0>=Y>>>0){ca=187;break a}i=c[R>>2]|0;g=c[S>>2]|0;x=c[T>>2]|0;l=c[U>>2]|0;y=i;v=z-i|0;v=(l+65536|0)>>>0>v>>>0?l:v+-65535|0;i=z-i|0;l=c[V>>2]|0;while(1){if(l>>>0>=i>>>0)break;P=y+l|0;P=f+((_(d[P>>0]|d[P+1>>0]<<8|d[P+2>>0]<<16|d[P+3>>0]<<24,-1640531535)|0)>>>17<<2)|0;O=l-(c[P>>2]|0)|0;b[Q+((l&65535)<<1)>>1]=O>>>0>65535?65535:O;c[P>>2]=l;l=l+1|0}c[V>>2]=i;t=z;t=d[t>>0]|d[t+1>>0]<<8|d[t+2>>0]<<16|d[t+3>>0]<<24;r=w+4|0;s=y+x|0;u=0;i=W;q=c[f+((_(t,-1640531535)|0)>>>17<<2)>>2]|0;while(1){if(!(q>>>0>=v>>>0&(i|0)!=0))break;p=i+-1|0;if(x>>>0>q>>>0){P=g+q|0;if((d[P>>0]|d[P+1>>0]<<8|d[P+2>>0]<<16|d[P+3>>0]<<24|0)==(t|0)){l=w+(x-q)|0;l=l>>>0>$>>>0?aa:l;i=(Za(r,g+(q+4)|0,l)|0)+4|0;if((w+i|0)==(l|0)&l>>>0<$>>>0)i=i+(Za(l,s,$)|0)|0;if(i>>>0>u>>>0)o=y+q|0;else i=u}else i=u}else{P=y+q|0;l=P;if((a[y+(q+u)>>0]|0)==(a[w+u>>0]|0)?(d[P>>0]|d[P+1>>0]<<8|d[P+2>>0]<<16|d[P+3>>0]<<24|0)==(t|0):0){i=(Za(r,y+(q+4)|0,$)|0)+4|0;P=i>>>0>u>>>0;i=P?i:u;o=P?l:o}else i=u}u=i;i=p;q=q-(e[Q+((q&65535)<<1)>>1]|0)|0}if(u){M=D;g=z;p=u;l=o;H=o;G=z;i=C;break}z=w+1|0}b:while(1){F=G;I=g;K=p;L=l;while(1){E=I;J=E+K|0;if(J>>>0>=Y>>>0){q=n;r=i;ca=46;break b}z=K+-2|0;l=E+z|0;g=c[R>>2]|0;C=c[T>>2]|0;y=g;D=y+C|0;p=c[U>>2]|0;o=l;x=o-g|0;x=(p+65536|0)>>>0>x>>>0?p:x+-65535|0;p=c[S>>2]|0;g=o-g|0;o=c[V>>2]|0;while(1){if(o>>>0>=g>>>0)break;P=y+o|0;P=f+((_(d[P>>0]|d[P+1>>0]<<8|d[P+2>>0]<<16|d[P+3>>0]<<24,-1640531535)|0)>>>17<<2)|0;O=o-(c[P>>2]|0)|0;b[Q+((o&65535)<<1)>>1]=O>>>0>65535?65535:O;c[P>>2]=o;o=o+1|0}c[V>>2]=g;w=d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24;t=p;v=E+(K+2)|0;p=K;l=W;s=c[f+((_(w,-1640531535)|0)>>>17<<2)>>2]|0;while(1){if(!(s>>>0>=x>>>0&(l|0)!=0)){g=i;break}r=l+-1|0;if(C>>>0>s>>>0){P=t+s|0;if((d[P>>0]|d[P+1>>0]<<8|d[P+2>>0]<<16|d[P+3>>0]<<24|0)==(w|0)){l=E+(z+(C-s))|0;l=l>>>0>$>>>0?aa:l;g=(Za(v,t+(s+4)|0,l)|0)+4|0;if(l>>>0<$>>>0?(E+(z+g)|0)==(l|0):0)g=g+(Za(l,D,$)|0)|0;o=0;while(1){P=z+o|0;q=E+P|0;if(!((P|0)>1&(s+o|0)>>>0>x>>>0))break;l=o+-1|0;if((a[E+(z+l)>>0]|0)==(a[t+(s+l)>>0]|0))o=l;else break}l=g-o|0;if((l|0)>(p|0)){p=l;n=y+(s+o)|0;i=q}}}else if((a[E+(p+1)>>0]|0)==(a[y+(s-(K+-3)+p)>>0]|0)?(P=y+s|0,(d[P>>0]|d[P+1>>0]<<8|d[P+2>>0]<<16|d[P+3>>0]<<24|0)==(w|0)):0){l=(Za(v,y+(s+4)|0,$)|0)+4|0;o=0;while(1){P=z+o|0;q=E+P|0;if(!((P|0)>1&(s+o|0)>(C|0)))break;g=o+-1|0;if((a[E+(z+g)>>0]|0)==(a[y+(s+g)>>0]|0))o=g;else break}l=l-o|0;if((l|0)>(p|0)){p=l;n=y+(s+o)|0;i=q}}l=r;s=s-(e[Q+((s&65535)<<1)>>1]|0)|0}if((p|0)==(K|0)){q=n;r=g;ca=46;break b}P=g;l=F>>>0<E>>>0&P>>>0<(E+u|0)>>>0;o=l?H:L;i=l?G:I;l=l?u:K;if((P-i|0)<3){I=g;K=p;L=n;i=g}else{N=M;O=i;s=l;P=o;l=B;i=A;break}}c:while(1){L=O;I=(s|0)>18;H=L+(s+3)|0;M=L+s|0;o=p;t=l;q=i;while(1){l=g;i=g-O|0;if((i|0)<18?(Z=I?18:s,Z=((L+Z|0)>>>0>(l+(o+-4)|0)>>>0?i+o+-4|0:Z)+(O-g)|0,(Z|0)>0):0){K=o-Z|0;v=n+Z|0;r=l+Z|0}else{K=o;v=n;r=g}G=r;J=G+K|0;if(J>>>0>=Y>>>0){A=q;break b}B=K+-3|0;i=G+B|0;l=c[R>>2]|0;C=c[T>>2]|0;z=l;D=z+C|0;n=c[U>>2]|0;E=i;y=E-l|0;y=(n+65536|0)>>>0>y>>>0?n:y+-65535|0;n=c[S>>2]|0;F=r;l=E-l|0;g=c[V>>2]|0;while(1){if(g>>>0>=l>>>0)break;A=z+g|0;A=f+((_(d[A>>0]|d[A+1>>0]<<8|d[A+2>>0]<<16|d[A+3>>0]<<24,-1640531535)|0)>>>17<<2)|0;x=g-(c[A>>2]|0)|0;b[Q+((g&65535)<<1)>>1]=x>>>0>65535?65535:x;c[A>>2]=g;g=g+1|0}c[V>>2]=l;x=d[i>>0]|d[i+1>>0]<<8|d[i+2>>0]<<16|d[i+3>>0]<<24;w=G+(K+1)|0;p=K;l=W;g=t;A=q;u=c[f+((_(x,-1640531535)|0)>>>17<<2)>>2]|0;while(1){if(!(u>>>0>=y>>>0&(l|0)!=0)){t=g;break}t=l+-1|0;if(C>>>0>u>>>0){q=n+u|0;if((d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24|0)==(x|0)){i=G+(B+(C-u))|0;i=i>>>0>$>>>0?aa:i;l=(Za(w,n+(u+4)|0,i)|0)+4|0;if(i>>>0<$>>>0?(G+(B+l)|0)==(i|0):0)l=l+(Za(i,D,$)|0)|0;o=0;while(1){q=G+(B+o)|0;if(!(q>>>0>F>>>0&(u+o|0)>>>0>y>>>0))break;i=o+-1|0;if((a[G+(B+i)>>0]|0)==(a[n+(u+i)>>0]|0))o=i;else break}i=l-o|0;if((i|0)>(p|0)){p=i;g=z+(u+o)|0;i=q}else i=A}else i=A}else if((a[F+p>>0]|0)==(a[z+(u+(r-E)+p)>>0]|0)?(q=z+u|0,(d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24|0)==(x|0)):0){i=(Za(w,z+(u+4)|0,$)|0)+4|0;o=0;while(1){q=G+(B+o)|0;if(!(q>>>0>F>>>0&(u+o|0)>(C|0)))break;l=o+-1|0;if((a[G+(B+l)>>0]|0)==(a[z+(u+l)>>0]|0))o=l;else break}i=i-o|0;if((i|0)>(p|0)){p=i;g=z+(u+o)|0;i=q}else i=A}else i=A;l=t;A=i;u=u-(e[Q+((u&65535)<<1)>>1]|0)|0}if((p|0)==(K|0))break b;i=A;if(i>>>0>=H>>>0)break;if(i>>>0<M>>>0){o=p;n=t;g=A;q=A}else break c}if(G>>>0<M>>>0){i=r-O|0;if((i|0)<15){l=I?18:s;i=(L+l|0)>>>0>(G+(K+-4)|0)>>>0?i+K+-4|0:l;l=i+(O-r)|0;if((l|0)>0){u=i;s=K-l|0;v=v+l|0;r=G+l|0}else{u=i;s=K}}else{u=i;s=K}}else{u=s;s=K}q=O-N|0;i=k+1|0;if(!X?(k+((q>>8)+q+9)|0)>>>0>ba>>>0:0){m=0;ca=196;break a}if((q|0)>14){a[k>>0]=-16;g=O+241|0;n=N+14-O|0;n=O+240+((n|0)>-255?n:-255)-N|0;o=(n>>>0)%255|0;l=q+-15|0;while(1){if((l|0)<=254)break;M=i;a[M>>0]=-1;i=M+1|0;l=l+-255|0}a[i>>0]=g-N+(o-n);i=i+1|0}else a[k>>0]=q<<4;n=i;g=n+q|0;l=i;i=N;while(1){M=i;J=M;J=d[J>>0]|d[J+1>>0]<<8|d[J+2>>0]<<16|d[J+3>>0]<<24;M=M+4|0;M=d[M>>0]|d[M+1>>0]<<8|d[M+2>>0]<<16|d[M+3>>0]<<24;N=l;K=N;a[K>>0]=J;a[K+1>>0]=J>>8;a[K+2>>0]=J>>16;a[K+3>>0]=J>>24;N=N+4|0;a[N>>0]=M;a[N+1>>0]=M>>8;a[N+2>>0]=M>>16;a[N+3>>0]=M>>24;l=l+8|0;if(l>>>0>=g>>>0)break;else i=i+8|0}P=O-P&65535;a[g>>0]=P;a[g+1>>0]=P>>8;P=q+2|0;i=n+P|0;g=u+-4|0;if(!X?(n+(P+((g>>8)+6))|0)>>>0>ba>>>0:0){m=0;ca=196;break a}l=d[k>>0]|0;if((g|0)>14){a[k>>0]=l+15;l=18-u|0;l=u+491+((l|0)>-510?l:-510)|0;g=(l>>>0)%510|0;k=u+-19|0;while(1){if((k|0)<=509)break;P=i;a[P>>0]=-1;a[P+1>>0]=-1;i=P+2|0;k=k+-510|0}k=u+-19+(g-l)|0;if((k|0)>254){a[i>>0]=-1;k=k+-255|0;i=i+1|0}P=i;a[P>>0]=k;k=P+1|0}else{a[k>>0]=l+g;k=i}N=L+u|0;O=r;P=v;n=t;l=t;g=A;i=A}if(G>>>0<M>>>0){L=M;J=L-r|0;u=K-J|0;r=(u|0)<4;u=r?p:u;v=r?t:v+J|0;r=r?A:L}else u=K;o=O-N|0;q=k;k=q+1|0;if(!X?(q+((o>>8)+o+9)|0)>>>0>ba>>>0:0){m=0;ca=196;break a}if((o|0)>14){a[q>>0]=-16;l=O+241|0;g=N+14-O|0;g=O+240+((g|0)>-255?g:-255)-N|0;n=(g>>>0)%255|0;i=o+-15|0;while(1){if((i|0)<=254)break;L=k;a[L>>0]=-1;k=L+1|0;i=i+-255|0}a[k>>0]=l-N+(n-g);k=k+1|0}else a[q>>0]=o<<4;g=k;l=g+o|0;i=k;k=N;while(1){L=k;J=L;J=d[J>>0]|d[J+1>>0]<<8|d[J+2>>0]<<16|d[J+3>>0]<<24;L=L+4|0;L=d[L>>0]|d[L+1>>0]<<8|d[L+2>>0]<<16|d[L+3>>0]<<24;N=i;K=N;a[K>>0]=J;a[K+1>>0]=J>>8;a[K+2>>0]=J>>16;a[K+3>>0]=J>>24;N=N+4|0;a[N>>0]=L;a[N+1>>0]=L>>8;a[N+2>>0]=L>>16;a[N+3>>0]=L>>24;i=i+8|0;if(i>>>0>=l>>>0)break;else k=k+8|0}P=O-P&65535;a[l>>0]=P;a[l+1>>0]=P>>8;P=o+2|0;k=g+P|0;l=s+-4|0;if(!X?(g+(P+((l>>8)+6))|0)>>>0>ba>>>0:0){m=0;ca=196;break a}i=d[q>>0]|0;if((l|0)>14){a[q>>0]=i+15;l=18-s|0;l=s+491+((l|0)>-510?l:-510)|0;g=(l>>>0)%510|0;i=s+-19|0;while(1){if((i|0)<=509)break;P=k;a[P>>0]=-1;a[P+1>>0]=-1;k=P+2|0;i=i+-510|0}i=s+-19+(g-l)|0;if((i|0)>254){a[k>>0]=-1;i=i+-255|0;k=k+1|0}a[k>>0]=i;k=k+1|0}else a[q>>0]=i+l;g=A;l=t;H=v;n=v;B=t;G=r;i=r}if((ca|0)==46){ca=0;p=I-M|0;i=k+1|0;if(!X?(k+((p>>8)+p+9)|0)>>>0>ba>>>0:0){m=0;ca=196;break}if((p|0)>14){a[k>>0]=-16;g=I+241|0;n=M+14-I|0;n=I+240+((n|0)>-255?n:-255)-M|0;o=(n>>>0)%255|0;l=p+-15|0;while(1){if((l|0)<=254)break;P=i;a[P>>0]=-1;i=P+1|0;l=l+-255|0}a[i>>0]=g-M+(o-n);i=i+1|0}else a[k>>0]=p<<4;n=i;g=n+p|0;l=i;i=M;while(1){O=i;M=O;M=d[M>>0]|d[M+1>>0]<<8|d[M+2>>0]<<16|d[M+3>>0]<<24;O=O+4|0;O=d[O>>0]|d[O+1>>0]<<8|d[O+2>>0]<<16|d[O+3>>0]<<24;P=l;N=P;a[N>>0]=M;a[N+1>>0]=M>>8;a[N+2>>0]=M>>16;a[N+3>>0]=M>>24;P=P+4|0;a[P>>0]=O;a[P+1>>0]=O>>8;a[P+2>>0]=O>>16;a[P+3>>0]=O>>24;l=l+8|0;if(l>>>0>=g>>>0)break;else i=i+8|0}P=I-L&65535;a[g>>0]=P;a[g+1>>0]=P>>8;P=p+2|0;i=n+P|0;g=K+-4|0;if(!X?(n+(P+((g>>8)+6))|0)>>>0>ba>>>0:0){m=0;ca=196;break}l=d[k>>0]|0;if((g|0)>14){a[k>>0]=l+15;l=18-K|0;l=K+491+((l|0)>-510?l:-510)|0;g=(l>>>0)%510|0;k=K+-19|0;while(1){if((k|0)<=509)break;P=i;a[P>>0]=-1;a[P+1>>0]=-1;i=P+2|0;k=k+-510|0}k=K+-19+(g-l)|0;if((k|0)>254){a[i>>0]=-1;k=k+-255|0;i=i+1|0}P=i;a[P>>0]=k;k=P+1|0}else{a[k>>0]=l+g;k=i}l=J;D=l;i=L;n=q;C=r;continue}q=G>>>0<M>>>0?r-O|0:s;p=O-N|0;i=k+1|0;if(!X?(k+((p>>8)+p+9)|0)>>>0>ba>>>0:0){m=0;ca=196;break}if((p|0)>14){a[k>>0]=-16;g=O+241|0;n=N+14-O|0;n=O+240+((n|0)>-255?n:-255)-N|0;o=(n>>>0)%255|0;l=p+-15|0;while(1){if((l|0)<=254)break;M=i;a[M>>0]=-1;i=M+1|0;l=l+-255|0}a[i>>0]=g-N+(o-n);i=i+1|0}else a[k>>0]=p<<4;n=i;g=n+p|0;l=i;i=N;while(1){M=i;H=M;H=d[H>>0]|d[H+1>>0]<<8|d[H+2>>0]<<16|d[H+3>>0]<<24;M=M+4|0;M=d[M>>0]|d[M+1>>0]<<8|d[M+2>>0]<<16|d[M+3>>0]<<24;N=l;I=N;a[I>>0]=H;a[I+1>>0]=H>>8;a[I+2>>0]=H>>16;a[I+3>>0]=H>>24;N=N+4|0;a[N>>0]=M;a[N+1>>0]=M>>8;a[N+2>>0]=M>>16;a[N+3>>0]=M>>24;l=l+8|0;if(l>>>0>=g>>>0)break;else i=i+8|0}O=O-P&65535;a[g>>0]=O;a[g+1>>0]=O>>8;O=p+2|0;i=n+O|0;g=q+-4|0;if(!X?(n+(O+((g>>8)+6))|0)>>>0>ba>>>0:0){m=0;ca=196;break}l=d[k>>0]|0;if((g|0)>14){a[k>>0]=l+15;l=18-q|0;l=q+491+((l|0)>-510?l:-510)|0;g=(l>>>0)%510|0;k=q+-19|0;while(1){if((k|0)<=509)break;O=i;a[O>>0]=-1;a[O+1>>0]=-1;i=O+2|0;k=k+-510|0}k=q+-19+(g-l)|0;if((k|0)>254){a[i>>0]=-1;k=k+-255|0;i=i+1|0}a[i>>0]=k;i=i+1|0}else a[k>>0]=l+g;o=L+q|0;p=r-o|0;q=i;k=q+1|0;if(!X?(q+((p>>8)+p+9)|0)>>>0>ba>>>0:0){m=0;ca=196;break}if((p|0)>14){a[q>>0]=-16;l=r+241|0;g=o+14-r|0;g=r+240+((g|0)>-255?g:-255)-o|0;n=(g>>>0)%255|0;i=p+-15|0;while(1){if((i|0)<=254)break;O=k;a[O>>0]=-1;k=O+1|0;i=i+-255|0}a[k>>0]=l-o+(n-g);k=k+1|0}else a[q>>0]=p<<4;g=k;l=g+p|0;i=k;k=o;while(1){N=k;L=N;L=d[L>>0]|d[L+1>>0]<<8|d[L+2>>0]<<16|d[L+3>>0]<<24;N=N+4|0;N=d[N>>0]|d[N+1>>0]<<8|d[N+2>>0]<<16|d[N+3>>0]<<24;O=i;M=O;a[M>>0]=L;a[M+1>>0]=L>>8;a[M+2>>0]=L>>16;a[M+3>>0]=L>>24;O=O+4|0;a[O>>0]=N;a[O+1>>0]=N>>8;a[O+2>>0]=N>>16;a[O+3>>0]=N>>24;i=i+8|0;if(i>>>0>=l>>>0)break;else k=k+8|0}O=r-v&65535;a[l>>0]=O;a[l+1>>0]=O>>8;O=p+2|0;k=g+O|0;l=K+-4|0;if(!X?(g+(O+((l>>8)+6))|0)>>>0>ba>>>0:0){m=0;ca=196;break}i=d[q>>0]|0;if((l|0)>14){a[q>>0]=i+15;l=18-K|0;l=K+491+((l|0)>-510?l:-510)|0;g=(l>>>0)%510|0;i=K+-19|0;while(1){if((i|0)<=509)break;O=k;a[O>>0]=-1;a[O+1>>0]=-1;k=O+2|0;i=i+-510|0}i=K+-19+(g-l)|0;if((i|0)>254){a[k>>0]=-1;i=i+-255|0;k=k+1|0}a[k>>0]=i;k=k+1|0}else a[q>>0]=i+l;l=J;D=l;i=P;n=v;B=t;C=r}if((ca|0)==187){p=D;o=m-D|0;if(!X?(k-h+o+1+(((o+240|0)>>>0)/255|0)|0)>>>0>j>>>0:0){h=0;return h|0}if((o|0)>14){n=k;a[n>>0]=-16;g=m+241|0;i=D+14-m|0;m=m+((i|0)>-255?i:-255)+240-D|0;i=(m>>>0)%255|0;l=o+-15|0;while(1){k=n+1|0;if((l|0)<=254)break;a[k>>0]=-1;n=k;l=l+-255|0}a[k>>0]=g-D+(i-m);m=n+2|0}else{m=k;a[m>>0]=o<<4;k=m;m=m+1|0}gb(m|0,p|0,o|0)|0;h=k+(o+1)-h|0;return h|0}else if((ca|0)==196)return m|0;return 0}function Ya(a,e,f,g,h,i){a=a|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;s=e;r=a+262148|0;k=c[r>>2]|0;if(!k){db(a|0,0,131072)|0;db(a+131072|0,-1,131072)|0;c[a+262168>>2]=65536;k=e+-65536|0;c[r>>2]=k;q=a+262144|0;c[q>>2]=s;c[a+262152>>2]=k;c[a+262160>>2]=65536;c[a+262164>>2]=65536;j=e}else{j=a+262144|0;q=j;j=c[j>>2]|0}if((j-k|0)>>>0>2147483648){k=j-k-(c[a+262160>>2]|0)|0;k=k>>>0>65536?65536:k;l=0-k|0;db(a|0,0,131072)|0;db(a+131072|0,-1,131072)|0;m=a+262168|0;c[m>>2]=65536;p=j+(l+-65536)|0;c[a+262148>>2]=p;n=a+262144|0;c[n>>2]=j+l;c[a+262152>>2]=p;c[a+262160>>2]=65536;c[a+262164>>2]=65536;if((k|0)>3){o=k+65533|0;p=65536;while(1){if(p>>>0>=o>>>0)break;t=j+(l+(p+-65536))|0;t=a+((_(d[t>>0]|d[t+1>>0]<<8|d[t+2>>0]<<16|d[t+3>>0]<<24,-1640531535)|0)>>>17<<2)|0;u=p-(c[t>>2]|0)|0;b[a+131072+((p&65535)<<1)>>1]=u>>>0>65535?65535:u;c[t>>2]=p;p=p+1|0}c[m>>2]=o}c[n>>2]=j+(l+k);j=c[q>>2]|0}if((j|0)!=(e|0)){l=a+262144|0;if(j>>>0<((c[r>>2]|0)+4|0)>>>0){k=a+262148|0;j=a+262168|0}else{k=a+262148|0;n=c[k>>2]|0;m=(c[l>>2]|0)+-3-n|0;j=a+262168|0;o=c[j>>2]|0;while(1){if(o>>>0>=m>>>0)break;u=n+o|0;u=a+((_(d[u>>0]|d[u+1>>0]<<8|d[u+2>>0]<<16|d[u+3>>0]<<24,-1640531535)|0)>>>17<<2)|0;t=o-(c[u>>2]|0)|0;b[a+131072+((o&65535)<<1)>>1]=t>>>0>65535?65535:t;c[u>>2]=o;o=o+1|0}c[j>>2]=m}r=a+262160|0;c[a+262164>>2]=c[r>>2];t=c[k>>2]|0;u=(c[l>>2]|0)-t|0;c[r>>2]=u;c[a+262152>>2]=t;c[k>>2]=e+(0-u);c[l>>2]=s;c[j>>2]=u}j=e+g|0;k=c[a+262152>>2]|0;l=a+262164|0;m=c[a+262160>>2]|0;n=k+m|0;if(!(n>>>0>e>>>0?j>>>0>(k+(c[l>>2]|0)|0)>>>0:0)){u=a+262172|0;u=c[u>>2]|0;u=Xa(a,e,f,g,h,u,i)|0;return u|0}u=(j>>>0>n>>>0?n:j)-k|0;c[l>>2]=u;c[l>>2]=(m-u|0)>>>0<4?m:u;u=a+262172|0;u=c[u>>2]|0;u=Xa(a,e,f,g,h,u,i)|0;return u|0}function Za(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=e+-3|0;h=c;i=b;while(1){c=i;g=h;if(i>>>0>=j>>>0)break;c=d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24;f=d[i>>0]|d[i+1>>0]<<8|d[i+2>>0]<<16|d[i+3>>0]<<24;if((c|0)!=(f|0)){k=5;break}h=h+4|0;i=i+4|0}if((k|0)==5){b=i+((ib(c^f|0)|0)>>>3)-b|0;return b|0}if(i>>>0<(e+-1|0)>>>0?(d[h>>0]|d[h+1>>0]<<8)<<16>>16==(d[i>>0]|d[i+1>>0]<<8)<<16>>16:0){g=h+2|0;c=i+2|0}f=c;if(f>>>0<e>>>0?(a[g>>0]|0)==(a[f>>0]|0):0)c=f+1|0;b=c-b|0;return b|0}function _a(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;do{if(a>>>0<245){o=a>>>0<11?16:a+11&-8;a=o>>>3;i=c[57]|0;b=i>>>a;if(b&3){b=(b&1^1)+a|0;e=b<<1;d=268+(e<<2)|0;e=268+(e+2<<2)|0;f=c[e>>2]|0;g=f+8|0;h=c[g>>2]|0;do{if((d|0)!=(h|0)){if(h>>>0<(c[61]|0)>>>0)ga();a=h+12|0;if((c[a>>2]|0)==(f|0)){c[a>>2]=d;c[e>>2]=h;break}else ga()}else c[57]=i&~(1<<b)}while(0);L=b<<3;c[f+4>>2]=L|3;L=f+(L|4)|0;c[L>>2]=c[L>>2]|1;L=g;return L|0}h=c[59]|0;if(o>>>0>h>>>0){if(b){e=2<<a;e=b<<a&(e|0-e);e=(e&0-e)+-1|0;j=e>>>12&16;e=e>>>j;f=e>>>5&8;e=e>>>f;g=e>>>2&4;e=e>>>g;d=e>>>1&2;e=e>>>d;b=e>>>1&1;b=(f|j|g|d|b)+(e>>>b)|0;e=b<<1;d=268+(e<<2)|0;e=268+(e+2<<2)|0;g=c[e>>2]|0;j=g+8|0;f=c[j>>2]|0;do{if((d|0)!=(f|0)){if(f>>>0<(c[61]|0)>>>0)ga();a=f+12|0;if((c[a>>2]|0)==(g|0)){c[a>>2]=d;c[e>>2]=f;k=c[59]|0;break}else ga()}else{c[57]=i&~(1<<b);k=h}}while(0);L=b<<3;h=L-o|0;c[g+4>>2]=o|3;i=g+o|0;c[g+(o|4)>>2]=h|1;c[g+L>>2]=h;if(k){f=c[62]|0;d=k>>>3;a=d<<1;e=268+(a<<2)|0;b=c[57]|0;d=1<<d;if(b&d){b=268+(a+2<<2)|0;a=c[b>>2]|0;if(a>>>0<(c[61]|0)>>>0)ga();else{l=b;m=a}}else{c[57]=b|d;l=268+(a+2<<2)|0;m=e}c[l>>2]=f;c[m+12>>2]=f;c[f+8>>2]=m;c[f+12>>2]=e}c[59]=h;c[62]=i;L=j;return L|0}a=c[58]|0;if(a){i=(a&0-a)+-1|0;K=i>>>12&16;i=i>>>K;J=i>>>5&8;i=i>>>J;L=i>>>2&4;i=i>>>L;b=i>>>1&2;i=i>>>b;j=i>>>1&1;j=c[532+((J|K|L|b|j)+(i>>>j)<<2)>>2]|0;i=(c[j+4>>2]&-8)-o|0;b=j;while(1){a=c[b+16>>2]|0;if(!a){a=c[b+20>>2]|0;if(!a)break}b=(c[a+4>>2]&-8)-o|0;L=b>>>0<i>>>0;i=L?b:i;b=a;j=L?a:j}f=c[61]|0;if(j>>>0<f>>>0)ga();h=j+o|0;if(j>>>0>=h>>>0)ga();g=c[j+24>>2]|0;d=c[j+12>>2]|0;do{if((d|0)==(j|0)){b=j+20|0;a=c[b>>2]|0;if(!a){b=j+16|0;a=c[b>>2]|0;if(!a){n=0;break}}while(1){d=a+20|0;e=c[d>>2]|0;if(e){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}if(b>>>0<f>>>0)ga();else{c[b>>2]=0;n=a;break}}else{e=c[j+8>>2]|0;if(e>>>0<f>>>0)ga();a=e+12|0;if((c[a>>2]|0)!=(j|0))ga();b=d+8|0;if((c[b>>2]|0)==(j|0)){c[a>>2]=d;c[b>>2]=e;n=d;break}else ga()}}while(0);do{if(g){a=c[j+28>>2]|0;b=532+(a<<2)|0;if((j|0)==(c[b>>2]|0)){c[b>>2]=n;if(!n){c[58]=c[58]&~(1<<a);break}}else{if(g>>>0<(c[61]|0)>>>0)ga();a=g+16|0;if((c[a>>2]|0)==(j|0))c[a>>2]=n;else c[g+20>>2]=n;if(!n)break}b=c[61]|0;if(n>>>0<b>>>0)ga();c[n+24>>2]=g;a=c[j+16>>2]|0;do{if(a)if(a>>>0<b>>>0)ga();else{c[n+16>>2]=a;c[a+24>>2]=n;break}}while(0);a=c[j+20>>2]|0;if(a)if(a>>>0<(c[61]|0)>>>0)ga();else{c[n+20>>2]=a;c[a+24>>2]=n;break}}}while(0);if(i>>>0<16){L=i+o|0;c[j+4>>2]=L|3;L=j+(L+4)|0;c[L>>2]=c[L>>2]|1}else{c[j+4>>2]=o|3;c[j+(o|4)>>2]=i|1;c[j+(i+o)>>2]=i;a=c[59]|0;if(a){f=c[62]|0;d=a>>>3;a=d<<1;e=268+(a<<2)|0;b=c[57]|0;d=1<<d;if(b&d){a=268+(a+2<<2)|0;b=c[a>>2]|0;if(b>>>0<(c[61]|0)>>>0)ga();else{p=a;q=b}}else{c[57]=b|d;p=268+(a+2<<2)|0;q=e}c[p>>2]=f;c[q+12>>2]=f;c[f+8>>2]=q;c[f+12>>2]=e}c[59]=i;c[62]=h}L=j+8|0;return L|0}}}else if(a>>>0<=4294967231){a=a+11|0;o=a&-8;j=c[58]|0;if(j){b=0-o|0;a=a>>>8;if(a)if(o>>>0>16777215)i=31;else{q=(a+1048320|0)>>>16&8;x=a<<q;p=(x+520192|0)>>>16&4;x=x<<p;i=(x+245760|0)>>>16&2;i=14-(p|q|i)+(x<<i>>>15)|0;i=o>>>(i+7|0)&1|i<<1}else i=0;a=c[532+(i<<2)>>2]|0;a:do{if(!a){d=0;a=0;x=86}else{f=b;d=0;g=o<<((i|0)==31?0:25-(i>>>1)|0);h=a;a=0;while(1){e=c[h+4>>2]&-8;b=e-o|0;if(b>>>0<f>>>0)if((e|0)==(o|0)){e=h;a=h;x=90;break a}else a=h;else b=f;x=c[h+20>>2]|0;h=c[h+16+(g>>>31<<2)>>2]|0;d=(x|0)==0|(x|0)==(h|0)?d:x;if(!h){x=86;break}else{f=b;g=g<<1}}}}while(0);if((x|0)==86){if((d|0)==0&(a|0)==0){a=2<<i;a=j&(a|0-a);if(!a)break;a=(a&0-a)+-1|0;n=a>>>12&16;a=a>>>n;m=a>>>5&8;a=a>>>m;p=a>>>2&4;a=a>>>p;q=a>>>1&2;a=a>>>q;d=a>>>1&1;d=c[532+((m|n|p|q|d)+(a>>>d)<<2)>>2]|0;a=0}if(!d){i=b;j=a}else{e=d;x=90}}if((x|0)==90)while(1){x=0;q=(c[e+4>>2]&-8)-o|0;d=q>>>0<b>>>0;b=d?q:b;a=d?e:a;d=c[e+16>>2]|0;if(d){e=d;x=90;continue}e=c[e+20>>2]|0;if(!e){i=b;j=a;break}else x=90}if((j|0)!=0?i>>>0<((c[59]|0)-o|0)>>>0:0){f=c[61]|0;if(j>>>0<f>>>0)ga();h=j+o|0;if(j>>>0>=h>>>0)ga();g=c[j+24>>2]|0;d=c[j+12>>2]|0;do{if((d|0)==(j|0)){b=j+20|0;a=c[b>>2]|0;if(!a){b=j+16|0;a=c[b>>2]|0;if(!a){s=0;break}}while(1){d=a+20|0;e=c[d>>2]|0;if(e){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}if(b>>>0<f>>>0)ga();else{c[b>>2]=0;s=a;break}}else{e=c[j+8>>2]|0;if(e>>>0<f>>>0)ga();a=e+12|0;if((c[a>>2]|0)!=(j|0))ga();b=d+8|0;if((c[b>>2]|0)==(j|0)){c[a>>2]=d;c[b>>2]=e;s=d;break}else ga()}}while(0);do{if(g){a=c[j+28>>2]|0;b=532+(a<<2)|0;if((j|0)==(c[b>>2]|0)){c[b>>2]=s;if(!s){c[58]=c[58]&~(1<<a);break}}else{if(g>>>0<(c[61]|0)>>>0)ga();a=g+16|0;if((c[a>>2]|0)==(j|0))c[a>>2]=s;else c[g+20>>2]=s;if(!s)break}b=c[61]|0;if(s>>>0<b>>>0)ga();c[s+24>>2]=g;a=c[j+16>>2]|0;do{if(a)if(a>>>0<b>>>0)ga();else{c[s+16>>2]=a;c[a+24>>2]=s;break}}while(0);a=c[j+20>>2]|0;if(a)if(a>>>0<(c[61]|0)>>>0)ga();else{c[s+20>>2]=a;c[a+24>>2]=s;break}}}while(0);b:do{if(i>>>0>=16){c[j+4>>2]=o|3;c[j+(o|4)>>2]=i|1;c[j+(i+o)>>2]=i;a=i>>>3;if(i>>>0<256){b=a<<1;e=268+(b<<2)|0;d=c[57]|0;a=1<<a;if(d&a){a=268+(b+2<<2)|0;b=c[a>>2]|0;if(b>>>0<(c[61]|0)>>>0)ga();else{t=a;u=b}}else{c[57]=d|a;t=268+(b+2<<2)|0;u=e}c[t>>2]=h;c[u+12>>2]=h;c[j+(o+8)>>2]=u;c[j+(o+12)>>2]=e;break}a=i>>>8;if(a)if(i>>>0>16777215)e=31;else{K=(a+1048320|0)>>>16&8;L=a<<K;J=(L+520192|0)>>>16&4;L=L<<J;e=(L+245760|0)>>>16&2;e=14-(J|K|e)+(L<<e>>>15)|0;e=i>>>(e+7|0)&1|e<<1}else e=0;a=532+(e<<2)|0;c[j+(o+28)>>2]=e;c[j+(o+20)>>2]=0;c[j+(o+16)>>2]=0;b=c[58]|0;d=1<<e;if(!(b&d)){c[58]=b|d;c[a>>2]=h;c[j+(o+24)>>2]=a;c[j+(o+12)>>2]=h;c[j+(o+8)>>2]=h;break}a=c[a>>2]|0;c:do{if((c[a+4>>2]&-8|0)!=(i|0)){e=i<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=a+16+(e>>>31<<2)|0;b=c[d>>2]|0;if(!b)break;if((c[b+4>>2]&-8|0)==(i|0)){w=b;break c}else{e=e<<1;a=b}}if(d>>>0<(c[61]|0)>>>0)ga();else{c[d>>2]=h;c[j+(o+24)>>2]=a;c[j+(o+12)>>2]=h;c[j+(o+8)>>2]=h;break b}}else w=a}while(0);a=w+8|0;b=c[a>>2]|0;L=c[61]|0;if(b>>>0>=L>>>0&w>>>0>=L>>>0){c[b+12>>2]=h;c[a>>2]=h;c[j+(o+8)>>2]=b;c[j+(o+12)>>2]=w;c[j+(o+24)>>2]=0;break}else ga()}else{L=i+o|0;c[j+4>>2]=L|3;L=j+(L+4)|0;c[L>>2]=c[L>>2]|1}}while(0);L=j+8|0;return L|0}}}else o=-1}while(0);d=c[59]|0;if(d>>>0>=o>>>0){a=d-o|0;b=c[62]|0;if(a>>>0>15){c[62]=b+o;c[59]=a;c[b+(o+4)>>2]=a|1;c[b+d>>2]=a;c[b+4>>2]=o|3}else{c[59]=0;c[62]=0;c[b+4>>2]=d|3;L=b+(d+4)|0;c[L>>2]=c[L>>2]|1}L=b+8|0;return L|0}a=c[60]|0;if(a>>>0>o>>>0){K=a-o|0;c[60]=K;L=c[63]|0;c[63]=L+o;c[L+(o+4)>>2]=K|1;c[L+4>>2]=o|3;L=L+8|0;return L|0}do{if(!(c[175]|0)){a=ea(30)|0;if(!(a+-1&a)){c[177]=a;c[176]=a;c[178]=-1;c[179]=-1;c[180]=0;c[168]=0;c[175]=(ja(0)|0)&-16^1431655768;break}else ga()}}while(0);g=o+48|0;f=c[177]|0;h=o+47|0;e=f+h|0;f=0-f|0;i=e&f;if(i>>>0<=o>>>0){L=0;return L|0}a=c[167]|0;if((a|0)!=0?(u=c[165]|0,w=u+i|0,w>>>0<=u>>>0|w>>>0>a>>>0):0){L=0;return L|0}d:do{if(!(c[168]&4)){d=c[63]|0;e:do{if(d){a=676;while(1){b=c[a>>2]|0;if(b>>>0<=d>>>0?(r=a+4|0,(b+(c[r>>2]|0)|0)>>>0>d>>>0):0)break;a=c[a+8>>2]|0;if(!a){x=174;break e}}b=e-(c[60]|0)&f;if(b>>>0<2147483647){d=ia(b|0)|0;w=(d|0)==((c[a>>2]|0)+(c[r>>2]|0)|0);a=w?b:0;if(w){if((d|0)!=(-1|0)){r=d;q=a;x=194;break d}}else x=184}else a=0}else x=174}while(0);do{if((x|0)==174){e=ia(0)|0;if((e|0)!=(-1|0)){a=e;b=c[176]|0;d=b+-1|0;if(!(d&a))b=i;else b=i-a+(d+a&0-b)|0;a=c[165]|0;d=a+b|0;if(b>>>0>o>>>0&b>>>0<2147483647){w=c[167]|0;if((w|0)!=0?d>>>0<=a>>>0|d>>>0>w>>>0:0){a=0;break}d=ia(b|0)|0;x=(d|0)==(e|0);a=x?b:0;if(x){r=e;q=a;x=194;break d}else x=184}else a=0}else a=0}}while(0);f:do{if((x|0)==184){e=0-b|0;do{if(g>>>0>b>>>0&(b>>>0<2147483647&(d|0)!=(-1|0))?(v=c[177]|0,v=h-b+v&0-v,v>>>0<2147483647):0)if((ia(v|0)|0)==(-1|0)){ia(e|0)|0;break f}else{b=v+b|0;break}}while(0);if((d|0)!=(-1|0)){r=d;q=b;x=194;break d}}}while(0);c[168]=c[168]|4;x=191}else{a=0;x=191}}while(0);if((((x|0)==191?i>>>0<2147483647:0)?(y=ia(i|0)|0,z=ia(0)|0,y>>>0<z>>>0&((y|0)!=(-1|0)&(z|0)!=(-1|0))):0)?(A=z-y|0,B=A>>>0>(o+40|0)>>>0,B):0){r=y;q=B?A:a;x=194}if((x|0)==194){a=(c[165]|0)+q|0;c[165]=a;if(a>>>0>(c[166]|0)>>>0)c[166]=a;h=c[63]|0;g:do{if(h){f=676;while(1){a=c[f>>2]|0;b=f+4|0;d=c[b>>2]|0;if((r|0)==(a+d|0)){x=204;break}e=c[f+8>>2]|0;if(!e)break;else f=e}if(((x|0)==204?(c[f+12>>2]&8|0)==0:0)?h>>>0<r>>>0&h>>>0>=a>>>0:0){c[b>>2]=d+q;L=(c[60]|0)+q|0;K=h+8|0;K=(K&7|0)==0?0:0-K&7;J=L-K|0;c[63]=h+K;c[60]=J;c[h+(K+4)>>2]=J|1;c[h+(L+4)>>2]=40;c[64]=c[179];break}a=c[61]|0;if(r>>>0<a>>>0){c[61]=r;j=r}else j=a;b=r+q|0;a=676;while(1){if((c[a>>2]|0)==(b|0)){x=212;break}a=c[a+8>>2]|0;if(!a){b=676;break}}if((x|0)==212)if(!(c[a+12>>2]&8)){c[a>>2]=r;n=a+4|0;c[n>>2]=(c[n>>2]|0)+q;n=r+8|0;n=(n&7|0)==0?0:0-n&7;k=r+(q+8)|0;k=(k&7|0)==0?0:0-k&7;a=r+(k+q)|0;m=n+o|0;p=r+m|0;l=a-(r+n)-o|0;c[r+(n+4)>>2]=o|3;h:do{if((a|0)!=(h|0)){if((a|0)==(c[62]|0)){L=(c[59]|0)+l|0;c[59]=L;c[62]=p;c[r+(m+4)>>2]=L|1;c[r+(L+m)>>2]=L;break}h=q+4|0;b=c[r+(h+k)>>2]|0;if((b&3|0)==1){i=b&-8;f=b>>>3;i:do{if(b>>>0>=256){g=c[r+((k|24)+q)>>2]|0;e=c[r+(q+12+k)>>2]|0;do{if((e|0)==(a|0)){d=k|16;e=r+(h+d)|0;b=c[e>>2]|0;if(!b){d=r+(d+q)|0;b=c[d>>2]|0;if(!b){I=0;break}}else d=e;while(1){e=b+20|0;f=c[e>>2]|0;if(f){b=f;d=e;continue}e=b+16|0;f=c[e>>2]|0;if(!f)break;else{b=f;d=e}}if(d>>>0<j>>>0)ga();else{c[d>>2]=0;I=b;break}}else{f=c[r+((k|8)+q)>>2]|0;if(f>>>0<j>>>0)ga();b=f+12|0;if((c[b>>2]|0)!=(a|0))ga();d=e+8|0;if((c[d>>2]|0)==(a|0)){c[b>>2]=e;c[d>>2]=f;I=e;break}else ga()}}while(0);if(!g)break;b=c[r+(q+28+k)>>2]|0;d=532+(b<<2)|0;do{if((a|0)!=(c[d>>2]|0)){if(g>>>0<(c[61]|0)>>>0)ga();b=g+16|0;if((c[b>>2]|0)==(a|0))c[b>>2]=I;else c[g+20>>2]=I;if(!I)break i}else{c[d>>2]=I;if(I)break;c[58]=c[58]&~(1<<b);break i}}while(0);d=c[61]|0;if(I>>>0<d>>>0)ga();c[I+24>>2]=g;a=k|16;b=c[r+(a+q)>>2]|0;do{if(b)if(b>>>0<d>>>0)ga();else{c[I+16>>2]=b;c[b+24>>2]=I;break}}while(0);a=c[r+(h+a)>>2]|0;if(!a)break;if(a>>>0<(c[61]|0)>>>0)ga();else{c[I+20>>2]=a;c[a+24>>2]=I;break}}else{d=c[r+((k|8)+q)>>2]|0;e=c[r+(q+12+k)>>2]|0;b=268+(f<<1<<2)|0;do{if((d|0)!=(b|0)){if(d>>>0<j>>>0)ga();if((c[d+12>>2]|0)==(a|0))break;ga()}}while(0);if((e|0)==(d|0)){c[57]=c[57]&~(1<<f);break}do{if((e|0)==(b|0))E=e+8|0;else{if(e>>>0<j>>>0)ga();b=e+8|0;if((c[b>>2]|0)==(a|0)){E=b;break}ga()}}while(0);c[d+12>>2]=e;c[E>>2]=d}}while(0);a=r+((i|k)+q)|0;f=i+l|0}else f=l;a=a+4|0;c[a>>2]=c[a>>2]&-2;c[r+(m+4)>>2]=f|1;c[r+(f+m)>>2]=f;a=f>>>3;if(f>>>0<256){b=a<<1;e=268+(b<<2)|0;d=c[57]|0;a=1<<a;do{if(!(d&a)){c[57]=d|a;J=268+(b+2<<2)|0;K=e}else{a=268+(b+2<<2)|0;b=c[a>>2]|0;if(b>>>0>=(c[61]|0)>>>0){J=a;K=b;break}ga()}}while(0);c[J>>2]=p;c[K+12>>2]=p;c[r+(m+8)>>2]=K;c[r+(m+12)>>2]=e;break}a=f>>>8;do{if(!a)e=0;else{if(f>>>0>16777215){e=31;break}J=(a+1048320|0)>>>16&8;K=a<<J;I=(K+520192|0)>>>16&4;K=K<<I;e=(K+245760|0)>>>16&2;e=14-(I|J|e)+(K<<e>>>15)|0;e=f>>>(e+7|0)&1|e<<1}}while(0);a=532+(e<<2)|0;c[r+(m+28)>>2]=e;c[r+(m+20)>>2]=0;c[r+(m+16)>>2]=0;b=c[58]|0;d=1<<e;if(!(b&d)){c[58]=b|d;c[a>>2]=p;c[r+(m+24)>>2]=a;c[r+(m+12)>>2]=p;c[r+(m+8)>>2]=p;break}a=c[a>>2]|0;j:do{if((c[a+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=a+16+(e>>>31<<2)|0;b=c[d>>2]|0;if(!b)break;if((c[b+4>>2]&-8|0)==(f|0)){L=b;break j}else{e=e<<1;a=b}}if(d>>>0<(c[61]|0)>>>0)ga();else{c[d>>2]=p;c[r+(m+24)>>2]=a;c[r+(m+12)>>2]=p;c[r+(m+8)>>2]=p;break h}}else L=a}while(0);a=L+8|0;b=c[a>>2]|0;K=c[61]|0;if(b>>>0>=K>>>0&L>>>0>=K>>>0){c[b+12>>2]=p;c[a>>2]=p;c[r+(m+8)>>2]=b;c[r+(m+12)>>2]=L;c[r+(m+24)>>2]=0;break}else ga()}else{L=(c[60]|0)+l|0;c[60]=L;c[63]=p;c[r+(m+4)>>2]=L|1}}while(0);L=r+(n|8)|0;return L|0}else b=676;while(1){a=c[b>>2]|0;if(a>>>0<=h>>>0?(C=c[b+4>>2]|0,D=a+C|0,D>>>0>h>>>0):0)break;b=c[b+8>>2]|0}b=a+(C+-39)|0;b=a+(C+-47+((b&7|0)==0?0:0-b&7))|0;f=h+16|0;b=b>>>0<f>>>0?h:b;a=b+8|0;d=r+8|0;d=(d&7|0)==0?0:0-d&7;L=q+-40-d|0;c[63]=r+d;c[60]=L;c[r+(d+4)>>2]=L|1;c[r+(q+-36)>>2]=40;c[64]=c[179];d=b+4|0;c[d>>2]=27;c[a>>2]=c[169];c[a+4>>2]=c[170];c[a+8>>2]=c[171];c[a+12>>2]=c[172];c[169]=r;c[170]=q;c[172]=0;c[171]=a;a=b+28|0;c[a>>2]=7;if((b+32|0)>>>0<D>>>0)do{L=a;a=a+4|0;c[a>>2]=7}while((L+8|0)>>>0<D>>>0);if((b|0)!=(h|0)){g=b-h|0;c[d>>2]=c[d>>2]&-2;c[h+4>>2]=g|1;c[b>>2]=g;a=g>>>3;if(g>>>0<256){b=a<<1;e=268+(b<<2)|0;d=c[57]|0;a=1<<a;if(d&a){a=268+(b+2<<2)|0;b=c[a>>2]|0;if(b>>>0<(c[61]|0)>>>0)ga();else{F=a;G=b}}else{c[57]=d|a;F=268+(b+2<<2)|0;G=e}c[F>>2]=h;c[G+12>>2]=h;c[h+8>>2]=G;c[h+12>>2]=e;break}a=g>>>8;if(a)if(g>>>0>16777215)e=31;else{K=(a+1048320|0)>>>16&8;L=a<<K;J=(L+520192|0)>>>16&4;L=L<<J;e=(L+245760|0)>>>16&2;e=14-(J|K|e)+(L<<e>>>15)|0;e=g>>>(e+7|0)&1|e<<1}else e=0;d=532+(e<<2)|0;c[h+28>>2]=e;c[h+20>>2]=0;c[f>>2]=0;a=c[58]|0;b=1<<e;if(!(a&b)){c[58]=a|b;c[d>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;break}a=c[d>>2]|0;k:do{if((c[a+4>>2]&-8|0)!=(g|0)){e=g<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=a+16+(e>>>31<<2)|0;b=c[d>>2]|0;if(!b)break;if((c[b+4>>2]&-8|0)==(g|0)){H=b;break k}else{e=e<<1;a=b}}if(d>>>0<(c[61]|0)>>>0)ga();else{c[d>>2]=h;c[h+24>>2]=a;c[h+12>>2]=h;c[h+8>>2]=h;break g}}else H=a}while(0);a=H+8|0;b=c[a>>2]|0;L=c[61]|0;if(b>>>0>=L>>>0&H>>>0>=L>>>0){c[b+12>>2]=h;c[a>>2]=h;c[h+8>>2]=b;c[h+12>>2]=H;c[h+24>>2]=0;break}else ga()}}else{L=c[61]|0;if((L|0)==0|r>>>0<L>>>0)c[61]=r;c[169]=r;c[170]=q;c[172]=0;c[66]=c[175];c[65]=-1;a=0;do{L=a<<1;K=268+(L<<2)|0;c[268+(L+3<<2)>>2]=K;c[268+(L+2<<2)>>2]=K;a=a+1|0}while((a|0)!=32);L=r+8|0;L=(L&7|0)==0?0:0-L&7;K=q+-40-L|0;c[63]=r+L;c[60]=K;c[r+(L+4)>>2]=K|1;c[r+(q+-36)>>2]=40;c[64]=c[179]}}while(0);a=c[60]|0;if(a>>>0>o>>>0){K=a-o|0;c[60]=K;L=c[63]|0;c[63]=L+o;c[L+(o+4)>>2]=K|1;c[L+4>>2]=o|3;L=L+8|0;return L|0}}if(!(c[45]|0))a=224;else a=c[(fa()|0)+60>>2]|0;c[a>>2]=12;L=0;return L|0}function $a(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;if(!a)return;b=a+-8|0;i=c[61]|0;if(b>>>0<i>>>0)ga();d=c[a+-4>>2]|0;e=d&3;if((e|0)==1)ga();o=d&-8;q=a+(o+-8)|0;do{if(!(d&1)){b=c[b>>2]|0;if(!e)return;j=-8-b|0;l=a+j|0;m=b+o|0;if(l>>>0<i>>>0)ga();if((l|0)==(c[62]|0)){b=a+(o+-4)|0;d=c[b>>2]|0;if((d&3|0)!=3){u=l;g=m;break}c[59]=m;c[b>>2]=d&-2;c[a+(j+4)>>2]=m|1;c[q>>2]=m;return}f=b>>>3;if(b>>>0<256){e=c[a+(j+8)>>2]|0;d=c[a+(j+12)>>2]|0;b=268+(f<<1<<2)|0;if((e|0)!=(b|0)){if(e>>>0<i>>>0)ga();if((c[e+12>>2]|0)!=(l|0))ga()}if((d|0)==(e|0)){c[57]=c[57]&~(1<<f);u=l;g=m;break}if((d|0)!=(b|0)){if(d>>>0<i>>>0)ga();b=d+8|0;if((c[b>>2]|0)==(l|0))h=b;else ga()}else h=d+8|0;c[e+12>>2]=d;c[h>>2]=e;u=l;g=m;break}h=c[a+(j+24)>>2]|0;e=c[a+(j+12)>>2]|0;do{if((e|0)==(l|0)){d=a+(j+20)|0;b=c[d>>2]|0;if(!b){d=a+(j+16)|0;b=c[d>>2]|0;if(!b){k=0;break}}while(1){e=b+20|0;f=c[e>>2]|0;if(f){b=f;d=e;continue}e=b+16|0;f=c[e>>2]|0;if(!f)break;else{b=f;d=e}}if(d>>>0<i>>>0)ga();else{c[d>>2]=0;k=b;break}}else{f=c[a+(j+8)>>2]|0;if(f>>>0<i>>>0)ga();b=f+12|0;if((c[b>>2]|0)!=(l|0))ga();d=e+8|0;if((c[d>>2]|0)==(l|0)){c[b>>2]=e;c[d>>2]=f;k=e;break}else ga()}}while(0);if(h){b=c[a+(j+28)>>2]|0;d=532+(b<<2)|0;if((l|0)==(c[d>>2]|0)){c[d>>2]=k;if(!k){c[58]=c[58]&~(1<<b);u=l;g=m;break}}else{if(h>>>0<(c[61]|0)>>>0)ga();b=h+16|0;if((c[b>>2]|0)==(l|0))c[b>>2]=k;else c[h+20>>2]=k;if(!k){u=l;g=m;break}}d=c[61]|0;if(k>>>0<d>>>0)ga();c[k+24>>2]=h;b=c[a+(j+16)>>2]|0;do{if(b)if(b>>>0<d>>>0)ga();else{c[k+16>>2]=b;c[b+24>>2]=k;break}}while(0);b=c[a+(j+20)>>2]|0;if(b)if(b>>>0<(c[61]|0)>>>0)ga();else{c[k+20>>2]=b;c[b+24>>2]=k;u=l;g=m;break}else{u=l;g=m}}else{u=l;g=m}}else{u=b;g=o}}while(0);if(u>>>0>=q>>>0)ga();b=a+(o+-4)|0;d=c[b>>2]|0;if(!(d&1))ga();if(!(d&2)){if((q|0)==(c[63]|0)){t=(c[60]|0)+g|0;c[60]=t;c[63]=u;c[u+4>>2]=t|1;if((u|0)!=(c[62]|0))return;c[62]=0;c[59]=0;return}if((q|0)==(c[62]|0)){t=(c[59]|0)+g|0;c[59]=t;c[62]=u;c[u+4>>2]=t|1;c[u+t>>2]=t;return}g=(d&-8)+g|0;f=d>>>3;do{if(d>>>0>=256){h=c[a+(o+16)>>2]|0;b=c[a+(o|4)>>2]|0;do{if((b|0)==(q|0)){d=a+(o+12)|0;b=c[d>>2]|0;if(!b){d=a+(o+8)|0;b=c[d>>2]|0;if(!b){p=0;break}}while(1){e=b+20|0;f=c[e>>2]|0;if(f){b=f;d=e;continue}e=b+16|0;f=c[e>>2]|0;if(!f)break;else{b=f;d=e}}if(d>>>0<(c[61]|0)>>>0)ga();else{c[d>>2]=0;p=b;break}}else{d=c[a+o>>2]|0;if(d>>>0<(c[61]|0)>>>0)ga();e=d+12|0;if((c[e>>2]|0)!=(q|0))ga();f=b+8|0;if((c[f>>2]|0)==(q|0)){c[e>>2]=b;c[f>>2]=d;p=b;break}else ga()}}while(0);if(h){b=c[a+(o+20)>>2]|0;d=532+(b<<2)|0;if((q|0)==(c[d>>2]|0)){c[d>>2]=p;if(!p){c[58]=c[58]&~(1<<b);break}}else{if(h>>>0<(c[61]|0)>>>0)ga();b=h+16|0;if((c[b>>2]|0)==(q|0))c[b>>2]=p;else c[h+20>>2]=p;if(!p)break}d=c[61]|0;if(p>>>0<d>>>0)ga();c[p+24>>2]=h;b=c[a+(o+8)>>2]|0;do{if(b)if(b>>>0<d>>>0)ga();else{c[p+16>>2]=b;c[b+24>>2]=p;break}}while(0);b=c[a+(o+12)>>2]|0;if(b)if(b>>>0<(c[61]|0)>>>0)ga();else{c[p+20>>2]=b;c[b+24>>2]=p;break}}}else{e=c[a+o>>2]|0;d=c[a+(o|4)>>2]|0;b=268+(f<<1<<2)|0;if((e|0)!=(b|0)){if(e>>>0<(c[61]|0)>>>0)ga();if((c[e+12>>2]|0)!=(q|0))ga()}if((d|0)==(e|0)){c[57]=c[57]&~(1<<f);break}if((d|0)!=(b|0)){if(d>>>0<(c[61]|0)>>>0)ga();b=d+8|0;if((c[b>>2]|0)==(q|0))n=b;else ga()}else n=d+8|0;c[e+12>>2]=d;c[n>>2]=e}}while(0);c[u+4>>2]=g|1;c[u+g>>2]=g;if((u|0)==(c[62]|0)){c[59]=g;return}}else{c[b>>2]=d&-2;c[u+4>>2]=g|1;c[u+g>>2]=g}b=g>>>3;if(g>>>0<256){d=b<<1;f=268+(d<<2)|0;e=c[57]|0;b=1<<b;if(e&b){b=268+(d+2<<2)|0;d=c[b>>2]|0;if(d>>>0<(c[61]|0)>>>0)ga();else{r=b;s=d}}else{c[57]=e|b;r=268+(d+2<<2)|0;s=f}c[r>>2]=u;c[s+12>>2]=u;c[u+8>>2]=s;c[u+12>>2]=f;return}b=g>>>8;if(b)if(g>>>0>16777215)f=31;else{r=(b+1048320|0)>>>16&8;s=b<<r;q=(s+520192|0)>>>16&4;s=s<<q;f=(s+245760|0)>>>16&2;f=14-(q|r|f)+(s<<f>>>15)|0;f=g>>>(f+7|0)&1|f<<1}else f=0;b=532+(f<<2)|0;c[u+28>>2]=f;c[u+20>>2]=0;c[u+16>>2]=0;d=c[58]|0;e=1<<f;a:do{if(d&e){b=c[b>>2]|0;b:do{if((c[b+4>>2]&-8|0)!=(g|0)){f=g<<((f|0)==31?0:25-(f>>>1)|0);while(1){e=b+16+(f>>>31<<2)|0;d=c[e>>2]|0;if(!d)break;if((c[d+4>>2]&-8|0)==(g|0)){t=d;break b}else{f=f<<1;b=d}}if(e>>>0<(c[61]|0)>>>0)ga();else{c[e>>2]=u;c[u+24>>2]=b;c[u+12>>2]=u;c[u+8>>2]=u;break a}}else t=b}while(0);b=t+8|0;d=c[b>>2]|0;s=c[61]|0;if(d>>>0>=s>>>0&t>>>0>=s>>>0){c[d+12>>2]=u;c[b>>2]=u;c[u+8>>2]=d;c[u+12>>2]=t;c[u+24>>2]=0;break}else ga()}else{c[58]=d|e;c[b>>2]=u;c[u+24>>2]=b;c[u+12>>2]=u;c[u+8>>2]=u}}while(0);u=(c[65]|0)+-1|0;c[65]=u;if(!u)b=684;else return;while(1){b=c[b>>2]|0;if(!b)break;else b=b+8|0}c[65]=-1;return}function ab(){}function bb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return(C=d,a-c>>>0|0)|0}function cb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return(C=b+d+(c>>>0<a>>>0|0)>>>0,c|0)|0}function db(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=b+e|0;if((e|0)>=20){d=d&255;h=b&3;i=d|d<<8|d<<16|d<<24;g=f&~3;if(h){h=b+4-h|0;while((b|0)<(h|0)){a[b>>0]=d;b=b+1|0}}while((b|0)<(g|0)){c[b>>2]=i;b=b+4|0}}while((b|0)<(f|0)){a[b>>0]=d;b=b+1|0}return b-e|0}function eb(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){C=b>>>c;return a>>>c|(b&(1<<c)-1)<<32-c}C=0;return b>>>c-32|0}function fb(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){C=b<<c|(a&(1<<c)-1<<32-c)>>>32-c;return a<<c}C=a<<c-32;return 0}function gb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if((e|0)>=4096)return ka(b|0,d|0,e|0)|0;f=b|0;if((b&3)==(d&3)){while(b&3){if(!e)return f|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}while((e|0)>=4){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0;e=e-4|0}}while((e|0)>0){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}return f|0}function hb(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)<(b|0)&(b|0)<(c+d|0)){e=b;c=c+d|0;b=b+d|0;while((d|0)>0){b=b-1|0;c=c-1|0;d=d-1|0;a[b>>0]=a[c>>0]|0}b=e}else gb(b,c,d)|0;return b|0}function ib(b){b=b|0;var c=0;c=a[m+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[m+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[m+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return(a[m+(b>>>24)>>0]|0)+24|0}function jb(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){C=b>>c;return a>>>c|(b&(1<<c)-1)<<32-c}C=(b|0)<0?-1:0;return b>>c-32|0}function kb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=_(e,f)|0;d=a>>>16;a=(c>>>16)+(_(e,d)|0)|0;e=b>>>16;b=_(e,f)|0;return(C=(a>>>16)+(_(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function lb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=b>>31|((b|0)<0?-1:0)<<1;i=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;f=d>>31|((d|0)<0?-1:0)<<1;e=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;h=bb(j^a,i^b,j,i)|0;g=C;a=f^j;b=e^i;return bb((qb(h,g,bb(f^c,e^d,f,e)|0,C,0)|0)^a,C^b,a,b)|0}function mb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;f=i;i=i+16|0;j=f|0;h=b>>31|((b|0)<0?-1:0)<<1;g=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;l=e>>31|((e|0)<0?-1:0)<<1;k=((e|0)<0?-1:0)>>31|((e|0)<0?-1:0)<<1;a=bb(h^a,g^b,h,g)|0;b=C;qb(a,b,bb(l^d,k^e,l,k)|0,C,j)|0;e=bb(c[j>>2]^h,c[j+4>>2]^g,h,g)|0;d=C;i=f;return(C=d,e)|0}function nb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=kb(e,f)|0;a=C;return(C=(_(b,f)|0)+(_(d,e)|0)+a|a&0,c|0|0)|0}function ob(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return qb(a,b,c,d,0)|0}function pb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;i=i+16|0;f=g|0;qb(a,b,d,e,f)|0;i=g;return(C=c[f+4>>2]|0,c[f>>2]|0)|0}function qb(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=a;j=b;k=j;h=d;n=e;i=n;if(!k){g=(f|0)!=0;if(!i){if(g){c[f>>2]=(l>>>0)%(h>>>0);c[f+4>>2]=0}n=0;f=(l>>>0)/(h>>>0)>>>0;return(C=n,f)|0}else{if(!g){n=0;f=0;return(C=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return(C=n,f)|0}}g=(i|0)==0;do{if(h){if(!g){g=(aa(i|0)|0)-(aa(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;b=g-31>>31;h=m;a=l>>>(m>>>0)&b|k<<i;b=k>>>(m>>>0)&b;g=0;i=l<<i;break}if(!f){n=0;f=0;return(C=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=j|b&0;n=0;f=0;return(C=n,f)|0}g=h-1|0;if(g&h){i=(aa(h|0)|0)+33-(aa(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;b=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<<m|l>>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<<p&j;i=(k<<p|l>>>(o>>>0))&j|l<<m&i-33>>31;break}if(f){c[f>>2]=g&l;c[f+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return(C=o,p)|0}else{p=ib(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return(C=o,p)|0}}else{if(g){if(f){c[f>>2]=(k>>>0)%(h>>>0);c[f+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return(C=o,p)|0}if(!l){if(f){c[f>>2]=0;c[f+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return(C=o,p)|0}g=i-1|0;if(!(g&i)){if(f){c[f>>2]=a|0;c[f+4>>2]=g&k|b&0}o=0;p=k>>>((ib(i|0)|0)>>>0);return(C=o,p)|0}g=(aa(i|0)|0)-(aa(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<<i|l>>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<<i;break}if(!f){o=0;p=0;return(C=o,p)|0}c[f>>2]=a|0;c[f+4>>2]=j|b&0;o=0;p=0;return(C=o,p)|0}}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=cb(m|0,l|0,-1,-1)|0;d=C;j=i;i=0;do{e=j;j=g>>>31|j<<1;g=i|g<<1;e=a<<1|e>>>31|0;n=a>>>31|b<<1|0;bb(k,d,e,n)|0;p=C;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=bb(e,n,o&m,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l)|0;b=C;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(f){c[f>>2]=a;c[f+4>>2]=b}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return(C=o,p)|0}function rb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return oa[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function sb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;ba(0);return 0}var oa=[sb,Oa,Pa,Wa,Qa,Ta,Na,sb];return{_memmove:hb,_malloc:_a,_i64Subtract:bb,_free:$a,_memcpy:gb,_LZ4JS_compressBegin:Ba,_LZ4JS_freeCompressionContext:Aa,_LZ4JS_freeDecompressionContext:Fa,_memset:db,_llvm_cttz_i32:ib,_LZ4JS_init:ya,_i64Add:cb,_LZ4JS_compressEnd:Da,_LZ4JS_compressUpdate:Ca,_LZ4JS_decompress:Ga,_bitshift64Lshr:eb,_LZ4JS_createDecompressionContext:Ea,_LZ4JS_createCompressionContext:za,_bitshift64Shl:fb,runPostSets:ab,stackAlloc:pa,stackSave:qa,stackRestore:ra,establishStackSpace:sa,setThrew:ta,setTempRet0:wa,getTempRet0:xa,dynCall_iiiiiii:rb}}(c.W,c.X,buffer),Oa=c._LZ4JS_init=Z._LZ4JS_init,Ea=c._i64Subtract=Z._i64Subtract,Q=c._free=Z._free;c.runPostSets=Z.runPostSets;var Pa=c._LZ4JS_compressBegin=Z._LZ4JS_compressBegin,La=c._memmove=Z._memmove,Qa=c._LZ4JS_freeDecompressionContext=Z._LZ4JS_freeDecompressionContext,Ra=c._LZ4JS_decompress=Z._LZ4JS_decompress,Ga=c._memset=Z._memset,Sa=c._LZ4JS_compressUpdate=Z._LZ4JS_compressUpdate,Na=c._llvm_cttz_i32=Z._llvm_cttz_i32,O=c._malloc=Z._malloc,Fa=c._i64Add=Z._i64Add,Ta=c._LZ4JS_compressEnd=Z._LZ4JS_compressEnd,Ja=c._memcpy=Z._memcpy,Ua=c._LZ4JS_freeCompressionContext=Z._LZ4JS_freeCompressionContext,Ha=c._bitshift64Lshr=Z._bitshift64Lshr,Va=c._LZ4JS_createDecompressionContext=Z._LZ4JS_createDecompressionContext,Wa=c._LZ4JS_createCompressionContext=Z._LZ4JS_createCompressionContext,Ia=c._bitshift64Shl=Z._bitshift64Shl;function x(a){this.name="ExitStatus",this.message="Program terminated with exit("+a+")",this.status=a}c.dynCall_iiiiiii=Z.dynCall_iiiiiii,z.D=Z.stackAlloc,z.T=Z.stackSave,z.S=Z.stackRestore,z.pa=Z.establishStackSpace,z.ja=Z.setTempRet0,z.ha=Z.getTempRet0,x.prototype=Error(),x.prototype.constructor=x;var Xa=null;function Za(a){function b(){if(!c.calledRun&&(c.calledRun=!0,!F)){if(W||(W=!0,T(V)),T(xa),c.onRuntimeInitialized&&c.onRuntimeInitialized(),c._main&&$a&&c.callMain(a),c.postRun)for("function"==typeof c.postRun&&(c.postRun=[c.postRun]);c.postRun.length;){var b=c.postRun.shift();za.unshift(b)}T(za)}}if(a=a||c.arguments,null===Xa&&(Xa=Date.now()),c.preRun)for("function"==typeof c.preRun&&(c.preRun=[c.preRun]);c.preRun.length;)Aa();T(U),c.calledRun||(c.setStatus?(c.setStatus("Running..."),setTimeout((function(){setTimeout((function(){c.setStatus("")}),1),b()}),1)):b())}function Ya(a,b){if(!b||!c.noExitRuntime)throw!c.noExitRuntime&&(F=!0,y=void 0,T(ya),c.onExit)&&c.onExit(a),w?(process.stdout.once("drain",(function(){process.exit(a)})),console.log(" "),setTimeout((function(){process.exit(a)}),500)):aa&&"function"==typeof quit&&quit(a),new x(a)}c.callMain=c.na=function(a){function b(){for(var a=0;3>a;a++)e.push(0)}assert(!0,"cannot call main when async dependencies remain! (listen on __ATMAIN__)"),assert(0==U.length,"cannot call main when preRun functions remain to be called"),a=a||[],W||(W=!0,T(V));var d=a.length+1,e=[N(Ba(c.thisProgram),"i8",0)];b();for(var g=0;g<d-1;g+=1)e.push(N(Ba(a[g]),"i8",0)),b();e.push(0),e=N(e,"i32",0);try{Ya(c._main(d,e,0),!0)}catch(h){if(!(h instanceof x)){if("SimulateInfiniteLoop"!=h)throw h&&"object"==typeof h&&h.stack&&c.K("exception thrown: "+[h,h.stack]),h;c.noExitRuntime=!0}}},c.run=c.run=Za,c.exit=c.exit=Ya;var ab=[];function E(a){void 0!==a?(c.print(a),c.K(a),a=JSON.stringify(a)):a="",F=!0;var b="abort("+a+") at "+oa()+"\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.";throw ab&&ab.forEach((function(d){b=d(b,a)})),b}if(c.abort=c.abort=E,c.preInit)for("function"==typeof c.preInit&&(c.preInit=[c.preInit]);0<c.preInit.length;)c.preInit.pop()();var $a=!0;c.noInitialRun&&($a=!1),Za();var X={};(function(){function a(a){return Array.prototype.slice.call(arguments,1).forEach((function(b){null!=b&&"object"==typeof b&&Object.keys(b).forEach((function(d){a[d]=b[d]}))})),a}function b(a){var b,d,e=0;return b=a.map((function(a){return a.length})).reduce((function(a,b){return a+b}),0),d=new Uint8Array(b),a.forEach((function(a){d.set(a,e),e+=a.length})),d}function d(a){return function(b){var d=a.apply(null,arguments);return Buffer.isBuffer(b)?new Buffer(d.buffer,d.byteOffset,d.byteOffset+d.length):d}}function e(b){if(this.options=a({},p,b),this.g=Wa(this.options.Z,+this.options.Y,+this.options.ba,this.options.aa),!this.g)throw Error("LZ4JS_createCompressionContext");X[this.g]=this,this.n=null}function g(){if(this.p=Va(),!this.p)throw Error("LZ4JS_createDecompressionContext");X[this.p]=this}function k(a,b){e.call(this,b),this.src=a,this.offset=0,this.o=[],this.e=0}function h(a,d){var e=new k(a,d);return e.M(),e.$(),e.N(),b(e.o)}function f(a){g.call(this),this.src=a,this.offset=0,this.o=[],this.e=0}function u(a){var d=new f(a);return d.da(),d=b(d.o),a instanceof Uint8Array?d:new Buffer(d.buffer)}var m=this;"function"==typeof define&&define.amd?define("lz4",(function(){return m})):w&&(module.exports=m),Oa(),m.BLOCK_MAX_SIZE_64KB=4,m.BLOCK_MAX_SIZE_256KB=5,m.BLOCK_MAX_SIZE_1MB=6;var p={Z:m.BLOCK_MAX_SIZE_4MB=7,Y:!1,ba:!1,aa:0};e.prototype.M=function(){Pa(this.g)||this.k()},e.prototype.O=function(){Sa(this.g)||this.k()},e.prototype.N=function(){Ta(this.g),this.k()},e.prototype.k=function(){if(Ua(this.g),delete X[this.g],this.n)throw this.n},g.prototype.P=function(){Ra(this.p)||this.k()},g.prototype.k=function(){if(Qa(this.p),delete X[this.p],this.n)throw this.n},w&&function(){function b(a){e.call(this,a),f.call(this,this.options),this.R=!1,this.e=0,this.src=new Buffer(0),this.q=new Buffer(0)}function d(){g.call(this),f.call(this,{}),this.e=0,this.src=new Buffer(0),this.q=new Buffer(0)}var f=require("stream").Transform,h=require("util").inherits;h(b,f),a(b.prototype,e.prototype),b.prototype.u=function(a){return P.set(new Uint8Array(this.src.buffer,this.src.byteOffset,this.e),a),this.e},b.prototype.A=function(a,b){this.q=new Buffer(P.buffer).slice(a,a+b),this.push(new Buffer(this.q))},b.prototype._transform=function(a,b,d){try{var e;for(this.R||(this.M(),this.R=!0),e=0;e<a.length;e+=8192)this.e=Math.min(a.length-e,8192),this.src=a.slice(e,e+this.e),this.O();d()}catch(f){d(f)}},b.prototype._flush=function(a){try{this.N(),a()}catch(b){a(b)}},m.createCompressStream=function(a){return new b(a)},h(d,f),a(d.prototype,g.prototype),d.prototype.u=function(a){return P.set(new Uint8Array(this.src.buffer,this.src.byteOffset,this.e),a),this.e},d.prototype.A=function(a,b){this.q=new Buffer(P.buffer).slice(a,a+b),this.push(new Buffer(this.q))},d.prototype._transform=function(a,b,d){try{var e;for(e=0;e<a.length;e+=8192)this.e=Math.min(a.length-e,8192),this.src=a.slice(e,e+this.e),this.P();d()}catch(f){d(f)}},d.prototype._flush=function(a){this.k(),a()},m.createDecompressStream=function(){return new d}}(),a(k.prototype,e.prototype),k.prototype.A=function(a,b){this.o.push(new Uint8Array(P.subarray(a,a+b)))},k.prototype.u=function(a){return P.set(this.src.subarray(this.offset,this.offset+this.e),a),this.e},k.prototype.$=function(){for(;this.offset<this.src.length;this.offset+=8192)this.e=Math.min(this.src.length-this.offset,8192),this.O()},m.compress=w?d(h):h,a(f.prototype,g.prototype),f.prototype.A=function(a,b){this.o.push(new Uint8Array(P.subarray(a,a+b)))},f.prototype.u=function(a){return P.set(this.src.subarray(this.offset,this.offset+this.e),a),this.e},f.prototype.da=function(){for(;this.offset<this.src.length;this.offset+=8192)this.e=Math.min(this.src.length-this.offset,8192),this.P();this.k()},m.decompress=w?d(u):u}).call(this)}).call(lz4);var hortis=fluid.registerNamespace("hortis");fluid.setLogging(!0),fluid.defaults("hortis.configHolder",{gradeNames:"fluid.component"}),fluid.defaults("hortis.sunburstLoader",{gradeNames:["fluid.viewComponent","fluid.resourceLoader","hortis.configHolder"],sunburstPixels:1002,markupTemplate:"%resourceBase/html/imerss-viz.html",phyloMap:"%resourceBase/json/phyloMap.json",resourceBase:"src/client",queryOnStartup:"",selectOnStartup:"",showObsListInTooltip:!0,gridResolution:void 0,friendlyNames:void 0,initialTab:"checklist",distributeOptions:{gridResolution:{source:"{that}.options.gridResolution",target:"{that hortis.quantiser}.options.model.longResolution"},friendlyNames:{source:"{that}.options.friendlyNames",target:"{that hortis.sunburst}.options.friendlyNames"},initialTab:{source:"{that}.options.initialTab",target:"{that hortis.imerssTabs}.options.model.selectedTab"}},resourceOptions:{terms:{resourceBase:"{that}.options.resourceBase"}},resources:{viz:{url:"{that}.options.vizFile",dataType:"binary",options:{processData:!1,responseType:"arraybuffer"}},markup:{url:"{that}.options.markupTemplate",dataType:"text"},phyloMap:{url:"{that}.options.phyloMap",dataType:"json"}},invokers:{resolveColourStrategy:"hortis.resolveColourStrategy({that}.options.colourCount)"},listeners:{"onResourcesLoaded.renderMarkup":{priority:"first",listener:"hortis.sunburstLoader.renderMarkup",args:["{that}.container","{that}.resources.markup.resourceText","{that}.options.renderMarkup",{sunburstPixels:"{that}.options.sunburstPixels"}]}},components:{sunburst:{type:"hortis.sunburst",createOnEvent:"onResourcesLoaded",options:{container:"{sunburstLoader}.container",gradeNames:"{sunburstLoader}.resolveColourStrategy",colourCount:"{sunburstLoader}.options.colourCount",culturalValues:"{sunburstLoader}.options.culturalValues",suppressObsAuthors:"{sunburstLoader}.options.suppressObsAuthors",queryOnStartup:"{sunburstLoader}.options.queryOnStartup",selectOnStartup:"{sunburstLoader}.options.selectOnStartup",members:{viz:"@expand:hortis.decompressLZ4({sunburstLoader}.resources.viz.resourceText)",tree:"{that}.viz.tree"},model:{commonNames:"{sunburstLoader}.options.commonNames"}}}}}),hortis.resolveResources=function(resources,terms){return fluid.transform(resources,(function(oneResource){return fluid.extend(!0,{},oneResource,{url:fluid.stringTemplate(oneResource.url,terms)})}))},hortis.decompressLZ4=function(arrayBuffer){const uint8in=new Uint8Array(arrayBuffer),uint8out=lz4.decompress(uint8in),text=new TextDecoder("utf-8").decode(uint8out);return JSON.parse(text)},hortis.combineSelectors=function(){return fluid.makeArray(arguments).join(", ")},hortis.sunburstLoader.renderMarkup=function(container,template,renderMarkup,terms){if(renderMarkup){const rendered=fluid.stringTemplate(template,terms),root=document.createRange().createContextualFragment(rendered).firstElementChild;for(;root.firstChild;)container[0].appendChild(root.firstChild)}},hortis.colouringGrades={undocumentedCount:"fluid.component",observationCount:"hortis.sunburstWithObsColour"},hortis.resolveColourStrategy=function(countField){return hortis.colouringGrades[countField]},fluid.defaults("hortis.sunburstWithObsColour",{gradeNames:"fluid.component",invokers:{fillColourForRow:"hortis.obsColourForRow({that}.options.parsedColours, {arguments}.0, {that}.flatTree.0)"}}),fluid.defaults("hortis.imerssTabs",{gradeNames:"hortis.tabs",tabIds:{simpleChecklist:"fli-tab-simple-checklist",checklist:"fli-tab-checklist",sunburst:"fli-tab-sunburst"},model:{}}),fluid.defaults("hortis.layoutHolder",{gradeNames:"fluid.modelComponent",members:{taxonHistory:[]},model:{rowFocus:{},layoutId:null,selectedId:null,hoverId:null,historyIndex:0}}),fluid.defaults("hortis.withPanelLabel",{gradeNames:"fluid.viewComponent",selectors:{panelLabel:".fld-imerss-panel-label"},model:{panelLabel:""},modelRelay:{panelLabel:{source:"panelLabel",target:"dom.panelLabel.text"}}}),fluid.defaults("hortis.sunburst",{gradeNames:["hortis.layoutHolder","hortis.withPanelLabel","fluid.viewComponent"],selectors:{panelLabel:"#fli-tab-sunburst .fld-imerss-panel-label",svg:".flc-imerss-svg",back:".fld-imerss-back",tabs:".fld-imerss-tabs",taxonDisplay:".fld-imerss-taxonDisplay",autocomplete:".fld-imerss-autocomplete",checklist:".fld-imerss-checklist-holder",simpleChecklist:".fld-imerss-simple-checklist-holder",segment:".fld-imerss-segment",label:".fld-imerss-label",phyloPic:".fld-imerss-phyloPic"},styles:{segment:"fld-imerss-segment",label:"fld-imerss-label",phyloPic:"fld-imerss-phyloPic",layoutRoot:"fl-imerss-layoutRoot",labelPath:"fld-imerss-labelPath",clickable:"fl-imerss-clickable"},components:{autocomplete:{type:"hortis.autocomplete",options:{container:"{sunburst}.dom.autocomplete",id:"fli-imerss-autocomplete",listeners:{onConfirm:"hortis.confirmAutocomplete({sunburst}, {arguments}.0)"},invokers:{query:"hortis.queryAutocomplete({that}.lookupTaxon, {arguments}.0, {arguments}.1)",lookupTaxon:"{sunburst}.lookupTaxon({arguments}.0, {that}.options.maxSuggestions)",renderInputValue:"hortis.autocompleteInputForRow",renderSuggestion:"hortis.autocompleteSuggestionForRow"}}},tabs:{type:"hortis.imerssTabs",options:{container:"{sunburst}.dom.tabs",modelRelay:{sunburstVisible:{target:"{sunburst}.model.visible",func:tab=>"sunburst"===tab,args:"{tabs}.model.selectedTab"}}}},checklist:{type:"hortis.checklist",options:{container:"{sunburst}.dom.checklist"}},simpleChecklist:{type:"hortis.checklist",options:{container:"{sunburst}.dom.simpleChecklist",filterRanks:["phylum","class","order","species"]}}},colours:{lowColour:"#9ecae1",highColour:"#e7969c",unfocusedColour:"#ddd"},zoomDuration:1250,scaleConfig:{innerDepth:1/22,outerDepth:13/22,rootRadii:[3/22,3/22,3/22,13/22],maxNodes:200},parsedColours:"@expand:hortis.parseColours({that}.options.colours)",colourCount:"undocumentedCount",culturalValues:!0,friendlyNames:!1,suppressObsAuthors:!1,model:{scale:{left:0,right:0,radiusScale:[]},visible:!1,commonNames:!0},modelRelay:{isAtRoot:{target:"isAtRoot",func:"hortis.isAtRoot",args:["{that}","{that}.model.layoutId"]},backEnabled:{target:"dom.back.attr.aria-disabled",func:index=>index<2,args:"{that}.model.historyIndex"}},markup:{segmentHeader:'<g xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">',segment:'<path id="%id" d="%path" visibility="%visibility" class="%clazz" vector-effect="non-scaling-stroke" style="%style"></path>',label:'<path id="%labelPathId" d="%textPath" visibility="%labelVisibility" class="%labelPathClass" vector-effect="non-scaling-stroke"></path><text id="%labelId" dy="0.25em" class="%labelClass" visibility="%labelVisibility" style="%labelStyle"><textPath xlink:href="#%labelPathId" startOffset="50%" style="text-anchor: middle">%label</textPath></text>',phyloPic:'<image id="%phyloPicId" class="%phyloPicClass fl-imerss-clickable" xlink:href="%phyloPicUrl" height="%diameter" width="%diameter" x="%phyloPicX" y="%phyloPicY" />',segmentFooter:"</g>",taxonDisplayHeader:"<div>",taxonDisplayRow:'<div %rootAttrs><span class="fl-taxonDisplay-key">%key</span><span class="fl-taxonDisplay-value %valueClazz">%value</span></div>',taxonDisplayFooter:"</div>"},events:{changeLayoutId:null},invokers:{render:"hortis.render({that})",renderLight:"hortis.renderLight({that})",renderSegment:"hortis.renderSegment({that}, {arguments}.0, {arguments}.1)",angleScale:"hortis.angleScale({arguments}.0, {that}.model.scale)",elementToRow:"hortis.elementToRow({that}, {arguments}.0)",segmentClicked:"hortis.segmentClicked({that}, {arguments}.0)",fillColourForRow:"hortis.undocColourForRow({that}.options.parsedColours, {arguments}.0)",getMousable:"hortis.combineSelectors({that}.options.selectors.segment, {that}.options.selectors.label, {that}.options.selectors.phyloPic)",lookupTaxon:"hortis.lookupTaxon({that}.flatTree, {arguments}.0, {arguments}.1)"},modelListeners:{scale:{excludeSource:"init",func:"{that}.renderLight"},selectedId:[{namespace:"updateTaxonDisplay",excludeSource:"init",funcName:"hortis.updateTaxonDisplay",args:["{that}","{change}.value"]},{namespace:"renderLight",excludeSource:"init",func:"{that}.renderLight"}],hoverId:{excludeSource:"init",funcName:"hortis.updateTooltip",args:["{that}","{change}.value"]},rowFocus:{funcName:"hortis.updateRowFocus",args:["{that}","{change}.value","{change}.transaction"]},backClick:{path:"dom.back.click",funcName:"hortis.backTaxon",args:["{that}"]}},listeners:{"onCreate.doLayout":{func:"hortis.doLayout",args:["{that}.flatTree"]},"onCreate.computeInitialScale":{funcName:"hortis.computeInitialScale",args:["{that}"],priority:"after:doLayout"},"onCreate.boundNodes":{funcName:"hortis.boundNodes",args:["{that}","{that}.model.layoutId",!0],priority:"before:render"},"onCreate.applyPhyloMap":{funcName:"hortis.applyPhyloMap",args:["{sunburstLoader}.resources.phyloMap.parsed","{that}.flatTree","{sunburstLoader}.options.resourceOptions.terms"],priority:"before:computeInitialScale"},"onCreate.render":{func:"{that}.render",priority:"after:computeInitialScale"},"onCreate.bindSunburstMouse":{funcName:"hortis.bindSunburstMouse",args:["{that}"]},"onCreate.bindRowExpander":{funcName:"hortis.bindRowExpander",args:["{that}"]},"changeLayoutId.updateModel":"hortis.changeLayoutId({that}, {arguments}.0, {arguments}.1)"},members:{visMap:[],tree:null,flatTree:"@expand:hortis.flattenTree({that}.tree)",maxDepth:"@expand:hortis.computeMaxDepth({that}.flatTree)",index:"@expand:hortis.indexTree({that}.flatTree)"}}),hortis.capitalize=function(string){return string.charAt(0).toUpperCase()+string.slice(1)},hortis.autocompleteInputForRow=function(row){return row?hortis.labelForRow(row)+(row.commonName?" ("+row.commonName+")":""):row},hortis.autocompleteSuggestionForRow=function(row){return hortis.autocompleteInputForRow(row)+(row.childCount>1?" ("+row.childCount+" species)":"")},hortis.lookupTaxon=function(flatTree,query,maxSuggestions){maxSuggestions=maxSuggestions||1;const output=[];query=query.toLowerCase();for(let i=0;i<flatTree.length;++i){const row=flatTree[i];if(-1!==hortis.autocompleteInputForRow(row).toLowerCase().indexOf(query)&&output.push(row),output.length>=maxSuggestions)break}return 1===maxSuggestions?output[0]:output},hortis.queryAutocomplete=function(lookupTaxon,query,callback){callback(lookupTaxon(query))},hortis.confirmAutocomplete=function(that,row){row&&that.events.changeLayoutId.fire(row.id,"autocomplete")},hortis.rowToPhyloIndex=function(row){return row.rank+":"+row.iNaturalistTaxonName},hortis.colourChildren=function(row,parsed){row.lowColour=parsed.lowColour,row.highColour=parsed.highColour,row.children.forEach((function(child){hortis.colourChildren(child,parsed)}))},hortis.applyPhyloMap=function(phyloMap,rows,terms){const parsedMap=fluid.transform(phyloMap,(function(onePhylo){const togo={};if(onePhylo.pic&&(togo.phyloPicUrl=fluid.stringTemplate(onePhylo.pic,terms)),onePhylo.taxonPic&&(togo.taxonPic=fluid.stringTemplate(onePhylo.taxonPic,terms)),togo.taxonPicDescription=onePhylo.taxonPicDescription,onePhylo.colour){const parsedColour=fluid.colour.hexToArray(onePhylo.colour),hsl=fluid.colour.rgbToHsl(parsedColour);togo.lowColour=fluid.colour.hslToRgb([hsl[0],hsl[1],.2*hsl[2]+.8]),togo.highColour=fluid.colour.hslToRgb([hsl[0],hsl[1],.8*hsl[2]+.2])}return togo}));rows.forEach((function(row){const phyloIndex=hortis.rowToPhyloIndex(row),parsed=parsedMap[phyloIndex];parsed&&(row.phyloPicUrl=parsed.phyloPicUrl,row.taxonPic=parsed.taxonPic,row.taxonPicDescription=parsed.taxonPicDescription,hortis.colourChildren(row,parsed))}))},hortis.taxonDisplayLookup={iNaturalistTaxonName:"Taxon Name:",observationCount:"Observation Count:",iNaturalistObsLink:"Observation:",taxonLink:"iNaturalist Taxon:",commonName:"Common Name:",wikipediaSummary:"Wikipedia Summary",iNaturalistTaxonImage:"iNaturalist Taxon Image:",phyloPic:"Taxon Icon:",taxonPic:"Taxon Picture:",taxonPicDescription:"Taxon Picture Description:"},hortis.friendlyDisplayLookup={...hortis.taxonDisplayLookup,iNaturalistTaxonName:"Species:"},hortis.commonFields=["commonName","wikipediaSummary"],hortis.dumpRow=function(key,value,markup,extraClazz,valueClazz,options){if(value){const toLook=options?.friendlyNames?hortis.friendlyDisplayLookup:hortis.taxonDisplayLookup,keyName=key?toLook[key]||hortis.capitalize(key):"",clazz="fl-taxonDisplay-row "+(extraClazz||"");return valueClazz=valueClazz||"",fluid.stringTemplate(markup.taxonDisplayRow,{key:keyName,value:value,rootAttrs:'class="'+clazz+'"',valueClazz:valueClazz})}return""},hortis.renderDate=function(date){return new Date(date).toISOString().substring(0,10)},hortis.expandButtonMarkup='<span class="fl-taxonDisplay-expand fl-taxonDisplay-unexpanded"></span>',hortis.sourceTable={iNat:"iNaturalist",PMLS:"Pacific Marine Life Surveys",RBCM:"Royal British Columbia Museum",CMN:"Canadian Museum of Nature",BCCSN:"British Columbia Cetacean Sightings Network","Gal-Salm":"Erickson",CHU2010:"Chu and Leys (2010)",CHU2012:"Chu and Leys (2012)",Hunterston:"Hunterston Farms BioBlitz 2010"},hortis.sourceFromId=function(obsId){const colpos=obsId?obsId.indexOf(":"):-1;return-1===colpos?null:obsId.substring(0,colpos)},hortis.renderObsId=function(obsId){if("iNat"===hortis.datasetIdFromObs(obsId)){const localId=hortis.localIdFromObs(obsId);return fluid.stringTemplate('<a target="_blank" href="https://www.inaturalist.org/observations/%obsId">%obsId</a>',{obsId:localId})}return obsId},hortis.renderObsBound=function(row,prefix,markup,options){if(row[prefix+"Timestamp"]){const capPrefix="since"===prefix?"":hortis.capitalize(prefix),recordedBy=row[prefix+"RecordedBy"],catalogueNumber=row[prefix+"CatalogueNumber"],value=hortis.renderDate(row[prefix+"Timestamp"])+(recordedBy&&!options.suppressObsAuthors?" by "+recordedBy:""),row1=hortis.dumpRow(capPrefix+("since"===prefix?" Observed:":" Reported:"),value,markup),obsId=row[prefix+"ObservationId"],collection=row[prefix+"Collection"],obsIdCollection=hortis.sourceFromId(row[prefix+"ObservationId"]);let source=(hortis.sourceTable[obsIdCollection||collection]||collection)+(catalogueNumber?" ("+catalogueNumber+")":"");obsId&&"iNat"===obsIdCollection&&(source+=" observation "+hortis.renderObsId(obsId));return row1+hortis.dumpRow("Source:",source,markup)}return""},hortis.drivePlayer='<iframe frameborder="0" width="360" height="55" src="%url"></iframe>',hortis.driveToPreview=function(url){const lastSlash=url.lastIndexOf("/");return url.substring(0,lastSlash)+"/preview"},hortis.hulqValues=["food","medicinal","spiritual","material","trade","indicator"],hortis.hulqValueItem='<div class="fl-imerss-cultural-value"><div role="img" class="fld-imerss-value-%img fl-imerss-cultural-value-img"></div><div class="fld-imerss-cultural-value-text">%label</div></div>',hortis.hulqValueBlock='<div class="fl-imerss-cultural-values">%valueBlocks</div>',hortis.dumpHulqName=function(row,markup){const player=row.audioLink?fluid.stringTemplate(hortis.drivePlayer,{url:hortis.driveToPreview(row.audioLink)}):"";return hortis.dumpRow("Hul'qumi'num name",row.hulqName+player,markup)},hortis.dumpHulqValues=function(row,markup){const valueBlocks=hortis.hulqValues.map((function(value){return"1"===row[value+"Value"]?value:"missing"})).map((function(img,index){return fluid.stringTemplate(hortis.hulqValueItem,{img:img,label:hortis.hulqValues[index]})})),valueBlock=fluid.stringTemplate(hortis.hulqValueBlock,{valueBlocks:valueBlocks.join("\n")});return hortis.dumpRow("Cultural values"," ",markup,"fl-taxonDisplay-empty-header")+hortis.dumpRow("",valueBlock,markup,"fl-taxonDisplay-empty-row")},hortis.iNatExtern='<a href="%iNatLink" target="_blank" class="fl-taxonDisplay-iNat-extern">iNaturalist<span class="fl-external-link"></span></a>',hortis.imageTemplate='<div class="fl-taxonDisplay-image-holder"><div class="fl-imerss-photo" style="background-image: url(%imgUrl)"/>%iNatExtern</div></div>',hortis.idToTaxonLink=function(taxonId){return"https://www.inaturalist.org/taxa/"+taxonId},hortis.renderTaxonDisplay=function(row,markup,options){if(!row)return null;let togo=markup.taxonDisplayHeader;const dumpRow=function(keyName,value,extraClazz,options){if("wikipediaSummary"===keyName&&value){const row1=hortis.dumpRow("Wikipedia Summary",hortis.expandButtonMarkup,markup,"fld-taxonDisplay-expandable-header fl-taxonDisplay-runon-header"),row2=hortis.dumpRow("",value,markup,"fld-taxonDisplay-expandable-remainder fl-taxonDisplay-runon-remainder","fl-taxonDisplay-wikipediaSummary");togo+=row1+row2}else togo+=hortis.dumpRow(keyName,value,markup,extraClazz,void 0,options)},dumpImage=function(keyName,url,taxonId){const imageMarkup=fluid.stringTemplate(hortis.imageTemplate,{imgUrl:url,iNatExtern:taxonId?fluid.stringTemplate(hortis.iNatExtern,{iNatLink:hortis.idToTaxonLink(taxonId)}):""});togo+=imageMarkup};if(row.rank)row.iNaturalistTaxonImage&&!row.taxonPic?dumpImage(0,row.iNaturalistTaxonImage,row.iNaturalistTaxonId):row.taxonPic&&dumpImage(0,row.taxonPic),row.phyloPicUrl&&(keyName="phyloPic",url=row.phyloPicUrl,togo+=hortis.dumpRow(keyName,'<div><img alt="Taxon photo" height="150" width="150" class="fl-imerss-photo" src="'+url+'"/></div>',markup)),dumpRow(row.rank,row.taxonName||row.iNaturalistTaxonName,"fl-taxonDisplay-rank"),hortis.commonFields.forEach((function(field){dumpRow(field,row[field])})),dumpRow("taxonPicDescription",row.taxonPicDescription),dumpRow("Species:",row.childCount),dumpRow("observationCount",row.observationCount);else{row.iNaturalistTaxonImage&&!row.obsPhotoLink&&dumpImage(0,row.iNaturalistTaxonImage,row.iNaturalistTaxonId),row.species&&dumpRow("iNaturalistTaxonName",(row.taxonName||row.iNaturalistTaxonName)+(row.authority?" "+row.authority:""),"fl-taxonDisplay-rank",options),row.hulqName&&(togo+=hortis.dumpHulqName(row,markup)),dumpRow("commonName",row.commonName),row.hulqName&&options.culturalValues&&(togo+=hortis.dumpHulqValues(row,markup)),dumpRow("wikipediaSummary",row.wikipediaSummary);let obsPanel="";obsPanel+=hortis.renderObsBound(row,"first",markup,options),obsPanel+=hortis.renderObsBound(row,"last",markup,options),obsPanel+=hortis.renderObsBound(row,"since",markup,options),row.iNaturalistObsLink&&(obsPanel+=hortis.dumpRow("iNaturalistObsLink",'<a href="'+row.iNaturalistObsLink+'">'+row.iNaturalistObsLink+"</a>",markup)),obsPanel+=hortis.dumpRow("observationCount",row.observationCount,markup),togo+=hortis.dumpRow("Observation Data",hortis.expandButtonMarkup,markup,"fld-taxonDisplay-expandable-header"),togo+=hortis.dumpRow("",obsPanel,markup,"fld-taxonDisplay-expandable-remainder fl-taxonDisplay-runon-remainder"),row.obsPhotoLink&&dumpImage(0,row.obsPhotoLink)}var keyName,url;return togo+=markup.taxonDisplayFooter,togo},hortis.bindRowExpander=function(that){that.container.on("click",".fl-taxonDisplay-expand",(function(e){const target=$(e.target);target.toggleClass("fl-taxonDisplay-expanded"),target.toggleClass("fl-taxonDisplay-unexpanded");const showing=target.hasClass("fl-taxonDisplay-expanded"),header=target.closest(".fld-taxonDisplay-expandable-header");header.toggleClass("fl-taxonDisplay-expanded",showing);const siblings=header.parent().children(),ownIndex=header.index(),next=$(siblings[ownIndex+1]);next.hasClass("fld-taxonDisplay-expandable-remainder")&&next[showing?"show":"hide"]()}))},hortis.updateTaxonDisplay=function(that,id){const content=id?hortis.renderTaxonDisplay(that.index[id],that.options.markup,that.options):null,taxonDisplay=that.locate("taxonDisplay");content&&(taxonDisplay.empty(),taxonDisplay.html(content))},hortis.tooltipTemplate='<div class="fl-imerss-tooltip"><div class="fl-imerss-photo" style="background-image: url(%imgUrl)"></div><div class="fl-text"><b>%taxonRank:</b> %taxonNames</div></div>',hortis.renderTooltip=function(row){const terms={imgUrl:row.iNaturalistTaxonImage||""};row.rank?terms.taxonRank=hortis.capitalize(row.rank):terms.taxonRank="Species";const names=[row.taxonName||row.iNaturalistTaxonName,row.commonName,row.hulqName].filter((name=>name));return terms.taxonNames=names.join(" / "),fluid.stringTemplate(hortis.tooltipTemplate,terms)},hortis.isInDocument=function(node){const dokkument=fluid.getDocument(node),container=node[0];return $.contains(dokkument,container)||dokkument===container},hortis.clearAllTooltips=function(that){hortis.clearTooltip(that),$(".ui-tooltip").remove(),that.applier.change("hoverId",null)},hortis.clearTooltip=function(that){const tooltipTarget=that.tooltipTarget;tooltipTarget&&(that.tooltipTarget=null,hortis.isInDocument(tooltipTarget)?(console.log("Cleared tooltip"),tooltipTarget.tooltip("destroy")):(console.log("Tooltip target lost from document"),hortis.clearAllTooltips(that)))},hortis.updateTooltip=function(that,id){const content=id?hortis.renderTooltip(that.index[id],that.options.markup):null,target=$(that.mouseEvent.target);hortis.clearTooltip(that),content?(console.log("Opening tooltip for node "+id),target.tooltip({items:target}),target.tooltip("option","content",content||""),target.tooltip("option","track",!0),target.tooltip("open",that.mouseEvent),that.tooltipTarget=target):that.mouseEvent=null},hortis.isAtRoot=function(that,layoutId){return layoutId===that.flatTree[0].id},hortis.bindSunburstMouse=function(that){const svg=that.locate("svg"),mousable=that.getMousable();svg.on("click",mousable,(function(){const id=hortis.elementToId(this);let row=that.index[id];!hortis.isAboveLayoutRoot(row,that)&&that.index[id].phyloPicUrl&&(row=that.flatTree[0]),that.segmentClicked(row)})),svg.on("mouseenter",mousable,(function(e){const id=hortis.elementToId(this);that.mouseEvent=e,that.applier.change("hoverId",id)})),svg.on("mouseleave",mousable,(function(){that.applier.change("hoverId",null)}))},hortis.parseColours=function(colours){return fluid.transform(colours,(function(colour){return fluid.colour.hexToArray(colour)}))},hortis.angleScale=function(index,scale){const angle=2*Math.PI*(index-scale.left)/(scale.right-scale.left);return fluid.transforms.limitRange(angle,{min:0,max:2*Math.PI})},hortis.outRings=function(array,count,width){let lastRing=array[array.length-1];for(let i=0;i<count;++i)lastRing+=width,array.push(lastRing)},hortis.makeRadiusScale=function(innerRings,visRings,totalRings,scaleConfig,isAtRoot){console.log("makeRadiusScale with innerRings ",innerRings," visRings ",visRings);const togo=[0];if(isAtRoot&&scaleConfig.rootRadii)scaleConfig.rootRadii.forEach((function(radius){hortis.outRings(togo,1,1e3*radius)})),hortis.outRings(togo,1+totalRings-togo.length,0);else{const outerRings=Math.floor((1-visRings*scaleConfig.innerDepth)/(scaleConfig.outerDepth-scaleConfig.innerDepth));console.log("outerRings determined as ",outerRings);const middleRings=visRings-outerRings-innerRings,middleDepth=(1-outerRings*scaleConfig.outerDepth-innerRings*scaleConfig.innerDepth)/middleRings;hortis.outRings(togo,innerRings,1e3*scaleConfig.innerDepth),hortis.outRings(togo,middleRings,1e3*middleDepth),hortis.outRings(togo,outerRings,1e3*scaleConfig.outerDepth),hortis.outRings(togo,totalRings-visRings,0)}return console.log("makeRadiusScale returning ",togo),togo},hortis.boundNodes=function(that,layoutId,isInit){console.log("boundNodes beginning for node ",layoutId);const layoutRoot=that.index[layoutId],visMap=[];for(let i=0;i<that.flatTree.length;++i)visMap[i]=0;for(let visUp=layoutRoot;visUp;visUp=visUp.parent)visMap[visUp.flatIndex]=1;let depth,totalNodes=1,parents=[layoutRoot];for(depth=layoutRoot.depth;depth<that.maxDepth;++depth){let directChildren=0;if(parents.forEach((function(parent){directChildren+=parent.children.length})),!(directChildren>0&&totalNodes+directChildren<that.options.scaleConfig.maxNodes))break;{const newParents=[];parents.forEach((function(parent){parent.children.forEach((function(child){visMap[child.flatIndex]=1})),newParents.push.apply(newParents,parent.children)})),parents=newParents,totalNodes+=directChildren}}const isAtRoot=hortis.isAtRoot(that,layoutId),radiusScale=hortis.makeRadiusScale(layoutRoot.depth,depth+1,that.maxDepth+1,that.options.scaleConfig,isAtRoot),togo={visMap:visMap,scale:{left:layoutRoot.leftIndex,right:layoutRoot.leftIndex+layoutRoot.childCount,radiusScale:radiusScale}};return console.log("boundNodes returning ",togo),isInit&&(that.visMap=visMap,that.applier.change("scale",togo.scale)),togo},hortis.isClickable=function(row){return row.children.length>0||row.iNaturalistLink||row.iNaturalistTaxonId},hortis.elementClass=function(row,isSelected,styles,baseStyle){return styles[baseStyle]+(hortis.isClickable(row)?" "+styles.clickable:"")+(isSelected?" "+styles.layoutRoot:"")},hortis.elementStyle=function(attrs,elementType){const opacity=void 0===attrs.opacity?"":" opacity: "+attrs.opacity+";";return"segment"===elementType?"fill: "+attrs.fillColour+";"+opacity:opacity},hortis.phyloPicAttrMap={visibility:"visibility",x:"phyloPicX",y:"phyloPicY",height:"diameter",width:"diameter"},hortis.renderLight=function(that){that.flatTree.forEach((function(row,index){if(that.visMap[index]||that.oldVisMap&&that.oldVisMap[index]){const attrs=hortis.attrsForRow(that,row);attrs.fillColour=that.fillColourForRow(row);const isSelected=row.id===that.model.selectedId,segment=fluid.byId("hortis-segment:"+row.id);segment&&(segment.setAttribute("d",attrs.path),segment.setAttribute("visibility",attrs.visibility),segment.setAttribute("class",hortis.elementClass(row,isSelected,that.options.styles,"segment")),segment.setAttribute("style",hortis.elementStyle(attrs,"segment")));const labelPath=fluid.byId("hortis-labelPath:"+row.id);labelPath&&(labelPath.setAttribute("d",attrs.textPath),labelPath.setAttribute("visibility",attrs.labelVisibility));const label=fluid.byId("hortis-label:"+row.id);label&&(label.setAttribute("visibility",attrs.labelVisibility),label.setAttribute("class",hortis.elementClass(row,isSelected,that.options.styles,"label")),label.setAttribute("style",hortis.elementStyle(attrs,"label")));const pic=fluid.byId("hortis-phyloPic:"+row.id);pic&&fluid.each(hortis.phyloPicAttrMap,(function(source,target){pic.setAttribute(target,attrs[source])}))}}))},hortis.renderSVGTemplate=function(template,terms){return fluid.stringTemplate(template,terms)},hortis.interpolateModels=function(f,m1,m2){return fluid.transform(m1,(function(value,key){return"number"==typeof value?(1-f)*value+f*m2[key]:fluid.isPlainObject(value)?hortis.interpolateModels(f,value,m2[key]):value}))},hortis.undocColourForRow=function(parsedColours,row){const undocFraction=1-row.undocumentedCount/row.childCount,interp=fluid.colour.interpolate(undocFraction,row.highColour||parsedColours.highColour,row.lowColour||parsedColours.lowColour);return fluid.colour.arrayToString(interp)},hortis.obsColourForRow=function(parsedColours,row,rootRow){const fraction=Math.pow(row.observationCount/rootRow.observationCount,.2),interp=fluid.colour.interpolate(fraction,row.lowColour||parsedColours.lowColour,row.highColour||parsedColours.highColour),focusProp=row.focusCount/row.childCount,interp2=fluid.colour.interpolate(focusProp,parsedColours.unfocusedColour,interp);return fluid.colour.arrayToString(interp2)},hortis.pathFromRoot=function(row){const togo=[];for(;row;)togo.unshift(row),row=row.parent;return togo},hortis.lcaRoot=function(parents){let lcaRoot;for(let i=0;;++i){let commonValue=null;for(const key in parents){const seg=parents[key][i];if(void 0===seg){commonValue=null;break}if(null===commonValue)commonValue=seg;else if(commonValue!==seg){commonValue=null;break}}if(null===commonValue)break;lcaRoot=commonValue}return lcaRoot},hortis.updateRowFocus=function(that,rowFocus,transaction){const flatTree=that.flatTree,focusAll=$.isEmptyObject(rowFocus);for(let i=flatTree.length-1;i>=0;--i){const row=flatTree[i];let focusCount;focusCount=focusAll||rowFocus[row.id]?row.childCount:row.children.reduce((function(sum,child){return sum+child.focusCount}),0),row.focusCount=focusCount}let target;if(focusAll)target=flatTree[0];else{const parents=fluid.transform(rowFocus,(function(troo,key){return hortis.pathFromRoot(that.index[key])})),lca=hortis.lcaRoot(parents);target=1===Object.keys(parents).length?lca.parent:lca}void 0!==target.leftIndex&&(transaction.fullSources.map&&focusAll||that.events.changeLayoutId.fire(target.id,"rowFocus"))},hortis.elementToId=function(element){const id=element.id;return id.substring(id.indexOf(":")+1)},hortis.elementToRow=function(that,element){const id=hortis.elementToId(element);return that.index[id]},hortis.backTaxon=function(that){that.model.historyIndex>1&&(that.applier.change("historyIndex",that.model.historyIndex-1),that.events.changeLayoutId.fire(that.taxonHistory[that.model.historyIndex-1],"history"))},hortis.changeLayoutId=function(that,layoutId,source){console.log("changeLayoutId to layoutId ",layoutId),that.applier.change("selectedId",layoutId),"history"!==source&&(that.taxonHistory[that.model.historyIndex]=layoutId,that.applier.change("historyIndex",that.model.historyIndex+1));const row=that.index[layoutId];if(0===row.children.length&&(layoutId="autocomplete"===source?row.parent.id:that.model.layoutId),layoutId!==that.model.layoutId||source){if(that.model.layoutId)return hortis.beginZoom(that,layoutId);that.applier.change("layoutId",layoutId)}return fluid.promise().resolve()},hortis.beginZoom=function(that,rowId){that.container.stop(!0,!0),hortis.clearAllTooltips(that);const initialScale=fluid.copy(that.model.scale),newBound=hortis.boundNodes(that,rowId);newBound.scale.zoomProgress=1,console.log("Begin zoom to rowId "+rowId);const togo=fluid.promise();return that.oldVisMap=that.visMap,that.visMap=newBound.visMap,that.render(),that.container.animate({zoomProgress:1},{easing:"swing",duration:that.model.visible?that.options.zoomDuration:0,step:function(zoomProgress){const interpScale=hortis.interpolateModels(zoomProgress,initialScale,newBound.scale);that.applier.change("scale",interpScale)},complete:function(){console.log("Zoom complete"),delete that.oldVisMap,that.container[0].zoomProgress=0,that.applier.change("layoutId",rowId),that.applier.change("scale.zoomProgress",0),that.render(),togo.resolve()}}),togo},hortis.segmentClicked=function(that,row){that.events.changeLayoutId.fire(row.id)},hortis.nameOverrides={Chromista:"Chromists"},hortis.labelForRow=function(row,commonNames){let name=commonNames&&row.commonName?row.commonName:row.iNaturalistTaxonName;return row.hulqName&&(name+=" - "+row.hulqName),name=hortis.nameOverrides[row.iNaturalistTaxonName]||name,hortis.capitalize(name)},hortis.isAboveLayoutRoot=function(row,that){const layoutId=that.model.layoutId;let layoutRow=that.index[layoutId];for(;layoutRow;){if(layoutRow.id===row.id)return!1;layoutRow=layoutRow.parent}return!0},hortis.attrsForRow=function(that,row){let leftAngle=that.angleScale(row.leftIndex),rightAngle=that.angleScale(row.leftIndex+row.childCount),midAngle=(leftAngle+rightAngle)/2,innerRadius=that.model.scale.radiusScale[row.depth],outerRadius=that.model.scale.radiusScale[row.depth+1];const isAboveLayoutRoot=hortis.isAboveLayoutRoot(row,that),isComplete=fluid.model.isSameValue(leftAngle,0)&&fluid.model.isSameValue(rightAngle,2*Math.PI),isCircle=fluid.model.isSameValue(innerRadius,0)&&isComplete,isVisible=!fluid.model.isSameValue(leftAngle,rightAngle)&&!fluid.model.isSameValue(innerRadius,outerRadius),isOuterSegment=fluid.model.isSameValue(outerRadius-innerRadius,1e3*that.options.scaleConfig.outerDepth),label=hortis.labelForRow(row,that.model.commonNames),outerLength=outerRadius*(rightAngle-leftAngle),midRadius=isCircle||!isAboveLayoutRoot?0:(innerRadius+outerRadius)/2,radius=outerRadius-midRadius;fluid.model.isSameValue(leftAngle,Math.PI)&&(leftAngle+=1e-4);const labelVisibility=isOuterSegment?outerLength>45:outerLength>22*label.length,togo={visibility:isVisible?"visible":"hidden",labelVisibility:isVisible&&labelVisibility?"visible":"hidden",label:hortis.encodeHTML(label),phyloPicX:Math.cos(midAngle)*midRadius-radius,phyloPicY:-Math.sin(midAngle)*midRadius-radius,phyloPicUrl:row.phyloPicUrl,diameter:2*radius};if(isComplete?(togo.textPath=hortis.circularTextPath(outerRadius),togo.path=isCircle?hortis.circularPath(outerRadius):hortis.annularPath(innerRadius,outerRadius)):(togo.textPath=isOuterSegment?hortis.linearTextPath(leftAngle,rightAngle,innerRadius,outerRadius):hortis.segmentTextPath(leftAngle,rightAngle,outerRadius),togo.path=hortis.segmentPath(leftAngle,rightAngle,innerRadius,outerRadius)),that.oldVisMap){const index=row.flatIndex;!that.oldVisMap[index]&&that.visMap[index]?togo.opacity=that.model.scale.zoomProgress:that.oldVisMap[index]&&!that.visMap[index]&&(togo.opacity=1-that.model.scale.zoomProgress)}return togo},hortis.renderSegment=function(that,row){const isSelected=row.id===that.model.selectedId,terms=$.extend({id:"hortis-segment:"+row.id,labelPathId:"hortis-labelPath:"+row.id,labelId:"hortis-label:"+row.id,phyloPicId:"hortis-phyloPic:"+row.id,clazz:hortis.elementClass(row,isSelected,that.options.styles,"segment"),labelPathClass:that.options.styles.labelPath,phyloPicClass:that.options.styles.phyloPic,labelClass:hortis.elementClass(row,isSelected,that.options.styles,"label"),fillColour:that.fillColourForRow(row)},hortis.attrsForRow(that,row));terms.style=hortis.elementStyle(terms,"segment"),terms.labelStyle=hortis.elementStyle(terms,"label");const togo=[{position:0,markup:hortis.renderSVGTemplate(that.options.markup.segment,terms)},{position:2,markup:hortis.renderSVGTemplate(that.options.markup.label,terms)}];return terms.phyloPicUrl&&togo.push({position:1,markup:hortis.renderSVGTemplate(that.options.markup.phyloPic,terms)}),togo},hortis.elementComparator=function(element1,element2){return element1.position-element2.position},hortis.render=function(that){let markup=that.options.markup.segmentHeader,elements=[];for(let i=0;i<that.flatTree.length;++i)(that.visMap[i]||that.oldVisMap&&that.oldVisMap[i])&&(elements=elements.concat(that.renderSegment(that.flatTree[i])));elements.sort(hortis.elementComparator),markup+=fluid.getMembers(elements,"markup").join(""),markup+=that.options.markup.segmentFooter;const container=that.locate("svg");container.empty(),hortis.renderSVGElement(markup,container)},hortis.depthComparator=function(rowa,rowb){return rowa.depth-rowb.depth},hortis.flattenTree=function(tree){const flat=[];return flat.push(tree),hortis.flattenTreeRecurse(tree,flat),flat.sort(hortis.depthComparator),flat.forEach((function(row,flatIndex){row.flatIndex=flatIndex})),flat},hortis.indexTree=function(flatTree){const index={};return flatTree.forEach((function(row){index[row.id]=row})),index},hortis.flattenTreeRecurse=function(tree,toAppend){tree.children.forEach((function(child){child.parent=tree,toAppend.push(child),hortis.flattenTreeRecurse(child,toAppend)}))},hortis.doLayout=function(flatTree){fluid.each(flatTree,(function(node){0===node.depth&&(node.leftIndex=0);let thisLeft=node.leftIndex;node.children.forEach((function(child){child.leftIndex=thisLeft,thisLeft+=child.childCount}))}))},hortis.computeMaxDepth=function(flatTree){return flatTree[flatTree.length-1].depth},hortis.doInitialQuery=function(that){const toSelect=that.options.queryOnStartup||that.options.selectOnStartup;return toSelect?that.lookupTaxon(toSelect):that.flatTree[0]},hortis.computeInitialScale=function(that){const root=hortis.doInitialQuery(that);that.events.changeLayoutId.fire(root.id)};var hortis=fluid.registerNamespace("hortis");fluid.defaults("hortis.autocomplete",{gradeNames:["fluid.newViewComponent"],listeners:{"onCreate.render":"hortis.autocomplete.render"},events:{onConfirm:null},maxSuggestions:20,invokers:{query:"hortis.autocomplete.emptyQuery",renderSuggestion:"fluid.identity",renderInputValue:"fluid.identity"},widgetOptions:{displayMenu:"overlay"}}),hortis.autocomplete.emptyQuery=function(query,callback){callback("")},hortis.autocomplete.render=function(that){var widgetOptions=$.extend({element:that.container[0],id:that.options.id,source:that.query,templates:{suggestion:that.renderSuggestion,inputValue:that.renderInputValue},onConfirm:that.events.onConfirm.fire},that.options.widgetOptions);that.widget=accessibleAutocomplete(widgetOptions),$("input",that.container).attr("spellcheck",!1)},fluid.registerNamespace("fluid.colour"),fluid.colour.hexIndirect={3:"001122",4:"00112233",6:"012345",8:"01234567"},fluid.colour.hexToArray=function(hex){"#"!==hex.charAt(0)&&fluid.fail("hex colour must begin with # - "+hex),hex=hex.substring(1);var digits=fluid.transform(hex.split(""),(function(ch){return parseInt(ch,16)})),indirect=fluid.colour.hexIndirect[hex.length];indirect||fluid.fail("Unsupported number of hex digits in "+hex+": can only supply "+Object.keys(fluid.colour.hexIndirect).join(", ")+" digits");for(var array=[],i=0;i<indirect.length;i+=2){var colour=(16*digits[indirect[i]]+digits[indirect[i+1]])/(6===i?255:1);array.push(colour)}return array},fluid.colour.arrayToString=function(array){return(3===array.length?"rgb(":"rgba(")+array.join(", ")+")"},fluid.colour.interpolate=function(f,c1,c2){return fluid.transform([(1-f)*c1[0]+f*c2[0],(1-f)*c1[1]+f*c2[1],(1-f)*c1[2]+f*c2[2]],Math.round)},fluid.colour.average=function(ca){return ca.reduce((function(total,c){return total[0]+=c[0],total[1]+=c[1],total[2]+=c[2],total}),[0,0,0]).map((function(e){return e/ca.length}))},fluid.colour.rgbToHsl=function(c){var h,s,r=c[0]/255,g=c[1]/255,b=c[2]/255,max=Math.max(r,g,b),min=Math.min(r,g,b),l=(max+min)/2;if(max===min)h=s=0;else{var d=max-min;s=l>.5?d/(2-max-min):d/(max+min),h=max===r?(g-b)/d+(g<b?6:0):max===g?(b-r)/d+2:(r-g)/d+4,h/=6}return[h,s,l]},fluid.colour.hue2rgb=function(p,q,t){return t<0?t+=1:t>1&&(t-=1),t<1/6?p+6*(q-p)*t:t<.5?q:t<2/3?p+(q-p)*(2/3-t)*6:p},fluid.colour.hslToRgb=function(hsl){var r,g,b,h=hsl[0],s=hsl[1],l=hsl[2];if(0===s)r=g=b=l;else{var q=l<.5?l*(1+s):l+s-l*s,p=2*l-q;r=fluid.colour.hue2rgb(p,q,h+1/3),g=fluid.colour.hue2rgb(p,q,h),b=fluid.colour.hue2rgb(p,q,h-1/3)}return[Math.round(255*r),Math.round(255*g),Math.round(255*b)]};var hortis=fluid.registerNamespace("hortis");L.Map.include({latLngToLayerPoint:function(latlng){const togo=this.project(L.latLng(latlng))._subtract(this.getPixelOrigin());return togo.x=fluid.roundToDecimal(togo.x,3),togo.y=fluid.roundToDecimal(togo.y,3),togo}}),fluid.defaults("hortis.leafletMap",{gradeNames:["fluid.viewComponent","{sunburstLoader}.options.mapFlavourGrade"],selectors:{map:".fld-imerss-map",tooltip:".fld-imerss-map-tooltip"},mergePolicy:{"members.map":"replace"},members:{toPlot:{},map:"@expand:L.map({that}.dom.map.0, {that}.options.mapOptions)"},datasets:{},selectionTransactionSource:null,model:{mapInitialised:"@expand:{that}.events.buildMap.fire()",datasetEnabled:"@expand:hortis.datasetEnabledModel({that}.options.datasets)",mapBlockTooltipId:null},events:{buildMap:null,clearMapSelection:null},markup:{tooltip:'<div class="fld-imerss-map-tooltip"></div>',grid:'<div class="fld-imerss-map-grid"></div>',tooltipHeader:"<table>",tooltipRow:'<tr><td class="fl-taxonDisplay-key">%key: </td><td class="fl-taxonDisplay-value">%value</td>',tooltipFooter:"</table>"},listeners:{"buildMap.bindZoom":"hortis.leafletMap.bindZoom({that})","buildMap.fitBounds":"hortis.leafletMap.fitBounds({that}, {that}.options.fitBounds)","buildMap.createTooltip":"hortis.leafletMap.createTooltip({that}, {that}.options.markup)","buildMap.addTiles":"hortis.leafletMap.addTileLayer({that}.map, {that}.options.tileOptions)","clearMapSelection.mapBlock":{changePath:"mapBlockTooltipId",value:null,source:"{arguments}.0"}},invokers:{acquireZoom:"hortis.leafletMap.acquireZoom({that})",fitBounds:"hortis.leafletMap.fitBounds({that}, {arguments}.0, {arguments}.1)"},dynamicComponents:{geoJSONLayers:{sources:"{that}.options.geoJSONMapLayers",type:"hortis.geoJSONMapLayer",options:{layer:"{source}"}}},mapOptions:{zoomSnap:.1},heatLow:"#ffffff"}),fluid.defaults("hortis.leafletMapWithWE",{selectors:{WEOverlay:".fld-imerss-we-overlay"},listeners:{"buildMap.bindWEClick":"hortis.leafletMap.bindWEClick({that})"}}),hortis.leafletMap.bindWEClick=function(map){const overlay=map.locate("WEOverlay");overlay.click((function(){map.map.flyToBounds(hortis.projectBounds.Pepiowelh,{duration:2}),overlay.css("opacity",0),overlay.css("pointer-events","none")}))},hortis.leafletMap.acquireZoom=function(map){map.applier.change("zoom",map.map.getZoom())},hortis.leafletMap.bindZoom=function(map){const leafletMap=map.map;leafletMap.on("zoomend",(function(){map.acquireZoom()})),leafletMap.on("moveend",(function(){console.log("Bounds now ",leafletMap.getBounds())}))},fluid.defaults("hortis.streetmapTiles",{tileOptions:{tileUrl:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",tileAttribution:'&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'}}),fluid.defaults("hortis.GBIFTiles",{tileOptions:{tileUrl:"https://tile.gbif.org/3857/omt/{z}/{x}/{y}@1x.png?style=gbif-classic",tileAttribution:'&copy <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors, © <a href="https://openmaptiles.org/">OpenMapTiles</a>, <a href="/citation-guidelines">GBIF</a>'}}),fluid.defaults("hortis.MtbTiles",{tileOptions:{tileUrl:"http://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.png",tileAttribution:'&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors &amp; USGS'}}),hortis.leafletMap.addTileLayer=function(map,tileOptions){tileOptions&&tileOptions.tileUrl&&L.tileLayer(tileOptions.tileUrl,{attribution:tileOptions.tileAttribution}).addTo(map)},hortis.datasetEnabledModel=function(datasets){return fluid.transform(datasets,(function(){return!0}))},fluid.defaults("hortis.geoJSONMapLayer",{gradeNames:"fluid.component",style:{color:"black",weight:1},listeners:{"onCreate.applyLayer":"hortis.applyGeoJSONMapLayer({that}, {hortis.leafletMap})"}}),hortis.applyGeoJSONMapLayer=function(mapLayer,map){L.geoJSON(mapLayer.options.layer,{style:mapLayer.options.style}).addTo(map.map)},hortis.leafletMap.fitBounds=function(map,fitBounds){fitBounds&&(map.map.fitBounds(fitBounds),map.acquireZoom())},hortis.leafletMap.createTooltip=function(that,markup){const tooltip=$(markup.tooltip).appendTo(that.locate("map"));tooltip.hide(),that.map.createPane("hortis-tooltip",tooltip[0]);const container=that.map.getContainer();$(container).on("click",(function(event){event.target===container&&that.events.clearMapSelection.fire()})),$(document).on("click",(function(event){!event.target.closest(".fld-imerss-nodismiss-map")&&event.target.closest("body")&&that.events.clearMapSelection.fire()}))},hortis.projectBounds={Galiano:[[48.855,-123.65],[49.005,-123.25]],Valdes:[[49,-123.798],[49.144,-123.504]],Xetthecum:[[48.93713,-123.511],[48.9511,-123.498]],Pepiowelh:[[48.565,-123.1575],[48.598,-123.1266]],HoweSound:[[49.16,-124.281],[50.17,-122.05]],SalishSea:[[47.568,-124.2],[49.134,-122.059]]},fluid.defaults("hortis.sunburstLoaderWithMap",{gradeNames:"hortis.sunburstLoader",selectors:{mapHolder:".fld-imerss-map-holder"},events:{sunburstLoaded:null},mapBounds:hortis.projectBounds.Galiano,mapGrades:[],mapFlavourGrade:"hortis.leafletMap.withGrid",markupTemplate:"%resourceBase/html/imerss-viz-map.html",distributeOptions:{sunburstLoaded:{target:"{that sunburst}.options.listeners.onCreate",record:"{hortis.sunburstLoaderWithMap}.events.sunburstLoaded.fire"},flatTree:{target:"{that quantiser}.options.members.flatTree",record:"@expand:fluid.identity({sunburst}.flatTree)"},mapGrades:{target:"{that map}.options.gradeNames",source:"{that}.options.mapGrades"}},components:{map:{type:"hortis.leafletMap",container:"{sunburstLoaderWithMap}.dom.mapHolder",createOnEvent:"sunburstLoaded",options:{gradeNames:"hortis.mapWithSunburst",fitBounds:"{hortis.configHolder}.options.mapBounds",showObsListInTooltip:"{hortis.configHolder}.options.showObsListInTooltip"}}}}),fluid.defaults("hortis.scrollyMapLoader",{gradeNames:"hortis.sunburstLoaderWithMap",mapFlavourGrade:"hortis.leafletMap.withBareRegions",selectors:{mapHolder:"{sunburstLoader}.container"},markupTemplate:"%resourceBase/html/imerss-viz-map-scrolly.html"}),fluid.defaults("hortis.svgPatternLoader",{svgPatterns:"%resourceBase/html/xetthecum-patterns.html",resources:{svgPatterns:{url:"{that}.options.svgPatterns",dataType:"text"}},listeners:{"onResourcesLoaded.injectPatterns":{funcName:"hortis.injectSvgPatterns",args:["{svgPatternLoader}.resources.svgPatterns.resourceText","{that}.options.resourceBase","{that}.container"]}}}),hortis.injectSvgPatterns=function(patternText,resourceBase,container){const expanded=patternText.replace(/%resourceBase/g,resourceBase),patterns=$(expanded);container.append(patterns)},fluid.defaults("hortis.mapLoaderWithoutSunburst",{gradeNames:"hortis.sunburstLoaderWithMap",markupTemplate:"%resourceBase/html/imerss-viz-map-only.html",components:{sunburst:{options:{model:{visible:!1},components:{autocomplete:{type:"fluid.emptySubcomponent"},tabs:{type:"fluid.emptySubcomponent"},checklist:{type:"fluid.emptySubcomponent"}}}}}}),fluid.defaults("hortis.mapWithSunburst",{modelListeners:{mapFocusedTooltipToSunburst:{path:"{map}.model.mapBlockTooltipId",func:"hortis.mapBlockToFocusedTaxa",args:["{change}.value","{map}","{sunburst}"]}},datasets:"{sunburst}.viz.datasets",geoJSONMapLayers:"{sunburstLoaderWithMap}.options.geoJSONMapLayers"}),hortis.mapBlockToFocusedTaxa=function(mapBlockTooltipId,map,sunburst){const togo={};if(mapBlockTooltipId){const bucket=map.toPlot[mapBlockTooltipId];bucket&&fluid.each(bucket.byTaxonId,(function(obs,taxonId){togo[taxonId]=!0}))}const source=map.options.selectionTransactionSource,trans=sunburst.applier.initiate(source);trans.change("rowFocus",null,"DELETE",source),trans.change("rowFocus",togo,null,source),trans.commit()},hortis.WGS84a=6378137,hortis.WGS84b=6356752.3142,hortis.WGS84e2=(hortis.WGS84a*hortis.WGS84a-hortis.WGS84b*hortis.WGS84b)/(hortis.WGS84a*hortis.WGS84a),hortis.longitudeLength=function(latitude){const latrad=Math.PI*latitude/180,sinrad=Math.sin(latrad);return Math.PI*hortis.WGS84a*Math.cos(latrad)/(180*Math.sqrt(1-hortis.WGS84e2*sinrad*sinrad))},hortis.latitudeLength=function(latitude){const latrad=Math.PI*latitude/180,sinrad=Math.sin(latrad);return Math.PI*hortis.WGS84a*(1-hortis.WGS84e2)/(180*Math.pow(1-hortis.WGS84e2*sinrad*sinrad,1.5))},hortis.longToLat=function(lng,lat){return lng*hortis.longitudeLength(lat)/hortis.latitudeLength(lat)},hortis.quantiserDataset=function(){return{maxCount:0,totalCount:0,buckets:{},byTaxonId:{}}};var hortis=fluid.registerNamespace("hortis");hortis.intersect=function(target,source){fluid.each(target,(function(value,key){key in source||delete target[key]}))},hortis.combineDatasets=function(enabledList,quantiserDatasets){let intersect;const union={obsCount:0,buckets:{},byTaxonId:{}};return enabledList.forEach((function(enabled){const dataset=quantiserDatasets[enabled];intersect?(hortis.intersect(intersect.buckets,dataset.buckets),hortis.intersect(intersect.byTaxonId,dataset.byTaxonId)):intersect={buckets:fluid.extend({},dataset.buckets),byTaxonId:fluid.extend({},dataset.byTaxonId)},fluid.extend(union.buckets,dataset.buckets),fluid.extend(union.byTaxonId,dataset.byTaxonId),union.obsCount+=dataset.totalCount})),{intersect:intersect,union:union}},hortis.renderDatasetControls=function(datasetEnabled,squareSide,datasets,quantiser,indexVersion){console.log("renderDatasetControls executing for indexVersion "+indexVersion);const togo=[{type:"hortis.datasetControlHeader"}];fluid.each(datasets,(function(dataset,datasetId){togo.push({type:"hortis.datasetControl",datasetId:datasetId,dataset:dataset,quantiserDataset:quantiser.datasets[datasetId]})}));const enabledList=fluid.transforms.setMembershipToArray(datasetEnabled),createFooter=function(prefix,dataset){prefix?(hortis.quantiser.datasetToSummary(dataset,squareSide),dataset.obsCount="Union"===prefix?dataset.obsCount:""):dataset.taxaCount=dataset.area=dataset.obsCount="",togo.push(fluid.extend({type:"hortis.datasetControlFooter",text:prefix?prefix+" of "+enabledList.length+" datasets":""},dataset))};if(enabledList.length>1&&Object.keys(quantiser.datasets).length>0){const combinedDatasets=hortis.combineDatasets(enabledList,quantiser.datasets);createFooter("Intersection",combinedDatasets.intersect),createFooter("Union",combinedDatasets.union)}else createFooter("",{}),createFooter("",{});return togo},fluid.defaults("hortis.datasetControlBase",{gradeNames:"fluid.containerRenderingView",parentContainer:"{leafletMap}.dom.datasetControls"}),fluid.defaults("hortis.datasetControlHeader",{gradeNames:"hortis.datasetControlBase",markup:{container:'<tr class="fld-imerss-dataset-control"><td fl-imerss-dataset-legend-column></td><td fl-imerss-dataset-checkbox-column></td><td fl-imerss-dataset-name-column></td>%extraColumns</tr>',cell:'<td class="%columnClass">%text</td>'},invokers:{renderMarkup:"hortis.datasetControl.renderMarkup({that}.options.markup, true)"}}),fluid.defaults("hortis.datasetControl",{gradeNames:"hortis.datasetControlBase",selectors:{legend:".fld-imerss-dataset-legend",enable:".fld-imerss-dataset-checkbox",name:".fld-imerss-dataset-name"},datasetId:"{source}.datasetId",model:{datasetEnabled:!0},modelRelay:{checkbox:{source:"dom.enable.value",target:"datasetEnabled"},name:{source:"datasetControl.dataset.name",target:"dom.name.text"},datasetEnabled:{target:"datasetEnabled",source:{context:"hortis.leafletMap",segs:["datasetEnabled","{that}.options.datasetId"]}},colour:{source:"datasetControl.dataset.colour",target:"dom.legend.style.backgroundColor"}},invokers:{renderMarkup:"hortis.datasetControl.renderMarkup({that}.options.markup, false, {that}.model.dataset, {quantiser}.datasets, {that}.options.datasetId)"},markup:{container:'<tr class="fld-imerss-dataset-control"><td fl-imerss-dataset-legend-column><span class="fld-imerss-dataset-legend"></span></td><td fl-imerss-dataset-checkbox-column><input class="fld-imerss-dataset-checkbox" type="checkbox" value="true"/></td><td fl-imerss-dataset-name-column><span class="fld-imerss-dataset-name"></span></td>%extraColumns</tr>',cell:'<td class="%columnClass">%text</td>'}}),fluid.defaults("hortis.datasetControlFooter",{gradeNames:"hortis.datasetControlBase",selectors:{text:".fl-imerss-dataset-text",obsCount:".fl-imerss-dataset-obs",taxaCount:".fl-imerss-dataset-taxa",area:".fl-imerss-dataset-area"},markup:{container:'<tr><td></td><td></td><td class="fl-imerss-dataset-text"></td><td class="fl-imerss-dataset-obs"></td><td class="fl-imerss-dataset-taxa"></td></tr>'},modelRelay:{text:{source:"datasetControl.text",target:"dom.text.text"},obsCount:{source:"datasetControl.obsCount",target:"dom.obsCount.text"},taxaCount:{source:"datasetControl.taxaCount",target:"dom.taxaCount.text"}}}),hortis.datasetControl.columnNames={totalCount:{name:"Observations",clazz:"fl-imerss-obs-count-column"},taxaCount:{name:"Taxa",clazz:"fl-imerss-taxa-count-column"}},hortis.datasetControl.renderExtraColumns=function(markup,isHeader,dataset,quantiserDataset){const extraColumns=fluid.transform(hortis.datasetControl.columnNames,(function(columnInfo,key){return fluid.stringTemplate(markup,{columnClass:columnInfo.clazz,text:isHeader?columnInfo.name:quantiserDataset[key]})}));return Object.values(extraColumns).join("\n")},hortis.datasetControl.renderMarkup=function(markup,isHeader,dataset,quantiserDatasets,datasetId){const quantiserDataset=quantiserDatasets&&quantiserDatasets[datasetId],extraColumns=hortis.datasetControl.renderExtraColumns(markup.cell,isHeader,dataset,quantiserDataset);return fluid.stringTemplate(markup.container,{extraColumns:extraColumns})};var hortis=fluid.registerNamespace("hortis");fluid.defaults("hortis.leafletMap.withGrid",{selectors:{grid:".fld-imerss-map-grid",datasetControls:".fld-imerss-dataset-controls",datasetsLabel:".fld-imerss-datasets-label"},baseZoomForOutline:11.9,model:{datasetsLabel:"Data Sources:"},modelListeners:{drawGrid:{path:["indexVersion","datasetEnabled"],func:"{that}.drawGrid"},zoomToOutline:{path:"zoom",listener:"hortis.leafletMap.updateOutlineWidth",args:["{change}.value","{that}.options.baseZoomForOutline","{that}.container.0"]},drawScale:{path:"{quantiser}.model.squareSide",func:"hortis.leafletMap.drawScale",args:["{that}","{change}.value"]},updateTooltip:{path:["mapBlockTooltipId","indexVersion","datasetEnabled"],priority:"after:drawGrid",excludeSource:"init",func:"hortis.leafletMap.withGrid.updateTooltip",args:["{that}","{that}.model.mapBlockTooltipId"]},updateTooltipHighlight:{path:"mapBlockTooltipId",excludeSource:"init",func:"hortis.leafletMap.withGrid.updateTooltipHighlight",args:["{that}","{change}.oldValue"]}},invokers:{drawGrid:"hortis.leafletMap.drawGrid({that}, {that}.quantiser, {that}.model.datasetEnabled)"},gridStyle:{className:"fld-imerss-map-region"},listeners:{"buildMap.addGrid":"hortis.leafletMap.withGrid.addGrid({that})"},modelRelay:{renderDatasetControls:{target:"datasetControls",func:"hortis.renderDatasetControls",args:["{that}.model.datasetEnabled","{that}.quantiser.model.squareSide","{that}.options.datasets","{that}.quantiser","{that}.model.indexVersion"]},datasetsLabel:{source:"datasetsLabel",target:"dom.datasetsLabel.text"}},components:{quantiser:{type:"hortis.quantiser",options:{baseLatitude:"{leafletMap}.options.fitBounds.0.0",datasets:"{leafletMap}.options.datasets",model:{indexVersion:"{leafletMap}.model.indexVersion"}}}},dynamicComponents:{datasetControls:{sources:"{that}.model.datasetControls",type:"{source}.type",options:{model:{datasetControl:"{source}"}}}}}),hortis.leafletMap.updateOutlineWidth=function(zoom,baseZoom,container){const relativeZoom=Math.min(1,Math.pow(2,2*(zoom-baseZoom)));container.style.setProperty("--imerss-stroke-width",2*relativeZoom)},hortis.leafletMap.withGrid.addGrid=function(that){that.map.createPane("hortis-grid"),that.gridGroup=L.layerGroup({pane:"hortis-grid"}).addTo(that.map)},hortis.leafletMap.drawScale=function(map,squareSide){const dimText=squareSide.toFixed(0)+"m";map.container.find(".leaflet-bottom.leaflet-left").text("Block size: "+dimText+" x "+dimText)},hortis.rectFromCorner=function(tl,latres,longres){return[[tl[0],tl[1]],[tl[0],tl[1]+longres],[tl[0]+latres,tl[1]+longres],[tl[0]+latres,tl[1]]]},hortis.leafletMap.drawGrid=function(map,quantiser,datasetEnabled){map.gridGroup.clearLayers();const latres=quantiser.model.latResolution,longres=quantiser.model.longResolution,heatLow=fluid.colour.hexToArray(map.options.heatLow),toPlot=map.toPlot={};fluid.each(quantiser.datasets,(function(dataset,datasetId){if(datasetEnabled[datasetId]){const mapDataset=map.options.datasets[datasetId],heatHigh=fluid.colour.hexToArray(mapDataset.colour);fluid.each(dataset.buckets,(function(bucket,key){const prop=Math.pow(bucket.count/dataset.maxCount,.25),fillColour=fluid.colour.interpolate(prop,heatLow,heatHigh);fluid.model.setSimple(toPlot,[key,"colours",datasetId],fillColour);const plotBucket=toPlot[key];plotBucket.count=plotBucket.count||0,plotBucket.count+=bucket.count,plotBucket.byTaxonId=fluid.extend({},plotBucket.byTaxonId,bucket.byTaxonId)}))}})),fluid.each(toPlot,(function(bucket,key){const colours=fluid.values(bucket.colours),colour=fluid.colour.average(colours),topLeft=hortis.quantiser.indexToCoord(key,latres,longres);bucket.polygon=hortis.rectFromCorner(topLeft,latres,longres),bucket.Lpolygon=L.polygon(bucket.polygon,fluid.extend({},map.options.gridStyle,{fillColor:fluid.colour.arrayToString(colour),pane:"hortis-grid"})),map.gridGroup.addLayer(bucket.Lpolygon),bucket.Lpolygon.on("click",(function(){console.log("Map clicked on key ",key),map.applier.change("mapBlockTooltipId",key)}))})),toPlot[map.model.mapBlockTooltipId]||map.applier.change("mapBlockTooltipId",null)},hortis.leafletMap.tooltipRow=function(map,key,value){return fluid.stringTemplate(map.options.markup.tooltipRow,{key:key,value:value})},hortis.leafletMap.withGrid.updateTooltipHighlight=function(map,oldKey){if(oldKey){const oldBucket=map.toPlot[oldKey];if(oldBucket){oldBucket.Lpolygon.getElement().classList.remove("fl-imerss-highlightBlock")}}},hortis.leafletMap.withGrid.updateTooltip=function(map,key){const tooltip=map.locate("tooltip"),bucket=map.toPlot[key];if(bucket){let text=map.options.markup.tooltipHeader;const dumpRow=function(key,value){text+=hortis.leafletMap.tooltipRow(map,key,value)},resolution=map.quantiser.model.longResolution,dp=Math.max(3,1-Math.log10(resolution)),c=function(value){return value.toFixed(dp)};dumpRow("Observation Count",bucket.count),dumpRow("Species Richness",Object.values(bucket.byTaxonId).length);const p=bucket.polygon,lat0=p[0][0],lat1=p[2][0],lng0=p[0][1],lng1=p[1][1];if(dumpRow("Latitude",c(lat0)+" to "+c(lat1)),dumpRow("Longitude",c(lng0)+" to "+c(lng1)),bucket.count<5&&map.options.showObsListInTooltip){const obs=fluid.flatten(Object.values(bucket.byTaxonId));dumpRow("Observations",fluid.transform(obs,hortis.renderObsId).map((s=>"iNaturalist: "+s)).join("<br/>"))}text+=map.options.markup.tooltipFooter,tooltip[0].innerHTML=text,tooltip.show();const element=bucket.Lpolygon.getElement();element.classList.add("fl-imerss-highlightBlock");element.parentNode.insertBefore(element,null)}else tooltip.hide()},fluid.defaults("hortis.quantiser",{gradeNames:"fluid.modelComponent",baseLatitude:51,model:{longResolution:.005,indexVersion:0},modelRelay:{latResolution:{target:"latResolution",singleTransform:{type:"fluid.transforms.free",args:["{that}.model.longResolution","{that}.options.baseLatitude"],func:"hortis.longToLat"}},squareSide:{target:"squareSide",singleTransform:{type:"fluid.transforms.free",func:"hortis.quantiser.squareSide",args:["{that}.options.baseLatitude","{that}.model.latResolution"]}},index:{target:"indexVersion",singleTransform:{type:"fluid.transforms.free",args:["{that}","{that}.options.datasets","{that}.model.latResolution","{that}.model.longResolution","{that}.model.squareSide","{that}.model.indexVersion"],func:"hortis.quantiser.indexTree"}}},members:{datasets:{}},events:{indexUpdated:null},invokers:{datasetToSummary:"hortis.quantiser.datasetToSummary({arguments}.0, {arguments}.1)",indexObs:"hortis.quantiser.indexObs({that}, {arguments}.0, {arguments}.1, {arguments}.2, {arguments}.3, {arguments}.4)"}}),hortis.quantiser.squareSide=function(baseLatitude,latResolution){return hortis.latitudeLength(baseLatitude)*latResolution},hortis.quantiser.indexToCoord=function(index,latres,longres){const coords=index.split("|");return[coords[0]*latres,coords[1]*longres]},hortis.quantiser.coordToIndex=function(coord,latres,longres){if(coord){return Math.floor(coord[0]/latres)+"|"+Math.floor(coord[1]/longres)}return"null"},hortis.datasetIdFromObs=function(obsId){const colpos=obsId.indexOf(":");return obsId.substring(0,colpos)},hortis.localIdFromObs=function(obsId){const colpos=obsId.indexOf(":");return obsId.substring(colpos+1)},hortis.quantiser.indexObs=function(that,coord,obsId,rowId,latResolution,longResolution){const coordIndex=hortis.quantiser.coordToIndex(coord,latResolution,longResolution),datasetId=hortis.datasetIdFromObs(obsId),dataset=that.datasets[datasetId];if(dataset||fluid.fail("Found observation with unknown dataset "+datasetId),dataset.byTaxonId[rowId]=!0,dataset.totalCount++,"null"!==coordIndex){let bucket=dataset.buckets[coordIndex];bucket||(bucket=dataset.buckets[coordIndex]={count:0,byTaxonId:{}}),bucket.count++,dataset.maxCount=Math.max(dataset.maxCount,bucket.count);let bucketTaxa=bucket.byTaxonId[rowId];bucketTaxa||(bucketTaxa=bucket.byTaxonId[rowId]=[]),bucketTaxa.push(obsId)}},hortis.quantiser.datasetToSummary=function(dataset,squareSide){const squareArea=squareSide*squareSide/1e6;dataset.taxaCount=Object.keys(dataset.byTaxonId).length,dataset.area=(Object.keys(dataset.buckets).length*squareArea).toFixed(2)},hortis.quantiser.indexTree=function(that,datasets,latResolution,longResolution,squareSide,indexVersion){that.datasets=fluid.transform(datasets,hortis.quantiserDataset);for(let i=that.flatTree.length-1;i>=0;--i){const row=that.flatTree[i];if(row.coords){const coords=JSON.parse(row.coords);fluid.each(coords,(function(coord,obsId){that.indexObs(coord,obsId,row.id,latResolution,longResolution)}))}}return fluid.each(that.datasets,(function(dataset){that.datasetToSummary(dataset,squareSide)})),indexVersion+1};var hortis=fluid.registerNamespace("hortis");hortis.addStyle=function(text){const style=document.createElement("style");style.type="text/css",style.innerText=text,document.getElementsByTagName("head")[0].appendChild(style)},fluid.defaults("hortis.leafletMap.withRegionsBase",{modelListeners:{selectedRegions:[{namespace:"map",path:"selectedRegions",func:"hortis.leafletMap.showSelectedRegions",args:["{that}","{change}.value"]}]},events:{selectRegion:null},members:{classes:"{sunburst}.viz.classes",communities:"{sunburst}.viz.communities",toPlot:"{sunburst}.viz.communities",regions:"{sunburst}.viz.classes"},listeners:{"clearMapSelection.regions":"hortis.clearSelectedRegions({that}, {arguments}.0)","selectRegion.regionSelection":"hortis.leafletMap.regionSelection({that}, {arguments}.0, {arguments}.1, {arguments}.2)"}}),fluid.defaults("hortis.leafletMap.withBareRegions",{gradeNames:"hortis.leafletMap.withRegionsBase",members:{map:null},model:{},events:{},listeners:{"buildMap.bindZoom":"fluid.identity","buildMap.fitBounds":"fluid.identity","buildMap.createTooltip":"fluid.identity","buildMap.addTiles":"fluid.identity"}}),hortis.regionOpacity=function(region){return"--imerss-"+hortis.normaliseToClass(region)+"-opacity"},hortis.regionBorder=function(region){return"--imerss-"+hortis.normaliseToClass(region)+"-stroke"},hortis.leafletMap.showSelectedRegions=function(map,selectedRegions){const style=map.container[0].style,noSelection=null===map.model.mapBlockTooltipId;Object.keys(map.regions).forEach((function(key){const lineFeature=map.classes[key].color;style.setProperty(hortis.regionOpacity(key),selectedRegions[key]||noSelection?"1.0":"0.4"),style.setProperty(hortis.regionBorder(key),selectedRegions[key]?"#FEF410":lineFeature?fluid.colour.arrayToString(lineFeature):"none")}))},hortis.leafletMap.selectedRegions=function(selectedRegion,regions){return fluid.transform(regions,(function(junk,key){return!!selectedRegion&&key===selectedRegion}))},hortis.leafletMap.regionSelection=function(map,className,community,source){map.applier.change("mapBlockTooltipId",community,"ADD",source),map.applier.change("selectedRegions",hortis.leafletMap.selectedRegions(className,map.classes),"ADD",source),map.applier.change("selectedCommunities",hortis.leafletMap.selectedRegions(community,map.communities),"ADD",source)},hortis.clearSelectedRegions=function(map,source){map.applier.change("selectedRegions",hortis.leafletMap.selectedRegions(null,map.classes),"ADD",source),map.applier.change("selectedCommunities",hortis.leafletMap.selectedRegions(null,map.communities),"ADD",source)};var hortis=fluid.registerNamespace("hortis");fluid.defaults("hortis.leafletMap.withRegions",{gradeNames:"hortis.leafletMap.withRegionsBase",selectors:{legendKeys:".fld-imerss-map-legend-keys"},modelListeners:{legend:{path:"selectedRegions.*",func:"hortis.legendKey.selectRegion",args:["{that}","{change}.value","{change}.path"]}},selectionTransactionSource:"map",model:{selectionRoute:"map"},members:{features:"{sunburst}.viz.features",outerPanel:"{sunburst}.dom.mapOuterPanel"},listeners:{"buildMap.addRegions":"hortis.leafletMap.withRegions.addRegions({that})","buildMap.drawRegions":"hortis.leafletMap.withRegions.drawRegions({that})","buildMap.drawLegend":"hortis.legendKey.drawLegend({that})","onCreate.listenTaxonLinks":"hortis.listenTaxonLinks({sunburst})","onCreate.validateTaxonLinks":"hortis.validateTaxonLinks({sunburst}, {that})","selectRegion.renderOuterPanel":"hortis.leafletMap.renderOuterPanel({that})"},components:{bannerManager:{type:"hortis.bannerManager",container:"body",options:{model:{selectedCommunities:"{hortis.leafletMap}.model.selectedCommunities"}}}}}),fluid.registerNamespace("hortis.legendKey"),hortis.legendKey.rowTemplate='<div class="fld-imerss-legend-row fld-imerss-nodismiss-map %rowClass"><span class="fld-imerss-legend-icon"></span><span class="fld-imerss-legend-preview %previewClass" style="%previewStyle"></span><span class="fld-imerss-legend-label">%keyLabel</span></div>',hortis.legendKey.blockTemplate='<div class="fld-imerss-legend-block"><span class="fld-imerss-legend-block-name fld-imerss-nodismiss-map">%community</span>%rows</div>',hortis.legendKey.renderMarkup=function(markup,clazz,className){const style=hortis.fillColorToStyle(clazz.fillColor||clazz.color),normal=hortis.normaliseToClass(className);return fluid.stringTemplate(markup,{rowClass:"fld-imerss-legend-row-"+normal,previewClass:"fld-imerss-class-"+normal,previewStyle:"background-color: "+style.fillColor,keyLabel:className})},hortis.legendKey.drawLegend=function(map){const blocks=fluid.transform(map.communities,(function(community,key){const clazzRows=fluid.transform(community.classes,(function(troo,className){return hortis.legendKey.renderMarkup(hortis.legendKey.rowTemplate,map.classes[className],className)}));return fluid.stringTemplate(hortis.legendKey.blockTemplate,{community:key,rows:Object.values(clazzRows).join("\n")})})),markup=Object.values(blocks).join("\n"),legendKeys=map.locate("legendKeys");legendKeys.html(markup),map.clazzToLegendNodes=fluid.transform(map.classes,(function(troo,className){const rowSel=".fld-imerss-legend-row-"+hortis.normaliseToClass(className);legendKeys.find(rowSel).click((function(){map.events.selectRegion.fire(className,map.classes[className].community)}))}))},hortis.legendKey.selectRegion=function(map,value,path){const className=fluid.peek(path);map.locate("legendKeys").find(".fld-imerss-legend-row-"+hortis.normaliseToClass(className)).toggleClass("fld-imerss-selected",value)},hortis.fillColorToStyle=function(fillColor){return{fillColor:fluid.colour.arrayToString(fillColor),fillOpacity:1}},fluid.defaults("hortis.bannerManager",{gradeNames:"fluid.viewComponent",selectors:{banner:".fl-xetthecum-banner"},modelListeners:{"selectedCommunities.*":{func:"hortis.bannerManager.toggleClass",args:["{that}.dom.banner","{change}.value","{change}.path"]}}}),hortis.normaliseToClass=function(str){return str.toLowerCase().replace(/ /g,"-")},hortis.bannerManager.toggleClass=function(banner,state,path){const community=fluid.peek(path);banner.toggleClass("fld-imerss-banner-"+hortis.normaliseToClass(community),state)},hortis.leafletMap.seColumns=["What","Where","Importance","Protection","Source"],hortis.leafletMap.hulqNameTemplate=' / <span aria-label="%label" title="%label" class="fl-imerss-hulq-name">%hulqName</span>',hortis.leafletMap.outerPanelPhoto='<div class="fl-imerss-photo %photoClass"></div>',hortis.leafletMap.outerPanelCommunity='<div class="fld-imerss-map-community">Community:<br/>%community%hulqBlock</div>',hortis.leafletMap.outerPanelClass='<div class="fld-imerss-map-class">%clazz%hulqBlock</div>',hortis.leafletMap.outerPanelBlock='<div class="fld-imerss-map-panel-block fld-taxonDisplay-expandable-header fl-taxonDisplay-runon-header">%blockName'+hortis.expandButtonMarkup+'</div><div class="fld-taxonDisplay-expandable-remainder fl-taxonDisplay-runon-remainder">%block</div>',hortis.leafletMap.renderHulqName=function(row){return fluid.stringTemplate(hortis.leafletMap.hulqNameTemplate,{hulqName:row.hulqName,label:"Meaning: "+hortis.encodeHTML(row.hulqMeaning)+" Source: "+hortis.encodeHTML(row.hulqSource)})},hortis.textToMarkup=function(text){return hortis.encodeHTML(text).replace(/\n/g,"<br/>")},hortis.taxonLinkRegex=/\[([^\[]+)\]\(([^\)]*)\)/gm,hortis.convertTaxonLinks=function(text){return text.replace(hortis.taxonLinkRegex,(function(match,p1,p2){return'<a class="fld-imerss-taxon-link" href="'+p2+'">'+p1+"</a>"}))},hortis.linkToTaxon=function(sunburst,taxonLink){const targetTaxon=taxonLink.substring("#taxon:".length);return sunburst.lookupTaxon(targetTaxon)},hortis.validateTaxonLinks=function(sunburst,map){fluid.each(map.communities,(function(community,key){const text=community.culturalValues;let match;do{if(match=hortis.taxonLinkRegex.exec(text),match){const taxonLink=match[2];hortis.linkToTaxon(sunburst,taxonLink)||console.log("Failed to look up taxon "+taxonLink+" for community key "+key)}}while(match)}))},hortis.withTaxonLink=function(sunburst,e,func){const target=e.target.getAttribute("href");if(e.preventDefault(),console.log("Got event target ",target),target.startsWith("#taxon:")){const row=hortis.linkToTaxon(sunburst,target);row&&func(row)}},hortis.listenTaxonLinks=function(sunburst){$(document).on("click",".fld-imerss-taxon-link",(function(e){hortis.withTaxonLink(sunburst,e,(function(row){sunburst.events.changeLayoutId.fire(row.id)}))})),$(document).on("mouseenter",".fld-imerss-taxon-link",(function(e){hortis.withTaxonLink(sunburst,e,(function(row){sunburst.mouseEvent=e,sunburst.applier.change("hoverId",row.id)}))})),$(document).on("mouseleave",".fld-imerss-taxon-link",(function(){sunburst.applier.change("hoverId",null)}))},hortis.leafletMap.renderMapOuterPanel=function(map){const selectedClazz=fluid.keyForValue(map.model.selectedRegions,!0),clazz=map.classes[selectedClazz];let topPanel="";clazz.hasImage&&(topPanel+=fluid.stringTemplate(hortis.leafletMap.outerPanelPhoto,{photoClass:"fld-imerss-class-image-"+hortis.normaliseToClass(selectedClazz)}));const communityName=map.model.mapBlockTooltipId,community=map.communities[communityName];topPanel+=fluid.stringTemplate(hortis.leafletMap.outerPanelCommunity,{community:map.model.mapBlockTooltipId,hulqBlock:community.hulqName?hortis.leafletMap.renderHulqName(community):""}),topPanel+=fluid.stringTemplate(hortis.leafletMap.outerPanelClass,{clazz:selectedClazz,hulqBlock:clazz.hulqName?hortis.leafletMap.renderHulqName(clazz):""});let bottomPanel="";if(community.culturalValues){const cultureBlock=hortis.convertTaxonLinks(hortis.textToMarkup(community.culturalValues))+'<br/><br/><div class="fld-imerss-map-class-se-col">Sources:</div>'+hortis.textToMarkup(community.culturalValuesSources);bottomPanel+=fluid.stringTemplate(hortis.leafletMap.outerPanelBlock,{blockName:"Cultural Values",block:cultureBlock})}if(clazz["sE-Tagline"]){let ecoBlock='<div class="fld-imerss-map-class-tagline">'+clazz["sE-Tagline"]+"</div>";hortis.leafletMap.seColumns.forEach((function(col){ecoBlock+='<div class="fld-imerss-map-class-se-col">'+col+": </div>",ecoBlock+='<div class="fld-imerss-map-class-se-val">'+clazz["sE-"+col]+"</div>"}));bottomPanel+=fluid.stringTemplate(hortis.leafletMap.outerPanelBlock,{blockName:"Ecological Values",block:ecoBlock})}return topPanel+bottomPanel},hortis.leafletMap.renderOuterPanel=function(map){map.outerPanel.html(hortis.leafletMap.renderMapOuterPanel(map))},hortis.leafletMap.withRegions.addRegions=function(that){that.map.createPane("hortis-regions"),that.regionGroup=L.layerGroup({pane:"hortis-regions"}).addTo(that.map)},hortis.leafletMap.withRegions.drawRegions=function(map){const regionClass=function(className){return"fld-imerss-region-"+hortis.normaliseToClass(className)};map.applier.change("selectedRegions",hortis.leafletMap.selectedRegions(null,map.classes)),map.regionGroup.clearLayers(),map.liveFeatures=map.features.map((function(feature){const className=feature.properties.clazz,community=feature.properties.COMMUNITY,clazz=map.classes[className],options=clazz.fillColor?{style:hortis.fillColorToStyle(clazz.fillColor),weight:3,stroke:"yellow"}:{style:{color:fluid.colour.arrayToString(clazz.color),weight:3}};options.className=regionClass(className)+" fld-imerss-region";const Lpolygon=L.geoJSON(feature,options);return map.regionGroup.addLayer(Lpolygon),Lpolygon.on("click",(function(){console.log("Map clicked on community ",community," region ",className),map.events.selectRegion.fire(className,community)})),{Lpolygon:Lpolygon,properties:feature.properties}}));const highlightStyle=Object.keys(map.regions).map((function(key){return"."+regionClass(key)+" {\n fill-opacity: var("+hortis.regionOpacity(key)+");\n stroke: var("+hortis.regionBorder(key)+");\n}\n"}));hortis.addStyle(highlightStyle.join("\n"))};var hortis=fluid.registerNamespace("hortis");hortis.encodeHTML=function(str){return str.replace(/[&<>'"]/g,(function(tag){return{"&":"&amp;","<":"&lt;",">":"&gt;","'":"&#39;",'"':"&quot;"}[tag]}))},hortis.renderSVGElement=function(markup,parentContainer){var element=$.parseXML(markup).documentElement;return parentContainer.append(element),element},hortis.renderNumber=function(number){return Math.abs(number)<1e-5?"0":number.toFixed(3)},hortis.emitPath=function(elements){var togo="";return elements.forEach((function(elem){togo+="string"==typeof elem?elem:hortis.renderNumber(elem)})),togo},hortis.circularPath=function(radius){var r=radius;return hortis.emitPath(["M",-r," ",0,"A",r," ",r," 0 1 0 ",r," ",0,"A",r," ",r," 0 1 0 ",-r," ",0])},hortis.annularPath=function(innerRadius,outerRadius){var ir=innerRadius,or=outerRadius;return hortis.emitPath(["M",-or," ",0,"A",or," ",or," 0 1 0 ",or," ",0,"A",or," ",or," 0 1 0 ",-or," ",0,"Z","M",-ir," ",0,"A",ir," ",ir," 0 1 1 ",ir," ",0,"A",ir," ",ir," 0 1 1 ",-ir," ",0,"Z"])},hortis.segmentPath=function(startAngle,endAngle,innerRadius,outerRadius){var cs=Math.cos(startAngle),ss=-Math.sin(startAngle),ce=Math.cos(endAngle),se=-Math.sin(endAngle),i=innerRadius,o=outerRadius,lfa=(+(endAngle-startAngle>=Math.PI)).toString();return hortis.emitPath(["M",cs*i," ",ss*i,"A",i," ",i," 0 ",lfa," 0 ",ce*i," ",se*i,"L",ce*o," ",se*o,"A",o," ",o," 0 ",lfa," 1 ",cs*o," ",ss*o,"Z"])},hortis.linearTextPath=function(leftAngle,rightAngle,innerRadius,outerRadius){var midAngle=(leftAngle+rightAngle)/2,c=Math.cos(midAngle),s=-Math.sin(midAngle),sr=c>0?innerRadius:outerRadius,fr=c>0?outerRadius:innerRadius;return hortis.emitPath(["M",c*sr," ",s*sr,"L",c*fr," ",s*fr])},hortis.segmentTextPath=function(startAngle,endAngle,outerRadius){var cs=Math.cos(startAngle),ss=-Math.sin(startAngle),ce=Math.cos(endAngle),se=-Math.sin(endAngle),ar=outerRadius-20,lfa=(+(endAngle-startAngle>=Math.PI)).toString();return hortis.emitPath(["M",cs*ar," ",ss*ar,"A",ar," ",ar," 0 ",lfa," 0 ",ce*ar," ",se*ar])},hortis.circularTextPath=function(outerRadius){var ar=outerRadius-20;return hortis.emitPath(["M","-0.1 ",-ar,"A",ar," ",ar," 0 1 0 ","0.1 ",-ar])};var hortis=fluid.registerNamespace("hortis");fluid.defaults("hortis.tabs",{gradeNames:["fluid.viewComponent"],tabOptions:{},model:{selectedTab:null},listeners:{"onCreate.initTabs":{this:"{that}.container",method:"tabs",args:"{that}.options.tabOptions"},"onCreate.bindEvents":{funcName:"hortis.tabs.bindEvents"}}}),hortis.tabs.findTab=function(that,tabId){return fluid.find(that.options.tabIds,(function(id,key){return id===tabId?key:void 0}))},hortis.tabs.bindEvents=function(that){that.container.on("tabsactivate",(function(event,ui){const tabId=ui.newTab.find("a").attr("href").substring(1),tab=hortis.tabs.findTab(that,tabId);that.applier.change("selectedTab",tab)}));const initialIndex=Object.keys(that.options.tabIds).indexOf(that.model.selectedTab);-1!==initialIndex&&that.container.tabs("option","active",initialIndex)};var hortis=fluid.registerNamespace("hortis");hortis.checklistItem=function(entry,selectedId){const record=entry.row,rowid=' data-row-id="'+record.id+'"',rank=record.species?"species":record.rank,header="<li "+("species"===rank&&record.id===selectedId?' class="fl-checklist-selected"':"")+">";let name="<p "+rowid+' class="flc-checklist-rank-'+rank+'">'+hortis.encodeHTML(record.taxonName||record.iNaturalistTaxonName)+"</p>";record.commonName&&(name+=" - <p "+rowid+' class="flc-checklist-common-name">'+record.commonName+"</p>"),record.hulqName&&(name+=" - <p "+rowid+' class="flc-checklist-hulq-name"><em>'+record.hulqName+"</em></p>");return header+name+hortis.checklistList(entry.children)+"</li>"},hortis.checklistList=function(entries,selectedId){return entries.length?"<ul>"+entries.map((function(entry){return hortis.checklistItem(entry,selectedId)})).join("")+"</ul>":""},hortis.checklistRowForId=function(that,id){return that.container.find("[data-row-id="+id+"]").closest("li")},hortis.updateChecklistSelection=function(that,newSelectedId,oldSelectedId,index){hortis.checklistRowForId(that,oldSelectedId).removeClass("fl-checklist-selected");const row=index[newSelectedId];if(row&&row.species){hortis.checklistRowForId(that,newSelectedId).addClass("fl-checklist-selected")}},hortis.filterFocused=function(entries){return fluid.transform(entries,(function(entry){return entry.row.focusCount>0?{row:entry.row,children:hortis.filterFocused(entry.children)}:fluid.NO_VALUE}))||[]},hortis.acceptChecklistRow=function(row,filterRanks){const acceptBasic=!filterRanks||filterRanks.includes(row.rank)||row.species,rejectSpecies="species"===row.rank&&row.children.length>0;return acceptBasic&&!rejectSpecies},hortis.filterRanks=function(rows,filterRanks){const togo=[];return fluid.each(rows,(function(row){if(hortis.acceptChecklistRow(row,filterRanks))togo.push({row:row,children:hortis.filterRanks(row.children,filterRanks)});else{const dChildren=hortis.filterRanks(row.children,filterRanks);Array.prototype.push.apply(togo,dChildren)}})),togo},hortis.generateChecklist=function(element,rootId,selectedId,index,filterRanks){console.log("Generating checklist for id "+rootId);const rootChildren=rootId?[index[rootId]]:[],filteredRanks=hortis.filterRanks(rootChildren,filterRanks),filteredFocus=hortis.filterFocused(filteredRanks),markup=hortis.checklistList(filteredFocus,selectedId);element[0].innerHTML=markup},fluid.defaults("hortis.checklist",{gradeNames:["hortis.withPanelLabel","fluid.viewComponent"],filterRanks:!1,selectors:{hoverable:"p",checklist:".fld-imerss-checklist",upArrow:".fld-imerss-checklist-up"},invokers:{generateChecklist:{funcName:"hortis.generateChecklist",args:["{that}.dom.checklist","{layoutHolder}.model.layoutId","{layoutHolder}.model.selectedId","{layoutHolder}.index","{that}.options.filterRanks"]}},modelListeners:{updateSelected:{path:["{layoutHolder}.model.selectedId"],args:["{that}","{change}.value","{change}.oldValue","{layoutHolder}.index"],func:"hortis.updateChecklistSelection"},generateChecklist:{path:["{layoutHolder}.model.layoutId","{layoutHolder}.model.rowFocus"],func:"{that}.generateChecklist"},arrowClick:{path:"dom.upArrow.click",funcName:"hortis.checklist.moveUp",args:["{layoutHolder}"]}},modelRelay:{source:"{layoutHolder}.model.isAtRoot",target:"dom.upArrow.visible",func:function(x){return!x}},listeners:{"onCreate.bindHover":"hortis.checklist.bindHover({that}, {layoutHolder})"}}),hortis.checklist.focusedColour=fluid.colour.hexToArray("#333"),hortis.checklist.unfocusedColour=fluid.colour.hexToArray("#ccc"),hortis.checklist.moveUp=function(layoutHolder){const layoutId=layoutHolder.model.layoutId,row=layoutId?layoutHolder.index[layoutId]:null,parentId=row&&row.parent&&row.parent.id;layoutHolder.events.changeLayoutId.fire(parentId)},hortis.checklist.bindHover=function(that,layoutHolder){const hoverable=that.options.selectors.hoverable;that.container.on("mouseenter",hoverable,(function(e){const id=this.dataset.rowId;layoutHolder.mouseEvent=e,layoutHolder.applier.change("hoverId",id)})),that.container.on("mouseleave",hoverable,(function(){layoutHolder.applier.change("hoverId",null)})),that.container.on("click",hoverable,(function(){const id=this.dataset.rowId;layoutHolder.events.changeLayoutId.fire(id)}))};var hortis=fluid.registerNamespace("hortis");fluid.defaults("hortis.xetthecumSunburstLoader",{gradeNames:"fluid.viewComponent",bioPanelLabel:"Biodiversity",mapPanelLabel:"Ecological Communities",distributeOptions:{sunburstLabel:{target:"{that hortis.sunburst}.options.model.panelLabel",source:"{that}.options.bioPanelLabel"},checklistLabel:{target:"{that hortis.checklist}.options.model.panelLabel",source:"{that}.options.bioPanelLabel"},mapWithLabel:{record:"hortis.withPanelLabel",target:"{that hortis.leafletMap}.options.gradeNames"},mapLabel:{target:"{that hortis.leafletMap}.options.model.panelLabel",source:"{that}.options.mapPanelLabel"},outerPanelSelector:{target:"{that hortis.sunburst}.options.selectors.mapOuterPanel",record:".fld-imerss-map-outer-panel"}},components:{infoPanelManager:{type:"hortis.infoPanelManager",container:"{sunburstLoader}.container",createOnEvent:"sunburstLoaded",options:{listeners:{"{hortis.leafletMap}.events.selectRegion":{namespace:"updateInfoPanel",changePath:"{infoPanelManager}.model.visiblePanel",value:"map"},"{sunburst}.events.changeLayoutId":[{namespace:"clearMapSelection",listener:"hortis.clearMapSelectionConditionally",args:["{hortis.leafletMap}","{arguments}.0","{arguments}.1"]},{namespace:"changeLayoutId",changePath:"{infoPanelManager}.model.visiblePanel",value:"taxa"}]}}}}}),hortis.clearMapSelectionConditionally=function(map,layoutId,source){console.log("ClearMapSelectionConditionally with layoutId ",layoutId," source "+source),"rowFocus"!==source&&map.events.clearMapSelection.fire()},fluid.defaults("hortis.infoPanelManager",{gradeNames:"fluid.viewComponent",selectors:{map:".fld-imerss-map-outer-panel-wrapper",taxa:".fld-imerss-taxonDisplay-wrapper"},panels:{map:!0,taxa:!0},model:{visiblePanel:"taxa",visiblePanels:{}},modelRelay:{visiblePanels:{target:"visiblePanels",func:(panel,panels)=>fluid.transform(panels,((troo,thisPanel)=>panel===thisPanel)),args:["{that}.model.visiblePanel","{that}.options.panels"]},visibleMap:{target:"dom.map.visible",source:"visiblePanels.map"},visibleTaxa:{target:"dom.taxa.visible",source:"visiblePanels.taxa"}}});
58
58
  //# sourceMappingURL=imerss-viz-all.js.map