{"version":3,"file":"kendo.binder.min.js","names":["global","factory","exports","module","require","define","amd","globalThis","self","kendobinder","js","this","$","undefined$1","kendo","window","encode","htmlEncode","Observable","ObservableObject","data","ObservableArray","toString","binders","Class","VALUE","SOURCE","EVENTS","CHECKED","deleteExpando","FUNCTION","CHANGE","a","document","createElement","test","e","Binding","extend","init","parents","path","that","fn","call","source","dependencies","observable","_access","field","_change","change","bind","_parents","value","get","parent","inArray","concat","dependency","ch","trigger","indexOf","charAt","length","start","stop","unbind","index","result","lastIndexOf","substring","currentSource","set","getter","destroy","EventBinding","handler","TemplateBinding","template","render","html","Binder","element","bindings","options","binding","attribute","refresh","TypedBinder","dataType","getAttribute","ns","type","toLowerCase","parsedValue","_parseValue","parseDate","parseFloat","Boolean","dataSourceBinding","bindingName","fieldName","setter","widget","_dataBinding","dataBinding","_dataBound","dataBound","_itemChange","itemChange","bindElement","item","_ns","idx","items","removedItems","unbindElementTree","ui","all","dataviz","mobile","splice","unshift","rolesFromNamespaces","view","addedItems","dataSource","hds","HierarchicalDataSource","addedDataItems","flatView","select","multiselect","action","DataSource","_dataSource","Select","MultiSelect","DropDownTree","treeview","retrievePrimitiveValues","dataValueField","attr","key","setAttribute","css","classes","className","addClass","removeClass","style","enabled","removeAttribute","readonly","disabled","events","handlers","off","on","text","dataFormat","visible","display","invisible","innerHTML","eventName","valueUpdate","_initChange","autoBind","fetch","add","remove","container","nodeName","tBodies","appendChild","valueField","textField","valueAttr","innerText","child","clone","cloneNode","reference","children","insertBefore","roles","parentNode","removeChild","unbindElementChildren","input","checked","Date","i","push","val","selectedIndex","target","option","values","selected","attributes","specified","valueIndex","valuePrimitive","sourceValue","String","apply","optionIndex","optionValue","check","range","end","_range","wrapper","floatingLabel","readOnly","enable","first","_valueIsObservableObject","_valueIsObservableArray","_source","dataItem","valueLength","sourceItem","dataTextField","isArray","isObservableObject","slice","cascadeFrom","listView","bound","_preselect","dropdowntree","oldValues","selectedNode","nonPrimitiveValues","_isMultipleSelection","_getAllChecked","newValues","removeIndex","newValue","found","newLength","j","old","arraySplice","selectedValue","gantt","dataItems","_isBound","scheduler","elements","grid","badge","arr","addLength","oldLength","shifted","shiftedLength","BindingTarget","toDestroy","hasValue","hasSource","hasEvents","hasChecked","hasCss","widgetBinding","WidgetBindingTarget","specificBinders","applyBinding","name","binder","Error","keyValueRegExp","whiteSpaceRegExp","parseBindings","token","colonIndex","tokens","match","createBindings","role","childrenCopy","deep","unbindElement","initWidget","bindingTargetForRole","replace","parseOptions","click","kendoBindingTarget","dom","object","node","arguments","nodeType","destroyWidget","bindingTarget","widgetInstance","destroyWidgets","notify","namespace","observableHierarchy","array","create","recursiveRead","_initChildren","_data","jQuery"],"sources":["kendo.binder.js"],"mappings":"CAAA,SAAWA,EAAQC,GACE,iBAAZC,SAA0C,oBAAXC,OAAyBA,OAAOD,QAAUD,EAAQG,QAAQ,iBAAkBA,QAAQ,kBACxG,mBAAXC,QAAyBA,OAAOC,IAAMD,OAAO,CAAC,iBAAkB,kBAAmBJ,KACzFD,EAA+B,oBAAfO,WAA6BA,WAAaP,GAAUQ,MAAcC,YAAcT,EAAOS,aAAe,CAAC,EAAGT,EAAOS,YAAYC,GAAKT,IACpJ,CAJD,CAIGU,MAAM,WAkmEP,OAxlEA,SAAUC,EAAGC,GACT,IAAIC,EAAQC,OAAOD,MACfE,EAASF,EAAMG,WACfC,EAAaJ,EAAMI,WACnBC,EAAmBL,EAAMM,KAAKD,iBAC9BE,EAAkBP,EAAMM,KAAKC,gBAC7BC,EAAW,CAAC,EAAEA,SACdC,EAAU,CAAC,EACXC,EAAQV,EAAMU,MACdC,EAAQ,QACRC,EAAS,SACTC,EAAS,SACTC,EAAU,UAEVC,GAAgB,EAChBC,EAAW,WACXC,EAAS,UAEb,WACI,IAAIC,EAAIC,SAASC,cAAc,KAE/B,WACWF,EAAEG,IACb,CAAE,MAAOC,GACLP,GAAgB,CACpB,CACH,CARD,GAUA,IAAIQ,EAAUnB,EAAWoB,OAAQ,CAC7BC,KAAM,SAASC,EAASC,GACpB,IAAIC,EAAO/B,KAEXO,EAAWyB,GAAGJ,KAAKK,KAAKF,GAExBA,EAAKG,OAASL,EAAQ,GACtBE,EAAKF,QAAUA,EACfE,EAAKD,KAAOA,EACZC,EAAKI,aAAe,CAAC,EACrBJ,EAAKI,aAAaL,IAAQ,EAC1BC,EAAKK,WAAaL,EAAKG,kBAAkB3B,EAEzCwB,EAAKM,QAAU,SAASZ,GACpBM,EAAKI,aAAaV,EAAEa,QAAS,CACjC,EAEIP,EAAKK,aACLL,EAAKQ,QAAU,SAASd,GACpBM,EAAKS,OAAOf,EAChB,EAEAM,EAAKG,OAAOO,KAAKrB,EAAQW,EAAKQ,SAEtC,EAEAG,SAAU,WACN,IAAIb,EAAU7B,KAAK6B,QACfc,EAAQ3C,KAAK4C,MAEjB,GAAID,GAAgC,mBAAhBA,EAAME,OAAsB,CAC5C,IAAIA,EAASF,EAAME,SAEf5C,EAAE6C,QAAQD,EAAQhB,GAAW,IAC7BA,EAAU,CAACgB,GAAQE,OAAOlB,GAElC,CAEA,OAAOA,CACX,EAEAW,OAAQ,SAASf,GACb,IAAIuB,EACAC,EACAX,EAAQb,EAAEa,MACVP,EAAO/B,KAEX,GAAkB,SAAd+B,EAAKD,KACLC,EAAKmB,QAAQ9B,EAAQK,QAErB,IAAKuB,KAAcjB,EAAKI,aACpB,GAAkC,IAA9Ba,EAAWG,QAAQb,OACpBW,EAAKD,EAAWI,OAAOd,EAAMe,UAEX,MAAPJ,GAAqB,MAAPA,GAAY,CAChClB,EAAKmB,QAAQ9B,EAAQK,GACrB,KACL,CAIf,EAEA6B,MAAO,SAASpB,GACZA,EAAOO,KAAK,MAAOzC,KAAKqC,QAC5B,EAEAkB,KAAM,SAASrB,GACXA,EAAOsB,OAAO,MAAOxD,KAAKqC,QAC9B,EAEAO,IAAK,WAED,IAAIb,EAAO/B,KACPkC,EAASH,EAAKG,OACduB,EAAQ,EACR3B,EAAOC,EAAKD,KACZ4B,EAASxB,EAEb,IAAKH,EAAKK,WACN,OAAOsB,EAQX,IALA3B,EAAKuB,MAAMvB,EAAKG,QAEhBwB,EAASxB,EAAOU,IAAId,GAGb4B,IAAWxD,GAAegC,IAE7BA,EAASH,EAAKF,UAAU4B,cAEFjD,IAClBkD,EAASxB,EAAOU,IAAId,IAK5B,GAAI4B,IAAWxD,EAGX,IAFAgC,EAASH,EAAKG,OAEPwB,IAAWxD,GAAegC,IAC7BA,EAASA,EAAOW,oBAEMrC,IAClBkD,EAASxB,EAAOU,IAAId,IAsChC,MAhCsB,mBAAX4B,KACPD,EAAQ3B,EAAK6B,YAAY,MAGb,IACRzB,EAASA,EAAOU,IAAId,EAAK8B,UAAU,EAAGH,KAI1C1B,EAAKuB,MAAMpB,GAGPwB,EADAxB,IAAWH,EAAKG,OACPwB,EAAOzB,KAAKC,EAAQH,EAAKG,QAEzBwB,EAAOzB,KAAKC,GAGzBH,EAAKwB,KAAKrB,IAIVA,GAAUA,IAAWH,EAAKG,SAE1BH,EAAK8B,cAAgB3B,EAGrBA,EAAOsB,OAAOpC,EAAQW,EAAKQ,SACpBE,KAAKrB,EAAQW,EAAKQ,UAG7BR,EAAKwB,KAAKxB,EAAKG,QAERwB,CACX,EAEAI,IAAK,SAASnB,GACV,IAAIT,EAASlC,KAAK6D,eAAiB7D,KAAKkC,OAEpCI,EAAQnC,EAAM4D,OAAO/D,KAAK8B,KAAlB3B,CAAwB+B,GAEf,mBAAVI,EACHJ,IAAWlC,KAAKkC,OAChBI,EAAML,KAAKC,EAAQlC,KAAKkC,OAAQS,GAEhCL,EAAML,KAAKC,EAAQS,GAGvBT,EAAO4B,IAAI9D,KAAK8B,KAAMa,EAE9B,EAEAqB,QAAS,WACDhE,KAAKoC,aACLpC,KAAKkC,OAAOsB,OAAOpC,EAAQpB,KAAKuC,SAC5BvC,KAAK6D,eACL7D,KAAK6D,cAAcL,OAAOpC,EAAQpB,KAAKuC,UAI/CvC,KAAKwD,QACT,IAGAS,EAAevC,EAAQC,OAAQ,CAC/BiB,IAAK,WACD,IAGIsB,EAHAhC,EAASlC,KAAKkC,OACdJ,EAAO9B,KAAK8B,KACZ2B,EAAQ,EAKZ,IAFAS,EAAUhC,EAAOU,IAAId,IAEboC,GAAWhC,IACfA,EAASlC,KAAK6B,UAAU4B,cAEFjD,IAClB0D,EAAUhC,EAAOU,IAAId,IAI7B,GAAKoC,EAIL,OAAOA,EAAQzB,KAAKP,EACxB,IAGAiC,EAAkBzC,EAAQC,OAAQ,CAClCC,KAAM,SAASM,EAAQJ,EAAMsC,GAGzB1C,EAAQM,GAAGJ,KAAKK,KAFLjC,KAEgBkC,EAAQJ,GAFxB9B,KAINoE,SAAWA,CACpB,EAEAC,OAAQ,SAAS1B,GACb,IAAI2B,EAQJ,OANAtE,KAAKsD,MAAMtD,KAAKkC,QAEhBoC,EAAOnE,EAAMkE,OAAOrE,KAAKoE,SAAUzB,GAEnC3C,KAAKuD,KAAKvD,KAAKkC,QAERoC,CACX,IAGAC,EAAS1D,EAAMc,OAAO,CACtBC,KAAM,SAAS4C,EAASC,EAAUC,GAC9B1E,KAAKwE,QAAUA,EACfxE,KAAKyE,SAAWA,EAChBzE,KAAK0E,QAAUA,CACnB,EAEAjC,KAAM,SAASkC,EAASC,GACpB,IAAI7C,EAAO/B,MAEX2E,EAAUC,EAAYD,EAAQC,GAAaD,GAEnClC,KAAKrB,GAAQ,SAASK,GAC1BM,EAAK8C,QAAQD,GAAanD,EAC9B,IAEAM,EAAK8C,QAAQD,EACjB,EAEAZ,QAAS,WACT,IAGAc,EAAcP,EAAO5C,OAAO,CAC5BoD,SAAU,WAEN,OADe/E,KAAKwE,QAAQQ,aAAa,QAAU7E,EAAM8E,GAAK,SAAWjF,KAAKwE,QAAQU,MAAQ,QAC9EC,aACpB,EAEAC,YAAa,WACT,OAAOpF,KAAKqF,YAAYrF,KAAKwE,QAAQ7B,MAAO3C,KAAK+E,WACrD,EAEAM,YAAa,SAAS1C,EAAOoC,GAezB,MAdgB,QAAZA,EACApC,EAAQxC,EAAMmF,UAAU3C,EAAO,cACZ,kBAAZoC,EACPpC,EAAQxC,EAAMmF,UAAU3C,EAAO,CAAC,sBAAuB,qBACpC,UAAZoC,EACPpC,EAAQxC,EAAMoF,WAAW5C,GACN,WAAZoC,IACPpC,EAAQA,EAAMwC,cAEVxC,EAD4B,OAA5BxC,EAAMoF,WAAW5C,GACT6C,QAAQrF,EAAMoF,WAAW5C,IAEA,SAAxBA,EAAMwC,eAGhBxC,CACX,IA8kBJ,SAAS8C,EAAkBC,EAAaC,EAAWC,GAC/C,OAAOrB,EAAO5C,OAAO,CACjBC,KAAM,SAASiE,EAAQpB,EAAUC,GAC7B,IAAI3C,EAAO/B,KAEXuE,EAAOvC,GAAGJ,KAAKK,KAAKF,EAAM8D,EAAOrB,QAAQ,GAAIC,EAAUC,GAEvD3C,EAAK8D,OAASA,EACd9D,EAAK+D,aAAe/D,EAAKgE,YAAYtD,KAAKV,GAC1CA,EAAKiE,WAAajE,EAAKkE,UAAUxD,KAAKV,GACtCA,EAAKmE,YAAcnE,EAAKoE,WAAW1D,KAAKV,EAC5C,EAEAoE,WAAY,SAAS1E,GACjB2E,EAAY3E,EAAE4E,KAAK,GAAI5E,EAAEhB,KAAMT,KAAKsG,IAAI7E,EAAEwD,IAAK,CAACxD,EAAEhB,MAAMsC,OAAO/C,KAAKyE,SAASiB,GAAahD,YAC9F,EAEAqD,YAAa,SAAStE,GAClB,IAAI8E,EACAlD,EACAwC,EAAS7F,KAAK6F,OACdW,EAAQ/E,EAAEgF,cAAgBZ,EAAOW,QAErC,IAAKD,EAAM,EAAGlD,EAASmD,EAAMnD,OAAQkD,EAAMlD,EAAQkD,IAC/CG,EAAkBF,EAAMD,IAAM,EAEtC,EAEAD,IAAK,SAASrB,GACVA,EAAKA,GAAM9E,EAAMwG,GACjB,IAAIC,EAAM,CAAEzG,EAAMwG,GAAIxG,EAAM0G,QAAQF,GAAIxG,EAAM2G,OAAOH,IAIrD,OAHAC,EAAIG,OAAO9G,EAAE6C,QAAQmC,EAAI2B,GAAM,GAC/BA,EAAII,QAAQ/B,GAEL9E,EAAM8G,oBAAoBL,EACrC,EAEAX,UAAW,SAASxE,GAChB,IAAI8E,EACAlD,EAIA6D,EACArF,EAJAgE,EAAS7F,KAAK6F,OACdW,EAAQ/E,EAAE0F,YAActB,EAAOW,QAC/BY,EAAavB,EAAOF,GAGpB0B,EAAMlH,EAAMM,KAAK6G,uBAErB,KAAID,GAAOD,aAAsBC,IAM7Bb,EAAMnD,OAIN,IAHA6D,EAAOzF,EAAE8F,gBAAkBH,EAAWI,WACtC3F,EAAU7B,KAAKyE,SAASiB,GAAahD,WAEhC6D,EAAM,EAAGlD,EAAS6D,EAAK7D,OAAQkD,EAAMlD,EAAQkD,IAC1CC,EAAMD,IACNH,EAAYI,EAAMD,GAAMW,EAAKX,GAAMvG,KAAKsG,IAAI7E,EAAEwD,IAAK,CAACiC,EAAKX,IAAMxD,OAAOlB,GAItF,EAEAgD,QAAS,SAASpD,GACd,IACIS,EAEAuF,EAAQC,EAHR3F,EAAO/B,KAEP6F,EAAS9D,EAAK8D,QAGlBpE,EAAIA,GAAK,CAAC,GAEHkG,SACH5F,EAAKiC,UAEL6B,EAAOpD,KAAK,cAAeV,EAAK+D,cAChCD,EAAOpD,KAAK,YAAaV,EAAKiE,YAC9BH,EAAOpD,KAAK,aAAcV,EAAKmE,aAE/BhE,EAASH,EAAK0C,SAASiB,GAAa9C,MAEhCiD,EAAOF,aAAsBxF,EAAMM,KAAKmH,YAAc/B,EAAOF,IAAczD,IACvEA,aAAkB/B,EAAMM,KAAKmH,WAC7B/B,EAAOD,GAAQ1D,GACRA,GAAUA,EAAO2F,YACxBhC,EAAOD,GAAQ1D,EAAO2F,cAEtBJ,EAAStH,EAAMwG,GAAGmB,QAAUjC,aAAkB1F,EAAMwG,GAAGmB,OACvDJ,EAAcvH,EAAMwG,GAAGoB,aAAelC,aAAkB1F,EAAMwG,GAAGoB,YAClD5H,EAAMwG,GAAGqB,cAAgBnC,aAAkB1F,EAAMwG,GAAGqB,aAK/DnC,EAAOoC,SAAStC,GAAWlF,KAAKyB,GAFhC2D,EAAOF,GAAWlF,KAAKyB,GAKvBH,EAAK0C,SAAS9B,QAAU8E,GAAUC,IAClC7B,EAAOlD,MAAMuF,EAAwBnG,EAAK0C,SAAS9B,MAAMC,MAAOiD,EAAOnB,QAAQyD,mBAKnG,EAEAnE,QAAS,WACL,IAAI6B,EAAS7F,KAAK6F,OAElBA,EAAOrC,OAAO,cAAexD,KAAK8F,cAClCD,EAAOrC,OAAO,YAAaxD,KAAKgG,YAChCH,EAAOrC,OAAO,aAAcxD,KAAKkG,YACrC,GAER,CA7rBAtF,EAAQwH,KAAO7D,EAAO5C,OAAO,CACzBkD,QAAS,SAASwD,GACdrI,KAAKwE,QAAQ8D,aAAaD,EAAKrI,KAAKyE,SAAS2D,KAAKC,GAAKzF,MAC3D,IAGJhC,EAAQ2H,IAAMhE,EAAO5C,OAAO,CACxBC,KAAM,SAAS4C,EAASC,EAAUC,GAC9BH,EAAOvC,GAAGJ,KAAKK,KAAKjC,KAAMwE,EAASC,EAAUC,GAC7C1E,KAAKwI,QAAU,CAAC,CACpB,EACA3D,QAAS,SAAS4D,GACd,IAAIjE,EAAUvE,EAAED,KAAKwE,SACjBG,EAAU3E,KAAKyE,SAAS8D,IAAIE,IACjBzI,KAAKwI,QAAQC,GAAa9D,EAAQ/B,OAE7C4B,EAAQkE,SAASD,GAEjBjE,EAAQmE,YAAYF,EAE5B,IAGJ7H,EAAQgI,MAAQrE,EAAO5C,OAAO,CAC1BkD,QAAS,SAASwD,GACdrI,KAAKwE,QAAQoE,MAAMP,GAAOrI,KAAKyE,SAASmE,MAAMP,GAAKzF,OAAS,EAChE,IAGJhC,EAAQiI,QAAUtE,EAAO5C,OAAO,CAC5BkD,QAAS,WACD7E,KAAKyE,SAASoE,QAAQjG,MACtB5C,KAAKwE,QAAQsE,gBAAgB,YAE7B9I,KAAKwE,QAAQ8D,aAAa,WAAY,WAE9C,IAGJ1H,EAAQmI,SAAWxE,EAAO5C,OAAO,CAC9BkD,QAAS,WACA7E,KAAKyE,SAASsE,SAASnG,MACvB5C,KAAKwE,QAAQ8D,aAAa,WAAY,YAEtCtI,KAAKwE,QAAQsE,gBAAgB,WAEtC,IAGHlI,EAAQoI,SAAWzE,EAAO5C,OAAO,CAC7BkD,QAAS,WACD7E,KAAKyE,SAASuE,SAASpG,MACvB5C,KAAKwE,QAAQ8D,aAAa,WAAY,YAEtCtI,KAAKwE,QAAQsE,gBAAgB,WAErC,IAGJlI,EAAQqI,OAAS1E,EAAO5C,OAAO,CAC3BC,KAAM,SAAS4C,EAASC,EAAUC,GAC9BH,EAAOvC,GAAGJ,KAAKK,KAAKjC,KAAMwE,EAASC,EAAUC,GAC7C1E,KAAKkJ,SAAW,CAAC,CACrB,EAEArE,QAAS,SAASwD,GACd,IAAI7D,EAAUvE,EAAED,KAAKwE,SACjBG,EAAU3E,KAAKyE,SAASwE,OAAOZ,GAC/BnE,EAAUlE,KAAKkJ,SAASb,GAExBnE,GACAM,EAAQ2E,IAAId,EAAKnE,GAGrBA,EAAUlE,KAAKkJ,SAASb,GAAO1D,EAAQ/B,MAEvC4B,EAAQ4E,GAAGf,EAAK1D,EAAQzC,OAAQgC,EACpC,EAEAF,QAAS,WACL,IACIE,EADAM,EAAUvE,EAAED,KAAKwE,SAGrB,IAAKN,KAAWlE,KAAKkJ,SACjB1E,EAAQ2E,IAAIjF,EAASlE,KAAKkJ,SAAShF,GAE3C,IAGJtD,EAAQyI,KAAO9E,EAAO5C,OAAO,CACzBkD,QAAS,WACL,IAAIwE,EAAOrJ,KAAKyE,SAAS4E,KAAKzG,MAC1B0G,EAAatJ,KAAKwE,QAAQQ,aAAa,QAAU7E,EAAM8E,GAAK,WAAa,GACjE,MAARoE,IACAA,EAAO,IAGXpJ,EAAED,KAAKwE,SAAS6E,KAAKlJ,EAAMQ,SAAS0I,EAAMC,GAC9C,IAGJ1I,EAAQ2I,QAAUhF,EAAO5C,OAAO,CAC5BkD,QAAS,WACD7E,KAAKyE,SAAS8E,QAAQ3G,MACtB5C,KAAKwE,QAAQoE,MAAMY,QAAU,GAE7BxJ,KAAKwE,QAAQoE,MAAMY,QAAU,MAErC,IAGJ5I,EAAQ6I,UAAYlF,EAAO5C,OAAO,CAC9BkD,QAAS,WACA7E,KAAKyE,SAASgF,UAAU7G,MAGzB5C,KAAKwE,QAAQoE,MAAMY,QAAU,OAF7BxJ,KAAKwE,QAAQoE,MAAMY,QAAU,EAIrC,IAGJ5I,EAAQ0D,KAAOC,EAAO5C,OAAO,CACzBkD,QAAS,WACL7E,KAAKwE,QAAQkF,UAAY1J,KAAKyE,SAASH,KAAK1B,KAChD,IAGJhC,EAAQ+B,MAAQmC,EAAYnD,OAAO,CAC/BC,KAAM,SAAS4C,EAASC,EAAUC,GAC9BI,EAAY9C,GAAGJ,KAAKK,KAAKjC,KAAMwE,EAASC,EAAUC,GAElD1E,KAAKuC,QAAUvC,KAAKwC,OAAOC,KAAKzC,MAChCA,KAAK2J,UAAYjF,EAAQkF,aAAexI,EAExCnB,EAAED,KAAKwE,SAAS4E,GAAGpJ,KAAK2J,UAAW3J,KAAKuC,SAExCvC,KAAK6J,aAAc,CACvB,EAEArH,OAAQ,WACJxC,KAAK6J,YAAc7J,KAAK2J,WAAavI,EAErCpB,KAAKyE,SAAS3D,GAAOgD,IAAI9D,KAAKoF,eAE9BpF,KAAK6J,aAAc,CACvB,EAEAhF,QAAS,WACL,IAAK7E,KAAK6J,YAAa,CACnB,IAAIlH,EAAQ3C,KAAKyE,SAAS3D,GAAO8B,MAEpB,MAATD,IACAA,EAAQ,IAGZ,IAAIuC,EAAOlF,KAAK+E,WAEJ,QAARG,EACAvC,EAAQxC,EAAMQ,SAASgC,EAAO,cACf,kBAARuC,IACPvC,EAAQxC,EAAMQ,SAASgC,EAAO,wBAGlC3C,KAAKwE,QAAQ7B,MAAQA,CACzB,CAEA3C,KAAK6J,aAAc,CACvB,EAEA7F,QAAS,WACL/D,EAAED,KAAKwE,SAAS2E,IAAInJ,KAAK2J,UAAW3J,KAAKuC,QAC7C,IAGJ3B,EAAQsB,OAASqC,EAAO5C,OAAO,CAC3BC,KAAM,SAAS4C,EAASC,EAAUC,GAC9BH,EAAOvC,GAAGJ,KAAKK,KAAKjC,KAAMwE,EAASC,EAAUC,GAE7C,IAAIxC,EAASlC,KAAKyE,SAASvC,OAAOU,MAE9BV,aAAkB/B,EAAMM,KAAKmH,aAAmC,IAArBlD,EAAQoF,UACnD5H,EAAO6H,OAEf,EAEAlF,QAAS,SAASpD,GACd,IAAIM,EAAO/B,KACPkC,EAASH,EAAK0C,SAASvC,OAAOU,MAE9BV,aAAkBxB,GAAmBwB,aAAkB/B,EAAMM,KAAKmH,WAGlD,QAFhBnG,EAAIA,GAAK,CAAC,GAEJkG,OACF5F,EAAKiI,IAAIvI,EAAEgC,MAAOhC,EAAE+E,OACD,UAAZ/E,EAAEkG,OACT5F,EAAKkI,OAAOxI,EAAEgC,MAAOhC,EAAE+E,OACJ,cAAZ/E,EAAEkG,QACT5F,EAAKsC,SAGTtC,EAAKsC,QAEb,EAEA6F,UAAW,WACP,IAAI1F,EAAUxE,KAAKwE,QASnB,MAPsC,SAAlCA,EAAQ2F,SAAShF,gBACZX,EAAQ4F,QAAQ,IACjB5F,EAAQ6F,YAAY/I,SAASC,cAAc,UAE/CiD,EAAUA,EAAQ4F,QAAQ,IAGvB5F,CACX,EAEAJ,SAAU,WACN,IAAIM,EAAU1E,KAAK0E,QACfN,EAAWM,EAAQN,SACnB+F,EAAWnK,KAAKkK,YAAYC,SAAShF,cAuBzC,OArBKf,IAGOA,EAFQ,UAAZ+F,EACIzF,EAAQ4F,YAAc5F,EAAQ6F,UAClB9J,IACR,MAAM+J,EAAYrK,EAAM4D,OAAOW,EAAQ4F,YAAc5F,EAAQ6F,UAA3CpK,CAAsDM,GAClEgK,EAAYtK,EAAM4D,OAAOW,EAAQ6F,WAAa7F,EAAQ4F,WAA1CnK,CAAsDM,GACxE,MAAO,kBAAkBJ,EAAOmK,OAAenK,EAAOoK,aAAqB,EAGnEhK,GAAS,WAAWJ,EAAOI,cAExB,SAAZ0J,EACK1J,GAAS,WAAWJ,EAAOI,eACpB,MAAZ0J,GAAgC,MAAZA,EACf1J,GAAS,OAAOJ,EAAOI,UAEvBA,GAAS,GAAGJ,EAAOI,KAEnC2D,EAAWjE,EAAMiE,SAASA,IAGvBA,CACX,EAEA4F,IAAK,SAASvG,EAAO+C,GACjB,IACI3E,EACA0E,EACAlD,EACAqH,EAJAlG,EAAUxE,KAAKkK,YAKfS,EAAQnG,EAAQoG,WAAU,GAC1BC,EAAYrG,EAAQsG,SAASrH,GAIjC,GAFAxD,EAAE0K,GAAOrG,KAAKnE,EAAMkE,OAAOrE,KAAKoE,WAAYoC,IAExCmE,EAAMG,SAASzH,OAGf,IAFAxB,EAAU7B,KAAKyE,SAASvC,OAAOQ,WAE1B6D,EAAM,EAAGlD,EAASmD,EAAMnD,OAAQkD,EAAMlD,EAAQkD,IAC/CmE,EAAQC,EAAMG,SAAS,GACvBtG,EAAQuG,aAAaL,EAAOG,GAAa,MACzCzE,EAAYsE,EAAOlE,EAAMD,GAAMvG,KAAK0E,QAAQsG,MAAO,CAACxE,EAAMD,IAAMxD,OAAOlB,GAGnF,EAEAoI,OAAQ,SAASxG,EAAO+C,GACpB,IAAID,EAAK/B,EAAUxE,KAAKkK,YAExB,IAAK3D,EAAM,EAAGA,EAAMC,EAAMnD,OAAQkD,IAAO,CACrC,IAAImE,EAAQlG,EAAQsG,SAASrH,GAC7BiD,EAAkBgE,GAAO,GACrBA,EAAMO,YAAczG,GACpBA,EAAQ0G,YAAYR,EAE5B,CACJ,EAEArG,OAAQ,WACJ,IACIxC,EACA0E,EACAlD,EAHAnB,EAASlC,KAAKyE,SAASvC,OAAOU,MAI9B4B,EAAUxE,KAAKkK,YACf9F,EAAWpE,KAAKoE,WAEpB,GAAc,MAAVlC,EAYJ,GARIA,aAAkB/B,EAAMM,KAAKmH,aAC7B1F,EAASA,EAAOgF,QAGdhF,aAAkBxB,GAA8C,mBAA1BC,EAASsB,KAAKC,KACtDA,EAAS,CAACA,IAGVlC,KAAKyE,SAASL,UAKd,GAJA+G,EAAsB3G,GAAS,GAE/BvE,EAAEuE,GAASF,KAAKtE,KAAKyE,SAASL,SAASC,OAAOnC,IAE1CsC,EAAQsG,SAASzH,OAGjB,IAFAxB,EAAU7B,KAAKyE,SAASvC,OAAOQ,WAE1B6D,EAAM,EAAGlD,EAASnB,EAAOmB,OAAQkD,EAAMlD,EAAQkD,IAChDH,EAAY5B,EAAQsG,SAASvE,GAAMrE,EAAOqE,GAAMvG,KAAK0E,QAAQsG,MAAO,CAAC9I,EAAOqE,IAAMxD,OAAOlB,SAIjG5B,EAAEuE,GAASF,KAAKnE,EAAMkE,OAAOD,EAAUlC,GAE/C,IAGJtB,EAAQwK,MAAQ,CACZC,QAASvG,EAAYnD,OAAO,CACxBC,KAAM,SAAS4C,EAASC,EAAUC,GAC9BI,EAAY9C,GAAGJ,KAAKK,KAAKjC,KAAMwE,EAASC,EAAUC,GAClD1E,KAAKuC,QAAUvC,KAAKwC,OAAOC,KAAKzC,MAEhCC,EAAED,KAAKwE,SAAShC,OAAOxC,KAAKuC,QAChC,EAEAC,OAAQ,WACJ,IAAIgC,EAAUxE,KAAKwE,QACf7B,EAAQ3C,KAAK2C,QAEjB,GAAoB,SAAhB6B,EAAQU,KACRvC,EAAQ3C,KAAKoF,cACbpF,KAAKyE,SAASxD,GAAS6C,IAAInB,QACxB,GAAoB,YAAhB6B,EAAQU,KAAoB,CACnC,IACIzB,EADAvB,EAASlC,KAAKyE,SAASxD,GAAS2B,MAGpC,GAAIV,aAAkBxB,EAAiB,CAEnC,IADAiC,EAAQ3C,KAAKoF,yBACQkG,MACjB,IAAK,IAAIC,EAAI,EAAGA,EAAIrJ,EAAOmB,OAAQkI,IAC/B,GAAIrJ,EAAOqJ,aAAcD,OAASpJ,EAAOqJ,KAAQ5I,EAAO,CACpDc,EAAQ8H,EACR,KACJ,OAGJ9H,EAAQvB,EAAOiB,QAAQR,GAEvBc,GAAS,EACTvB,EAAO6E,OAAOtD,EAAO,GAErBvB,EAAOsJ,KAAK7I,EAEpB,MACI3C,KAAKyE,SAASxD,GAAS6C,IAAInB,EAEnC,CACJ,EAEAkC,QAAS,WACL,IAAIlC,EAAQ3C,KAAKyE,SAASxD,GAAS2B,MAC/BV,EAASS,EACTuC,EAAOlF,KAAK+E,WACZP,EAAUxE,KAAKwE,QAEnB,GAAoB,YAAhBA,EAAQU,KACR,GAAIhD,aAAkBxB,EAAiB,CACnC,IAAI+C,GAAS,EAEb,IADAd,EAAQ3C,KAAKoF,yBACQkG,MACjB,IAAK,IAAIC,EAAI,EAAGA,EAAIrJ,EAAOmB,OAAQkI,IAC/B,GAAIrJ,EAAOqJ,aAAcD,OAASpJ,EAAOqJ,KAAQ5I,EAAO,CACpDc,EAAQ8H,EACR,KACJ,OAGJ9H,EAAQvB,EAAOiB,QAAQR,GAE3B6B,EAAQ6G,QAAW5H,GAAS,CAChC,MACIe,EAAQ6G,QAAUnJ,MAEC,SAAhBsC,EAAQU,OACH,QAARA,EACAvC,EAAQxC,EAAMQ,SAASgC,EAAO,cACf,kBAARuC,IACPvC,EAAQxC,EAAMQ,SAASgC,EAAO,wBAG9BA,SAAmD6B,EAAQ7B,QAAUA,EAAMhC,WAC3E6D,EAAQ6G,SAAU,EAElB7G,EAAQ6G,SAAU,EAG9B,EAEA1I,MAAO,WACH,IAAI6B,EAAUxE,KAAKwE,QACf7B,EAAQ6B,EAAQ7B,MAMpB,MAJoB,YAAhB6B,EAAQU,OACRvC,EAAQ6B,EAAQ6G,SAGb1I,CACX,EACAqB,QAAS,WACL/D,EAAED,KAAKwE,SAAS2E,IAAI/H,EAAQpB,KAAKuC,QACrC,KAIR3B,EAAQ6G,OAAS,CACbvF,OAAQtB,EAAQsB,OAAOP,OAAO,CAC1BkD,QAAS,SAASpD,GACd,IAAIM,EAAO/B,KACPkC,EAASH,EAAK0C,SAASvC,OAAOU,MAElC,GAAIV,aAAkBxB,GAAmBwB,aAAkB/B,EAAMM,KAAKmH,YAElE,GAAgB,QADhBnG,EAAIA,GAAK,CAAC,GACJkG,OACF5F,EAAKiI,IAAIvI,EAAEgC,MAAOhC,EAAE+E,YACjB,GAAgB,UAAZ/E,EAAEkG,OACT5F,EAAKkI,OAAOxI,EAAEgC,MAAOhC,EAAE+E,YACpB,IAAgB,cAAZ/E,EAAEkG,QAA0BlG,EAAEkG,SAAWzH,KAChD6B,EAAKsC,SACDtC,EAAK0C,SAAS9B,OACVZ,EAAK0C,SAAS9B,OAAO,CACrB,IAAI8I,EAAMvD,EAAwBnG,EAAK0C,SAAS9B,MAAMC,MAAO3C,EAAE8B,EAAKyC,SAAS/D,KAAK,eACtE,OAARgL,EACA1J,EAAKyC,QAAQkH,eAAiB,EAE9B3J,EAAKyC,QAAQ7B,MAAQ8I,CAE7B,OAIR1J,EAAKsC,QAEb,IAEJ1B,MAAOmC,EAAYnD,OAAO,CACtBC,KAAM,SAAS+J,EAAQlH,EAAUC,GAC7BI,EAAY9C,GAAGJ,KAAKK,KAAKjC,KAAM2L,EAAQlH,EAAUC,GAEjD1E,KAAKuC,QAAUvC,KAAKwC,OAAOC,KAAKzC,MAChCC,EAAED,KAAKwE,SAAShC,OAAOxC,KAAKuC,QAChC,EAEA6C,YAAa,WACT,IAEIzC,EAAOiJ,EAAQrF,EAAKlD,EAFpB0B,EAAW/E,KAAK+E,WAChB8G,EAAS,GAEb,IAAKtF,EAAM,EAAGlD,EAASrD,KAAKwE,QAAQE,QAAQrB,OAAQkD,EAAMlD,EAAQkD,KAC9DqF,EAAS5L,KAAKwE,QAAQE,QAAQ6B,IAEnBuF,WAIHnJ,GAHJA,EAAQiJ,EAAOG,WAAWpJ,QAEbA,EAAMqJ,UACPJ,EAAOjJ,MAEPiJ,EAAOvC,KAGnBwC,EAAOL,KAAKxL,KAAKqF,YAAY1C,EAAOoC,KAG5C,OAAO8G,CACX,EAEArJ,OAAQ,WACJ,IAEIN,EAGA0J,EACAK,EACAtJ,EACA4D,EACAlD,EATAwI,EAAS,GACTrH,EAAUxE,KAAKwE,QAEflC,EAAQtC,KAAK0E,QAAQ4F,YAActK,KAAK0E,QAAQ6F,UAChD2B,EAAiBlM,KAAK0E,QAAQwH,eAOlC,IAAK3F,EAAM,EAAGlD,EAASmB,EAAQE,QAAQrB,OAAQkD,EAAMlD,EAAQkD,KACzDqF,EAASpH,EAAQE,QAAQ6B,IAEduF,WAIHnJ,GAHJA,EAAQiJ,EAAOG,WAAWpJ,QAEbA,EAAMqJ,UACPJ,EAAOjJ,MAEPiJ,EAAOvC,KAGf/G,EACAuJ,EAAOL,KAAK7I,GAEZkJ,EAAOL,KAAKxL,KAAKqF,YAAY1C,EAAO3C,KAAK+E,cAMrD,GAAIzC,EAMA,KALAJ,EAASlC,KAAKyE,SAASvC,OAAOU,iBACRzC,EAAMM,KAAKmH,aAC7B1F,EAASA,EAAOgF,QAGf+E,EAAa,EAAGA,EAAaJ,EAAOxI,OAAQ4I,IAC7C,IAAK1F,EAAM,EAAGlD,EAASnB,EAAOmB,OAAQkD,EAAMlD,EAAQkD,IAAO,CACvD,IAAI4F,EAAcjK,EAAOqE,GAAK3D,IAAIN,GAElC,GADa8J,OAAOD,KAAiBN,EAAOI,GACjC,CACPJ,EAAOI,GAAc/J,EAAOqE,GAC5B,KACJ,CACJ,EAIR5D,EAAQ3C,KAAKyE,SAAS3D,GAAO8B,iBACRlC,EACjBiC,EAAMoE,OAAOsF,MAAM1J,EAAO,CAAC,EAAGA,EAAMU,QAAQN,OAAO8I,IAC3CK,KAAmBvJ,aAAiBnC,GAA8B,OAAVmC,GAAkBA,IAAUzC,IAAgBoC,EAG5GtC,KAAKyE,SAAS3D,GAAOgD,IAAI+H,EAAO,GAAGjJ,IAAIN,IAFvCtC,KAAKyE,SAAS3D,GAAOgD,IAAI+H,EAAO,GAIxC,EACAhH,QAAS,WACL,IAAIyH,EAQAC,EAPA/H,EAAUxE,KAAKwE,QACfE,EAAUF,EAAQE,QAClB/B,EAAQ3C,KAAKyE,SAAS3D,GAAO8B,MAC7BiJ,EAASlJ,EACTL,EAAQtC,KAAK0E,QAAQ4F,YAActK,KAAK0E,QAAQ6F,UAEhDrF,EAAOlF,KAAK+E,WAGV8G,aAAkBnL,IACpBmL,EAAS,IAAInL,EAAgB,CAACiC,KAGlC6B,EAAQkH,eAAiB,EAEzB,IAAK,IAAIO,EAAa,EAAGA,EAAaJ,EAAOxI,OAAQ4I,IAcjD,IAbAtJ,EAAQkJ,EAAOI,GAGX3J,GAASK,aAAiBnC,IAC1BmC,EAAQA,EAAMC,IAAIN,IAGV,QAAR4C,EACAvC,EAAQxC,EAAMQ,SAASkL,EAAOI,GAAa,cAC5B,kBAAR/G,IACPvC,EAAQxC,EAAMQ,SAASkL,EAAOI,GAAa,wBAG1CK,EAAc,EAAGA,EAAc5H,EAAQrB,OAAQiJ,IAG5B,MAFpBC,EAAc7H,EAAQ4H,GAAa3J,QAEC,KAAVA,IACtB4J,EAAc7H,EAAQ4H,GAAajD,MAG1B,MAAT1G,GAAiB4J,GAAe5J,EAAMhC,aACtC+D,EAAQ4H,GAAaR,UAAW,GACxB,EAIxB,EACA9H,QAAS,WACL/D,EAAED,KAAKwE,SAAS2E,IAAI/H,EAAQpB,KAAKuC,QACrC,KAwHR3B,EAAQiF,OAAS,CACboD,OAAQ1E,EAAO5C,OAAO,CAClBC,KAAM,SAASiE,EAAQpB,EAAUC,GAC7BH,EAAOvC,GAAGJ,KAAKK,KAAKjC,KAAM6F,EAAOrB,QAAQ,GAAIC,EAAUC,GACvD1E,KAAK6F,OAASA,EACd7F,KAAKkJ,SAAW,CAAC,CACrB,EAEArE,QAAS,SAASwD,GACd,IAAI1D,EAAU3E,KAAKyE,SAASwE,OAAOZ,GAC/BnE,EAAUlE,KAAKkJ,SAASb,GAExBnE,GACAlE,KAAK6F,OAAOrC,OAAO6E,EAAKnE,GAG5BA,EAAUS,EAAQ/B,MAElB5C,KAAKkJ,SAASb,GAAO,SAAS5G,GAC1BA,EAAEhB,KAAOkE,EAAQzC,OAEjBgC,EAAQzC,GAEJA,EAAEhB,OAASkE,EAAQzC,eACZT,EAAEhB,IAEjB,EAEAT,KAAK6F,OAAOpD,KAAK4F,EAAKrI,KAAKkJ,SAASb,GACxC,EAEArE,QAAS,WACL,IAAIE,EAEJ,IAAKA,KAAWlE,KAAKkJ,SACjBlJ,KAAK6F,OAAOrC,OAAOU,EAASlE,KAAKkJ,SAAShF,GAElD,IAGJmH,QAAS9G,EAAO5C,OAAO,CACnBC,KAAM,SAASiE,EAAQpB,EAAUC,GAC7BH,EAAOvC,GAAGJ,KAAKK,KAAKjC,KAAM6F,EAAOrB,QAAQ,GAAIC,EAAUC,GAEvD1E,KAAK6F,OAASA,EACd7F,KAAKuC,QAAUvC,KAAKwC,OAAOC,KAAKzC,MAChCA,KAAK6F,OAAOpD,KAAKrB,EAAQpB,KAAKuC,QAClC,EACAC,OAAQ,WACJxC,KAAKyE,SAASxD,GAAS6C,IAAI9D,KAAK2C,QACpC,EAEAkC,QAAS,WACL,IAAI4G,EAAMzL,KAAKyE,SAASxD,GAAS2B,MAEP,UAAtB5C,KAAKwE,QAAQU,KACTuG,IAAQvL,EACRF,KAAK6F,OAAO2G,MAAMf,EAAI9K,aAAeX,KAAK2C,SAE1C3C,KAAK6F,OAAO2G,OAAM,GAGtBxM,KAAK6F,OAAO2G,OAAc,IAARf,EAE1B,EAEA9I,MAAO,WACH,IAAI6B,EAAUxE,KAAKwE,QACf7B,EAAQ6B,EAAQ7B,MAMpB,MAJa,MAATA,GAA0B,OAATA,GAAuC,YAArB3C,KAAKwE,QAAQU,OAChDvC,EAAQ6B,EAAQ6G,SAGb1I,CACX,EAEAqB,QAAS,WACLhE,KAAK6F,OAAOrC,OAAOpC,EAAQpB,KAAKuC,QACpC,IAGJe,MAAOiB,EAAO5C,OAAO,CACjBC,KAAM,SAASiE,EAAQpB,EAAUC,GAC7BH,EAAOvC,GAAGJ,KAAKK,KAAKjC,KAAM6F,EAAOrB,QAAQ,GAAIC,EAAUC,GACvD1E,KAAKuC,QAAUvC,KAAKwC,OAAOC,KAAKzC,MAChCA,KAAK6F,OAASA,EACd7F,KAAK6F,OAAOpD,KAAKrB,EAAQpB,KAAKuC,QAClC,EAEAC,OAAQ,WACJxC,KAAKyE,SAASnB,MAAMQ,IAAI9D,KAAK6F,OAAO4G,QAAQnJ,MAChD,EAEAuB,QAAS,WACL,IACIvB,EAAQtD,KAAKyE,SAASnB,MAAMV,MAC5B8J,EAFO1M,KAEI6F,OAAO8G,OAFX3M,KAEyB6F,OAAO8G,OAAOD,IAAM,KACxD1M,KAAK6F,OAAO4G,MAAM,CAAEnJ,MAAOA,EAAOoJ,IAAKA,GAC3C,EAEA1I,QAAS,WACLhE,KAAK6F,OAAOrC,OAAOpC,EAAQpB,KAAKuC,QACpC,IAGJmK,IAAKnI,EAAO5C,OAAO,CACfC,KAAM,SAASiE,EAAQpB,EAAUC,GAC7BH,EAAOvC,GAAGJ,KAAKK,KAAKjC,KAAM6F,EAAOrB,QAAQ,GAAIC,EAAUC,GACvD1E,KAAKuC,QAAUvC,KAAKwC,OAAOC,KAAKzC,MAChCA,KAAK6F,OAASA,EACd7F,KAAK6F,OAAOpD,KAAKrB,EAAQpB,KAAKuC,QAClC,EAEAC,OAAQ,WACJxC,KAAKyE,SAASiI,IAAI5I,IAAI9D,KAAK6F,OAAO4G,QAAQC,IAC9C,EAEA7H,QAAS,WACL,IACI6H,EAAM1M,KAAKyE,SAASiI,IAAI9J,MACxBU,EAFOtD,KAEM6F,OAAO8G,OAFb3M,KAE2B6F,OAAO8G,OAAOrJ,MAAQ,KAC5DtD,KAAK6F,OAAO4G,MAAM,CAAEnJ,MAAOA,EAAOoJ,IAAKA,GAC3C,EAEA1I,QAAS,WACLhE,KAAK6F,OAAOrC,OAAOpC,EAAQpB,KAAKuC,QACpC,IAGJgH,QAAShF,EAAO5C,OAAO,CACnBC,KAAM,SAASiE,EAAQpB,EAAUC,GAC7BH,EAAOvC,GAAGJ,KAAKK,KAAKjC,KAAM6F,EAAOrB,QAAQ,GAAIC,EAAUC,GAEvD1E,KAAK6F,OAASA,CAClB,EAEAhB,QAAS,WACL,IAAI0E,EAAUvJ,KAAKyE,SAAS8E,QAAQ3G,MACpC5C,KAAK6F,OAAO+G,QAAQ,GAAGhE,MAAMY,QAAUD,EAAU,GAAK,MAC1D,IAGJE,UAAWlF,EAAO5C,OAAO,CACrBC,KAAM,SAASiE,EAAQpB,EAAUC,GAC7BH,EAAOvC,GAAGJ,KAAKK,KAAKjC,KAAM6F,EAAOrB,QAAQ,GAAIC,EAAUC,GAEvD1E,KAAK6F,OAASA,CAClB,EAEAhB,QAAS,WACL,IAAI4E,EAAYzJ,KAAKyE,SAASgF,UAAU7G,MACxC5C,KAAK6F,OAAO+G,QAAQ,GAAGhE,MAAMY,QAAUC,EAAY,OAAS,EAChE,IAGJoD,cAAetI,EAAO5C,OAAO,CACzBC,KAAM,SAASiE,EAAQpB,EAAUC,GAC7BH,EAAOvC,GAAGJ,KAAKK,KAAKjC,KAAM6F,EAAOrB,QAAQ,GAAIC,EAAUC,GAElDmB,EAAOgH,eAIZhH,EAAOgH,cAAchI,SACzB,IAGJgE,QAAStE,EAAO5C,OAAO,CACnBC,KAAM,SAASiE,EAAQpB,EAAUC,GAC7BH,EAAOvC,GAAGJ,KAAKK,KAAKjC,KAAM6F,EAAOrB,QAAQ,GAAIC,EAAUC,GAEvD1E,KAAK6F,OAASA,EACd7F,KAAK+I,SAAW/I,KAAKwE,QAAQsI,QACjC,EAEAjI,QAAS,WACD7E,KAAK6F,OAAOkH,QACZ/M,KAAK6F,OAAOkH,OAAO/M,KAAKyE,SAASoE,QAAQjG,OAEzC5C,KAAK+I,UAAY/I,KAAK6F,OAAOkD,UAC7B/I,KAAK6F,OAAOkD,SAAS/I,KAAK+I,SAElC,IAGJC,SAAUzE,EAAO5C,OAAO,CACpBC,KAAM,SAASiE,EAAQpB,EAAUC,GAC7BH,EAAOvC,GAAGJ,KAAKK,KAAKjC,KAAM6F,EAAOrB,QAAQ,GAAIC,EAAUC,GAEvD1E,KAAK6F,OAASA,CAClB,EAEAhB,QAAS,WACD7E,KAAK6F,OAAOkH,QACZ/M,KAAK6F,OAAOkH,QAAQ/M,KAAKyE,SAASuE,SAASpG,MAEnD,IAGJV,OAAQuD,EAAkB,SAAU,aAAc,iBAElD9C,MAAO4B,EAAO5C,OAAO,CACjBC,KAAM,SAASiE,EAAQpB,EAAUC,GAC7BH,EAAOvC,GAAGJ,KAAKK,KAAKjC,KAAM6F,EAAOrB,QAAQ,GAAIC,EAAUC,GAEvD1E,KAAK6F,OAASA,EACd7F,KAAKuC,QAAUvC,KAAKwC,OAAOC,KAAKzC,MAChCA,KAAK6F,OAAOmH,MAAM5L,EAAQpB,KAAKuC,SAE/B,IAAII,EAAQ3C,KAAKyE,SAAS9B,MAAMC,MAEhC5C,KAAKiN,0BAA4BvI,EAAQwH,iBAA4B,MAATvJ,GAAiBA,aAAiBnC,GAC9FR,KAAKkN,wBAA0BvK,aAAiBjC,EAChDV,KAAK6J,aAAc,CACvB,EAEAsD,QAAS,WACL,IAAIjL,EAEJ,OAAIlC,KAAK6F,OAAOuH,WACZlL,EAASlC,KAAK6F,OAAOuH,aACPlL,aAAkB1B,EACrB,CAAC0B,IAIZlC,KAAKyE,SAASvC,SACdA,EAASlC,KAAKyE,SAASvC,OAAOU,SAG7BV,GAAUA,aAAkB/B,EAAMM,KAAKmH,cACxC1F,EAASlC,KAAK6F,OAAOuB,WAAWI,YAG7BtF,EACX,EAEAM,OAAQ,WACJ,IAIIyJ,EAAYoB,EACZC,EAAYnB,EACZ5F,EAAKlD,EAAQnB,EANbS,EAAQ3C,KAAK6F,OAAOlD,QACpBL,EAAQtC,KAAK0E,QAAQyD,gBAAkBnI,KAAK0E,QAAQ6I,cACpDC,EAAmC,mBAAzB7M,EAASsB,KAAKU,GACxB8K,EAAqBzN,KAAKiN,yBACDpB,EAAS,GAMtC,GAFA7L,KAAK6J,aAAc,EAEfvH,EAEA,GAAc,KAAVK,IAAiB8K,GAAsBzN,KAAK0E,QAAQwH,gBACpDvJ,EAAQ,SACL,CAQH,IAPAT,EAASlC,KAAKmN,UAEVK,IACAH,EAAc1K,EAAMU,OACpBwI,EAASlJ,EAAM+K,MAAM,IAGpBnH,EAAM,EAAGlD,EAASnB,EAAOmB,OAAQkD,EAAMlD,EAAQkD,IAIhD,GAFA4F,GADAmB,EAAapL,EAAOqE,IACK3D,IAAIN,GAEzBkL,GACA,IAAKvB,EAAa,EAAGA,EAAaoB,EAAapB,IAC3C,GAAIE,GAAeN,EAAOI,GAAa,CACnCJ,EAAOI,GAAcqB,EACrB,KACJ,OAED,GAAInB,GAAexJ,EAAO,CAC7BA,EAAQ8K,EAAqBH,EAAanB,EAC1C,KACJ,CAGAN,EAAO,KAEHlJ,EADA3C,KAAKkN,wBACGrB,EACD4B,IAAuBnL,EACtBuJ,EAAO,GAEPA,EAAO,GAAGjJ,IAAIN,GAGlC,CAGJtC,KAAKyE,SAAS9B,MAAMmB,IAAInB,GACxB3C,KAAK6J,aAAc,CACvB,EAEAhF,QAAS,WACL,IAAK7E,KAAK6J,YAAa,CACnB,IAMaxG,EANTwC,EAAS7F,KAAK6F,OACdnB,EAAUmB,EAAOnB,QACjB6F,EAAY7F,EAAQ6I,cACpBjD,EAAa5F,EAAQyD,gBAAkBoC,EACvC5H,EAAQ3C,KAAKyE,SAAS9B,MAAMC,MAC5ByG,EAAO3E,EAAQ2E,MAAQ,GACvB9C,EAAM,EACNsF,EAAS,GAMb,GAJIlJ,IAAUzC,IACVyC,EAAQ,MAGR2H,EACA,GAAI3H,aAAiBjC,EAAiB,CAClC,IAAK2C,EAASV,EAAMU,OAAQkD,EAAMlD,EAAQkD,IACtCsF,EAAOtF,GAAO5D,EAAM4D,GAAK3D,IAAI0H,GAEjC3H,EAAQkJ,CACZ,MAAWlJ,aAAiBnC,IACxB6I,EAAO1G,EAAMC,IAAI2H,GACjB5H,EAAQA,EAAMC,IAAI0H,KAID,IAArB5F,EAAQoF,UAAuBpF,EAAQiJ,cAAe9H,EAAO+H,UAAa/H,EAAO+H,SAASC,QAW1FhI,EAAOlD,MAAMA,IAVT4H,IAAcD,GAAejB,IAC7BA,EAAO1G,GAGN0G,IAAS1G,GAAmB,IAAVA,IAAgB+B,EAAQwH,eAG3CrG,EAAOiI,WAAWnL,EAAO0G,GAFzBxD,EAAOlD,MAAMA,GAOzB,CAEA3C,KAAK6J,aAAc,CACvB,EAEA7F,QAAS,WACLhE,KAAK6F,OAAOrC,OAAOpC,EAAQpB,KAAKuC,QACpC,IAEJwL,aAAc,CACVpL,MAAO4B,EAAO5C,OAAO,CACjBC,KAAM,SAASiE,EAAQpB,EAAUC,GAC7BH,EAAOvC,GAAGJ,KAAKK,KAAKjC,KAAM6F,EAAOrB,QAAQ,GAAIC,EAAUC,GAEvD1E,KAAK6F,OAASA,EACd7F,KAAKuC,QAAUvC,KAAKwC,OAAOC,KAAKzC,MAChCA,KAAK6F,OAAOmH,MAAM5L,EAAQpB,KAAKuC,SAC/BvC,KAAK6J,aAAc,CACvB,EAEArH,OAAQ,WACJ,IAAIT,EAAO/B,KACPgO,EAAYjM,EAAK0C,SAAS3D,GAAO8B,MACjCsJ,EAAiBnK,EAAK2C,QAAQwH,eAC9B+B,EAAelM,EAAK8D,OAAOoC,SAASR,SACpCyG,EAAqBnM,EAAK8D,OAAOsI,uBAAyBpM,EAAK8D,OAAOuI,iBAAoBrM,EAAK8D,OAAOoC,SAASmF,SAASa,IAAiBlM,EAAK8D,OAAOlD,QACrJ0L,EAAanC,IAAmD,IAAjCnK,EAAK8D,OAAOnB,QAAQoF,SAAsB/H,EAAK8D,OAAOlD,QAAUuL,EAE/F5L,EAAQtC,KAAK0E,QAAQyD,gBAAkBnI,KAAK0E,QAAQ6I,cAMxD,GAJAc,EAAYA,EAAUX,MAAQW,EAAUX,MAAM,GAAKW,EAEnDtM,EAAK8H,aAAc,EAEfmE,aAAqBtN,EAAiB,CAUtC,IATA,IAKI4N,EACAC,EACAC,EAPAvE,EAAS,GACTwE,EAAYJ,EAAUhL,OACtBkI,EAAI,EAAGmD,EAAI,EACXC,EAAMX,EAAUzC,GAMboD,IAAQzO,GAAa,CAExB,IADAsO,GAAQ,EACHE,EAAI,EAAGA,EAAID,EAAWC,IAUvB,GATIxC,EACOmC,EAAUK,IAAMC,GAIvBJ,GAFAA,EAAWF,EAAUK,IAED9L,IAAM2L,EAAS3L,IAAIN,GAASiM,KAC5BI,EAAI/L,IAAM+L,EAAI/L,IAAIN,GAASqM,GAGzC,CACNN,EAAUtH,OAAO2H,EAAG,GACpBD,GAAa,EACbD,GAAQ,EACR,KACJ,CAGCA,EAKDjD,GAAK,GAJLtB,EAAOuB,KAAKmD,GACZC,EAAYZ,EAAWzC,EAAG,GAC1B+C,EAAc/C,GAKlBoD,EAAMX,EAAUzC,EACpB,CAEAqD,EAAYZ,EAAWA,EAAU3K,OAAQ,EAAGgL,GAExCpE,EAAO5G,QACP2K,EAAU9K,QAAQ,SAAU,CACxByE,OAAQ,SACRnB,MAAOyD,EACPxG,MAAO6K,IAIXD,EAAUhL,QACV2K,EAAU9K,QAAQ,SAAU,CACxByE,OAAQ,MACRnB,MAAO6H,EACP5K,MAAOuK,EAAU3K,OAAS,GAGtC,MACItB,EAAK0C,SAAS3D,GAAOgD,IAAIuK,GAG7BtM,EAAK8H,aAAc,CACvB,EAEAhF,QAAS,WACL,IAAK7E,KAAK6J,YAAa,CACnB,IAKaxG,EAETwL,EAPAnK,EAAU1E,KAAK0E,QACfmB,EAAS7F,KAAK6F,OACdvD,EAAQoC,EAAQyD,gBAAkBzD,EAAQ6I,cAC1C5K,EAAQ3C,KAAKyE,SAAS9B,MAAMC,MAC5BnC,EAAOkC,EACP4D,EAAM,EACNsF,EAAS,GAGb,GAAIvJ,EACA,GAAIK,aAAiBjC,EAAiB,CAClC,IAAK2C,EAASV,EAAMU,OAAQkD,EAAMlD,EAAQkD,IACtCsI,EAAgBlM,EAAM4D,GACtBsF,EAAOtF,GAAOsI,EAAcjM,IAAMiM,EAAcjM,IAAIN,GAASuM,EAEjElM,EAAQkJ,CACZ,MAAWlJ,aAAiBnC,IACxBmC,EAAQA,EAAMC,IAAIN,KAGD,IAArBoC,EAAQoF,WAAiD,IAA3BpF,EAAQwH,eACtCrG,EAAOiI,WAAWrN,EAAMkC,GAExBkD,EAAOlD,MAAMA,EAEtB,CACH,EAEAqB,QAAS,WACLhE,KAAK6F,OAAOrC,OAAOpC,EAAQpB,KAAKuC,QACpC,KAGRuM,MAAO,CACH3M,aAAcsD,EAAkB,eAAgB,eAAgB,8BAGpEiC,YAAa,CACT/E,MAAO4B,EAAO5C,OAAO,CACjBC,KAAM,SAASiE,EAAQpB,EAAUC,GAC7BH,EAAOvC,GAAGJ,KAAKK,KAAKjC,KAAM6F,EAAOrB,QAAQ,GAAIC,EAAUC,GAEvD1E,KAAK6F,OAASA,EACd7F,KAAKuC,QAAUvC,KAAKwC,OAAOC,KAAKzC,MAChCA,KAAK6F,OAAOmH,MAAM5L,EAAQpB,KAAKuC,SAC/BvC,KAAK6J,aAAc,CACvB,EAEArH,OAAQ,WACJ,IAAIT,EAAO/B,KACPgO,EAAYjM,EAAK0C,SAAS3D,GAAO8B,MACjCsJ,EAAiBnK,EAAK2C,QAAQwH,eAC9BmC,EAAYnC,EAAiBnK,EAAK8D,OAAOlD,QAAUZ,EAAK8D,OAAOkJ,YAE/DzM,EAAQtC,KAAK0E,QAAQyD,gBAAkBnI,KAAK0E,QAAQ6I,cAMxD,GAJAc,EAAYA,EAAUX,MAAM,GAE5B3L,EAAK8H,aAAc,EAEfmE,aAAqBtN,EAAiB,CAYtC,IAXA,IAOI4N,EACAC,EACAC,EATAvE,EAAS,GAETwE,EAAYJ,EAAUhL,OAEtBkI,EAAI,EAAGmD,EAAI,EACXC,EAAMX,EAAUzC,GAMboD,IAAQzO,GAAa,CAExB,IADAsO,GAAQ,EACHE,EAAI,EAAGA,EAAID,EAAWC,IAUvB,GATIxC,EACOmC,EAAUK,IAAMC,GAIvBJ,GAFAA,EAAWF,EAAUK,IAED9L,IAAM2L,EAAS3L,IAAIN,GAASiM,KAC5BI,EAAI/L,IAAM+L,EAAI/L,IAAIN,GAASqM,GAGzC,CACNN,EAAUtH,OAAO2H,EAAG,GACpBD,GAAa,EACbD,GAAQ,EACR,KACJ,CAGCA,EAKDjD,GAAK,GAJLtB,EAAOuB,KAAKmD,GACZC,EAAYZ,EAAWzC,EAAG,GAC1B+C,EAAc/C,GAKlBoD,EAAMX,EAAUzC,EACpB,CAEAqD,EAAYZ,EAAWA,EAAU3K,OAAQ,EAAGgL,GAExCpE,EAAO5G,QACP2K,EAAU9K,QAAQ,SAAU,CACxByE,OAAQ,SACRnB,MAAOyD,EACPxG,MAAO6K,IAIXD,EAAUhL,QACV2K,EAAU9K,QAAQ,SAAU,CACxByE,OAAQ,MACRnB,MAAO6H,EACP5K,MAAOuK,EAAU3K,OAAS,GAGtC,MACItB,EAAK0C,SAAS3D,GAAOgD,IAAIuK,GAG7BtM,EAAK8H,aAAc,CACvB,EAEAhF,QAAS,WACL,IAAK7E,KAAK6J,YAAa,CACnB,IAKaxG,EAETwL,EAPAnK,EAAU1E,KAAK0E,QACfmB,EAAS7F,KAAK6F,OACdvD,EAAQoC,EAAQyD,gBAAkBzD,EAAQ6I,cAC1C5K,EAAQ3C,KAAKyE,SAAS9B,MAAMC,MAC5BnC,EAAOkC,EACP4D,EAAM,EACNsF,EAAS,GAOb,GAJIlJ,IAAUzC,IACVyC,EAAQ,MAGRL,EACA,GAAIK,aAAiBjC,EAAiB,CAClC,IAAK2C,EAASV,EAAMU,OAAQkD,EAAMlD,EAAQkD,IACtCsI,EAAgBlM,EAAM4D,GACtBsF,EAAOtF,GAAOsI,EAAcjM,IAAMiM,EAAcjM,IAAIN,GAASuM,EAEjElM,EAAQkJ,CACZ,MAAWlJ,aAAiBnC,IACxBmC,EAAQA,EAAMC,IAAIN,KAID,IAArBoC,EAAQoF,WAAiD,IAA3BpF,EAAQwH,gBAA4BrG,EAAOmJ,WAGzEnJ,EAAOlD,MAAMA,GAFbkD,EAAOiI,WAAWrN,EAAMkC,EAIhC,CACJ,EAEAqB,QAAS,WACLhE,KAAK6F,OAAOrC,OAAOpC,EAAQpB,KAAKuC,QACpC,KAIR0M,UAAW,CACP/M,OAAQuD,EAAkB,SAAU,aAAc,iBAAiB9D,OAAO,CACtEsE,UAAW,SAASxE,GAChB,IAAI8E,EACAlD,EAGA5C,EAAMoB,EAFNgE,EAAS7F,KAAK6F,OACdqJ,EAAWzN,EAAE0F,YAActB,EAAOW,QAGtC,GAAI0I,EAAS7L,OAIT,IAHA5C,EAAOgB,EAAE8F,gBAAkB1B,EAAOkJ,YAClClN,EAAU7B,KAAKyE,SAASvC,OAAOQ,WAE1B6D,EAAM,EAAGlD,EAAS5C,EAAK4C,OAAQkD,EAAMlD,EAAQkD,IAC9CH,EAAY8I,EAAS3I,GAAM9F,EAAK8F,GAAMvG,KAAKsG,IAAI7E,EAAEwD,IAAK,CAACxE,EAAK8F,IAAMxD,OAAOlB,GAGrF,KAIRsN,KAAM,CACFjN,OAAQuD,EAAkB,SAAU,aAAc,iBAAiB9D,OAAO,CACtEsE,UAAW,SAASxE,GAChB,IAAI8E,EACJlD,EAGAxB,EACApB,EAHAoF,EAAS7F,KAAK6F,OACdqJ,EAAWzN,EAAE0F,YAActB,EAAOW,QAIlC,GAAI0I,EAAS7L,OAIT,IAHA5C,EAAOgB,EAAE8F,gBAAkB1B,EAAOkJ,YAClClN,EAAU7B,KAAKyE,SAASvC,OAAOQ,WAE1B6D,EAAM,EAAGlD,EAAS5C,EAAK4C,OAAQkD,EAAMlD,EAAQkD,IAC9CH,EAAY8I,EAAS3I,GAAM9F,EAAK8F,GAAMvG,KAAKsG,IAAI7E,EAAEwD,IAAK,CAACxE,EAAK8F,IAAMxD,OAAOlB,GAGrF,KAIRuN,MAAO,CACH/F,KAAM9E,EAAO5C,OAAO,CAChBC,KAAM,SAASiE,EAAQpB,EAAUC,GAC7BH,EAAOvC,GAAGJ,KAAKK,KAAKjC,KAAM6F,EAAOrB,QAAQ,GAAIC,EAAUC,GAEvD1E,KAAK6F,OAASA,CAClB,EACAhB,QAAS,WACL,IAAIwE,EAAOrJ,KAAKyE,SAAS4E,KAAKzG,MAElB,MAARyG,IACAA,EAAO,IAEXrJ,KAAK6F,OAAOwD,KAAKA,EACrB,MAKZ,IAAIuF,EAAc,SAASS,EAAK9I,EAAK0D,EAAQD,GAEzCC,EAASA,GAAU,EAEnB,IAKIxG,EALA6L,GAHJtF,EAAMA,GAAO,IAGO3G,OAChBkM,EAAYF,EAAIhM,OAEhBmM,EAAU,GAAG9B,MAAMzL,KAAKoN,EAAK9I,EAAM0D,GACnCwF,EAAgBD,EAAQnM,OAG5B,GAAIiM,EAAW,CAIX,IAHAA,EAAY/I,EAAM+I,EAClB7L,EAAQ,EAED8C,EAAM+I,EAAW/I,IACpB8I,EAAI9I,GAAOyD,EAAIvG,GACfA,IAGJ4L,EAAIhM,OAASiM,CACjB,MAAO,GAAIrF,EAIP,IAHAoF,EAAIhM,OAASkD,EAEb0D,GAAU1D,EACHA,EAAM0D,UACFoF,IAAMpF,GAIrB,GAAIwF,EAAe,CAIf,IAHAA,EAAgBlJ,EAAMkJ,EACtBhM,EAAQ,EAED8C,EAAMkJ,EAAelJ,IACxB8I,EAAI9I,GAAOiJ,EAAQ/L,GACnBA,IAGJ4L,EAAIhM,OAASoM,CACjB,CAIA,IAFAlJ,EAAM8I,EAAIhM,OAEHkD,EAAMgJ,UACFF,EAAI9I,GACXA,GAER,EAEImJ,EAAgB7O,EAAMc,OAAQ,CAC9BC,KAAM,SAAS+J,EAAQjH,GACnB1E,KAAK2L,OAASA,EACd3L,KAAK0E,QAAUA,EACf1E,KAAK2P,UAAY,EACrB,EAEAlN,KAAM,SAASgC,GACX,IAAI4D,EACAuH,EACAC,EACAC,EACAC,EACAC,EACAC,EAAgBjQ,gBAAgBkQ,EAChCC,EAAkBnQ,KAAKY,UAE3B,IAAKyH,KAAO5D,EACJ4D,GAAOvH,EACP8O,GAAW,EACJvH,GAAOtH,EACd8O,GAAY,EACLxH,GAAOrH,GAAWiP,EAElB5H,GAAOpH,EACd8O,GAAa,EAnsDnB,OAosDa1H,EACP2H,GAAS,EAEThQ,KAAKoQ,aAAa/H,EAAK5D,EAAU0L,GANjCL,GAAY,EAShBD,GACA7P,KAAKoQ,aAAarP,EAAQ0D,EAAU0L,GAGpCP,GACA5P,KAAKoQ,aAAatP,EAAO2D,EAAU0L,GAGnCJ,GACA/P,KAAKoQ,aAAanP,EAASwD,EAAU0L,GAGrCL,IAAcG,GACdjQ,KAAKoQ,aAAapP,EAAQyD,EAAU0L,GAGpCH,IAAWC,GACXjQ,KAAKoQ,aA3tDP,MA2tDyB3L,EAAU0L,GAGjCF,GAAiBjQ,KAAK2L,QAAU3L,KAAK2L,OAAOkB,eAC5C7M,KAAKoQ,aAAa,gBAAiB3L,EAAU0L,EAErD,EAEAvP,QAAS,WACL,OAAOA,EAAQZ,KAAK2L,OAAOxB,SAAShF,gBAAkB,CAAC,CAC3D,EAEAiL,aAAc,SAASC,EAAM5L,EAAU0L,GACnC,IAEIvL,EAFA0L,EAASH,EAAgBE,IAASzP,EAAQyP,GAC1CV,EAAY3P,KAAK2P,UAEjBhL,EAAUF,EAAS4L,GAEvB,GAAIC,EAKA,GAJAA,EAAS,IAAIA,EAAOtQ,KAAK2L,OAAQlH,EAAUzE,KAAK0E,SAEhDiL,EAAUnE,KAAK8E,GAEX3L,aAAmBjD,EACnB4O,EAAO7N,KAAKkC,GACZgL,EAAUnE,KAAK7G,QAEf,IAAKC,KAAaD,EACd2L,EAAO7N,KAAKkC,EAASC,GACrB+K,EAAUnE,KAAK7G,EAAQC,SAG5B,GAAa,aAATyL,EACP,MAAM,IAAIE,MAAM,OAASF,EAAO,oCAAsCrQ,KAAK2L,OAAOxB,SAAShF,cAAgB,WAEnH,EAEAnB,QAAS,WACL,IAAIuC,EACAlD,EACAsM,EAAY3P,KAAK2P,UAErB,IAAKpJ,EAAM,EAAGlD,EAASsM,EAAUtM,OAAQkD,EAAMlD,EAAQkD,IACnDoJ,EAAUpJ,GAAKvC,SAEvB,IAGAkM,EAAsBR,EAAc/N,OAAQ,CAC5Cf,QAAS,WACL,OAAOA,EAAQiF,OAAO7F,KAAK2L,OAAOjH,QAAQ2L,KAAKlL,gBAAkB,CAAC,CACtE,EAEAiL,aAAc,SAASC,EAAM5L,EAAU0L,GACnC,IAEIvL,EAFA0L,EAASH,EAAgBE,IAASzP,EAAQiF,OAAOwK,GACjDV,EAAY3P,KAAK2P,UAEjBhL,EAAUF,EAAS4L,GAEvB,IAAIC,EAgBA,MAAM,IAAIC,MAAM,OAASF,EAAO,oCAAsCrQ,KAAK2L,OAAOjH,QAAQ2L,KAAO,WAVjG,GALAC,EAAS,IAAIA,EAAOtQ,KAAK2L,OAAQlH,EAAUzE,KAAK2L,OAAOjH,SAEvDiL,EAAUnE,KAAK8E,GAGX3L,aAAmBjD,EACnB4O,EAAO7N,KAAKkC,GACZgL,EAAUnE,KAAK7G,QAEf,IAAKC,KAAaD,EACd2L,EAAO7N,KAAKkC,EAASC,GACrB+K,EAAUnE,KAAK7G,EAAQC,GAMvC,IAWJ,IAAI4L,EAAiB,wCACjBC,EAAmB,MAEvB,SAASC,EAAcjO,GACnB,IACI8D,EACAlD,EACAsN,EACAC,EACAvI,EACA1F,EACAkO,EAPAnN,EAAS,CAAC,EAWd,IAAK6C,EAAM,EAAGlD,GAFdwN,EAASpO,EAAKqO,MAAMN,IAEUnN,OAAQkD,EAAMlD,EAAQkD,IAEhDqK,GADAD,EAAQE,EAAOtK,IACIpD,QAAQ,KAE3BkF,EAAMsI,EAAM/M,UAAU,EAAGgN,GAGF,MAFvBjO,EAAQgO,EAAM/M,UAAUgN,EAAa,IAE3BxN,OAAO,KACbT,EAAQ+N,EAAc/N,IAG1Be,EAAO2E,GAAO1F,EAGlB,OAAOe,CACX,CAEA,SAASqN,EAAetM,EAAUvC,EAAQgD,GACtC,IAAIP,EACAjB,EAAS,CAAC,EAEd,IAAKiB,KAAWF,EACZf,EAAOiB,GAAW,IAAIO,EAAKhD,EAAQuC,EAASE,IAGhD,OAAOjB,CACX,CAEA,SAAS0C,EAAY5B,EAAStC,EAAQ8I,EAAOnJ,GAEzC,GAAK2C,IAAWA,EAAQQ,aAAa,QAAU7E,EAAM8E,GAAK,QAA1D,CAIA,IACIsB,EAIA9B,EAEAkH,EAPAqF,EAAOxM,EAAQQ,aAAa,QAAU7E,EAAM8E,GAAK,QAEjDxC,EAAO+B,EAAQQ,aAAa,QAAU7E,EAAM8E,GAAK,QACjDgM,EAAe,GACfC,GAAO,EAEPxM,EAAU,CAAC,EAGf7C,EAAUA,GAAW,CAACK,IAElB8O,GAAQvO,IACR0O,EAAc3M,GAAS,GAGvBwM,IACArF,EAzER,SAA8BnH,EAASwG,GACnC,IAAInF,EAAS1F,EAAMiR,WAAW5M,EAAS,CAAC,EAAGwG,GAE3C,GAAInF,EACA,OAAO,IAAIqK,EAAoBrK,EAEvC,CAmEiBwL,CAAqB7M,EAASwG,IAGvCvI,IACAA,EAAOiO,EAAcjO,EAAK6O,QAAQb,EAAkB,KAE/C9E,KACDjH,EAAUvE,EAAMoR,aAAa/M,EAAS,CAAE+F,UAAW,GAAID,WAAY,GAAIlG,SAAU,GAAIwF,YAAaxI,EAAQ8K,gBAAgB,EAAOpC,UAAU,GAAQ5H,IAC3I8I,MAAQA,EAChBW,EAAS,IAAI+D,EAAclL,EAASE,IAGxCiH,EAAOzJ,OAASA,EAEhBuC,EAAWsM,EAAetO,EAAMZ,EAASH,GAErCgD,EAAQN,WACRK,EAASL,SAAW,IAAID,EAAgBtC,EAAS,GAAI6C,EAAQN,WAG7DK,EAAS+M,QACT/O,EAAKwG,OAASxG,EAAKwG,QAAU,CAAC,EAC9BxG,EAAKwG,OAAOuI,MAAQ/O,EAAK+O,MACzB/M,EAAS+M,MAAMxN,iBACRS,EAAS+M,OAGhB/M,EAASvC,SACTgP,GAAO,GAGPzO,EAAK2F,OACL3D,EAAS2D,KAAO2I,EAAetO,EAAK2F,KAAMvG,EAASH,IAGnDe,EAAKmG,QACLnE,EAASmE,MAAQmI,EAAetO,EAAKmG,MAAO/G,EAASH,IAGrDe,EAAKwG,SACLxE,EAASwE,OAAS8H,EAAetO,EAAKwG,OAAQpH,EAASoC,IAGvDxB,EAAK8F,MACL9D,EAAS8D,IAAMwI,EAAetO,EAAK8F,IAAK1G,EAASH,IAGrDiK,EAAOlJ,KAAKgC,IAGZkH,IACAnH,EAAQiN,mBAAqB9F,GAGjC,IAAIb,EAAWtG,EAAQsG,SACvB,GAAIoG,GAAQpG,IAAatG,EAAQQ,aAAa,QAAU7E,EAAM8E,GAAK,QAAS,CAExE,IAAKsB,EAAM,EAAGA,EAAMuE,EAASzH,OAAQkD,IACjC0K,EAAa1K,GAAOuE,EAASvE,GAGjC,IAAKA,EAAM,EAAGA,EAAM0K,EAAa5N,OAAQkD,IACrCH,EAAY6K,EAAa1K,GAAMrE,EAAQ8I,EAAOnJ,EAEtD,CAlFA,CAmFJ,CAEA,SAASY,EAAKiP,EAAKC,GACf,IAAIpL,EACAlD,EACAuO,EACA5G,EAAQ7K,EAAM8G,oBAAoB,GAAGyG,MAAMzL,KAAK4P,UAAW,IAK/D,IAHAF,EAASxR,EAAMiC,WAAWuP,GAGrBpL,EAAM,EAAGlD,GAFdqO,EAAMzR,EAAEyR,IAEmBrO,OAAQkD,EAAMlD,EAAQkD,IAEvB,KADtBqL,EAAOF,EAAInL,IACFuL,UACL1L,EAAYwL,EAAMD,EAAQ3G,EAGtC,CAEA,SAASmG,EAAc3M,EAASuN,GAC5B,IAAIC,EAAgBxN,EAAQiN,mBAc5B,GAZIO,IACAA,EAAchO,UAEV9C,SACOsD,EAAQiN,mBACRjN,EAAQsE,gBACftE,EAAQsE,gBAAgB,sBAExBtE,EAAQiN,mBAAqB,MAIjCM,EAAe,CACf,IAAIlM,EAAS1F,EAAM8R,eAAehS,EAAEuE,IAChCqB,UAAiBA,EAAO7B,UAAY7C,GACpC0E,EAAO7B,SAEf,CACJ,CAEA,SAAS0C,EAAkBlC,EAAS0N,GAE3B1N,IAIL2M,EAAc3M,EAAS0N,GAEvB/G,EAAsB3G,EAAS0N,GACnC,CAEA,SAAS/G,EAAsB3G,EAAS0N,GACpC,IAAIpH,EAAWtG,EAAQsG,SAEvB,GAAIA,EACA,IAAK,IAAIvE,EAAM,EAAGlD,EAASyH,EAASzH,OAAQkD,EAAMlD,EAAQkD,IACtDG,EAAkBoE,EAASvE,GAAM2L,EAG7C,CAqBA,SAAShK,EAAwBvF,EAAO2H,GACpC,IAEIjH,EACAgD,EAHAwF,EAAS,GACTtF,EAAM,EAIV,IAAK+D,EACD,OAAO3H,EAGX,GAAIA,aAAiBjC,EAAiB,CAClC,IAAK2C,EAASV,EAAMU,OAAQkD,EAAMlD,EAAQkD,IACtCF,EAAO1D,EAAM4D,GACbsF,EAAOtF,GAAOF,EAAKzD,IAAMyD,EAAKzD,IAAI0H,GAAcjE,EAAKiE,GAEzD3H,EAAQkJ,CACZ,MAAWlJ,aAAiBnC,IACxBmC,EAAQA,EAAMC,IAAI0H,IAGtB,OAAO3H,CACX,CAEAxC,EAAMqD,OA1CN,SAAgBkO,GACZ,IAAInL,EAAKlD,EAIT,IAAKkD,EAAM,EAAGlD,GAFdqO,EAAMzR,EAAEyR,IAEmBrO,OAAQkD,EAAMlD,EAAQkD,IAC7CG,EAAkBgL,EAAInL,IAAM,EAEpC,EAmCApG,EAAMsC,KAAOA,EACbtC,EAAMM,KAAKG,QAAUA,EACrBT,EAAMM,KAAK8D,OAASA,EACpBpE,EAAMgS,OApCN,SAAgBtM,EAAQuM,GACpB,IAAI5N,EAAUqB,EAAOrB,QACjBwN,EAAgBxN,EAAQ,GAAGiN,mBAE3BO,GACAvP,EAAK+B,EAASwN,EAAc9P,OAAQkQ,EAE5C,EA+BAjS,EAAMiC,WAAa,SAASuP,GAKxB,OAJMA,aAAkBnR,IACpBmR,EAAS,IAAInR,EAAiBmR,IAG3BA,CACX,EAEAxR,EAAMkS,oBAAsB,SAASC,GACjC,IAAIlL,EAAajH,EAAMM,KAAK6G,uBAAuBiL,OAAOD,GAwB1D,OANAlL,EAAW2C,QAhBX,SAASyI,EAAc/R,GACnB,IAAI8K,EAAGT,EAEP,IAAKS,EAAI,EAAGA,EAAI9K,EAAK4C,OAAQkI,IACzB9K,EAAK8K,GAAGkH,iBAER3H,EAAWrK,EAAK8K,GAAGT,UAEVf,QAETtJ,EAAK8K,GAAG/E,MAAQsE,EAASrK,OAEzB+R,EAAc/R,EAAK8K,GAAG/E,MAE9B,CAIAgM,CAAcpL,EAAW3G,QAEzB2G,EAAWsL,MAAM7K,YAAcT,EAExBA,EAAWsL,KACtB,CAEH,CArlED,CAqlEGtS,OAAOD,MAAMwS,QACFxS,KAIf","sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('kendo.core.js'), require('kendo.data.js')) :\n typeof define === 'function' && define.amd ? define(['kendo.core', 'kendo.data'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (global.kendobinder = global.kendobinder || {}, global.kendobinder.js = factory()));\n})(this, (function () {\n var __meta__ = {\n id: \"binder\",\n name: \"MVVM\",\n category: \"framework\",\n description: \"Model View ViewModel (MVVM) is a design pattern which helps developers separate the Model (the data) from the View (the UI).\",\n depends: [ \"core\", \"data\" ]\n };\n\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n encode = kendo.htmlEncode,\n Observable = kendo.Observable,\n ObservableObject = kendo.data.ObservableObject,\n ObservableArray = kendo.data.ObservableArray,\n toString = {}.toString,\n binders = {},\n Class = kendo.Class,\n VALUE = \"value\",\n SOURCE = \"source\",\n EVENTS = \"events\",\n CHECKED = \"checked\",\n CSS = \"css\",\n deleteExpando = true,\n FUNCTION = \"function\",\n CHANGE = \"change\";\n\n (function() {\n var a = document.createElement(\"a\");\n\n try {\n delete a.test;\n } catch (e) {\n deleteExpando = false;\n }\n })();\n\n var Binding = Observable.extend( {\n init: function(parents, path) {\n var that = this;\n\n Observable.fn.init.call(that);\n\n that.source = parents[0];\n that.parents = parents;\n that.path = path;\n that.dependencies = {};\n that.dependencies[path] = true;\n that.observable = that.source instanceof Observable;\n\n that._access = function(e) {\n that.dependencies[e.field] = true;\n };\n\n if (that.observable) {\n that._change = function(e) {\n that.change(e);\n };\n\n that.source.bind(CHANGE, that._change);\n }\n },\n\n _parents: function() {\n var parents = this.parents;\n var value = this.get();\n\n if (value && typeof value.parent == \"function\") {\n var parent = value.parent();\n\n if ($.inArray(parent, parents) < 0) {\n parents = [parent].concat(parents);\n }\n }\n\n return parents;\n },\n\n change: function(e) {\n var dependency,\n ch,\n field = e.field,\n that = this;\n\n if (that.path === \"this\") {\n that.trigger(CHANGE, e);\n } else {\n for (dependency in that.dependencies) {\n if (dependency.indexOf(field) === 0) {\n ch = dependency.charAt(field.length);\n\n if (!ch || ch === \".\" || ch === \"[\") {\n that.trigger(CHANGE, e);\n break;\n }\n }\n }\n }\n },\n\n start: function(source) {\n source.bind(\"get\", this._access);\n },\n\n stop: function(source) {\n source.unbind(\"get\", this._access);\n },\n\n get: function() {\n\n var that = this,\n source = that.source,\n index = 0,\n path = that.path,\n result = source;\n\n if (!that.observable) {\n return result;\n }\n\n that.start(that.source);\n\n result = source.get(path);\n\n // Traverse the observable hierarchy if the binding is not resolved at the current level.\n while (result === undefined$1 && source) {\n\n source = that.parents[++index];\n\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n\n // second pass try to get the parent from the object hierarchy\n if (result === undefined$1) {\n source = that.source; //get the initial source\n\n while (result === undefined$1 && source) {\n source = source.parent();\n\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n }\n\n // If the result is a function - invoke it\n if (typeof result === \"function\") {\n index = path.lastIndexOf(\".\");\n\n // If the function is a member of a nested observable object make that nested observable the context (this) of the function\n if (index > 0) {\n source = source.get(path.substring(0, index));\n }\n\n // Invoke the function\n that.start(source);\n\n if (source !== that.source) {\n result = result.call(source, that.source);\n } else {\n result = result.call(source);\n }\n\n that.stop(source);\n }\n\n // If the binding is resolved by a parent object\n if (source && source !== that.source) {\n\n that.currentSource = source; // save parent object\n\n // Listen for changes in the parent object\n source.unbind(CHANGE, that._change)\n .bind(CHANGE, that._change);\n }\n\n that.stop(that.source);\n\n return result;\n },\n\n set: function(value) {\n var source = this.currentSource || this.source;\n\n var field = kendo.getter(this.path)(source);\n\n if (typeof field === \"function\") {\n if (source !== this.source) {\n field.call(source, this.source, value);\n } else {\n field.call(source, value);\n }\n } else {\n source.set(this.path, value);\n }\n },\n\n destroy: function() {\n if (this.observable) {\n this.source.unbind(CHANGE, this._change);\n if (this.currentSource) {\n this.currentSource.unbind(CHANGE, this._change);\n }\n }\n\n this.unbind();\n }\n });\n\n var EventBinding = Binding.extend( {\n get: function() {\n var source = this.source,\n path = this.path,\n index = 0,\n handler;\n\n handler = source.get(path);\n\n while (!handler && source) {\n source = this.parents[++index];\n\n if (source instanceof ObservableObject) {\n handler = source.get(path);\n }\n }\n\n if (!handler) {\n return;\n }\n\n return handler.bind(source);\n }\n });\n\n var TemplateBinding = Binding.extend( {\n init: function(source, path, template) {\n var that = this;\n\n Binding.fn.init.call(that, source, path);\n\n that.template = template;\n },\n\n render: function(value) {\n var html;\n\n this.start(this.source);\n\n html = kendo.render(this.template, value);\n\n this.stop(this.source);\n\n return html;\n }\n });\n\n var Binder = Class.extend({\n init: function(element, bindings, options) {\n this.element = element;\n this.bindings = bindings;\n this.options = options;\n },\n\n bind: function(binding, attribute) {\n var that = this;\n\n binding = attribute ? binding[attribute] : binding;\n\n binding.bind(CHANGE, function(e) {\n that.refresh(attribute || e);\n });\n\n that.refresh(attribute);\n },\n\n destroy: function() {\n }\n });\n\n var TypedBinder = Binder.extend({\n dataType: function() {\n var dataType = this.element.getAttribute(\"data-\" + kendo.ns + \"type\") || this.element.type || \"text\";\n return dataType.toLowerCase();\n },\n\n parsedValue: function() {\n return this._parseValue(this.element.value, this.dataType());\n },\n\n _parseValue: function(value, dataType) {\n if (dataType == \"date\") {\n value = kendo.parseDate(value, \"yyyy-MM-dd\");\n } else if (dataType == \"datetime-local\") {\n value = kendo.parseDate(value, [\"yyyy-MM-ddTHH:mm:ss\", \"yyyy-MM-ddTHH:mm\"] );\n } else if (dataType == \"number\") {\n value = kendo.parseFloat(value);\n } else if (dataType == \"boolean\") {\n value = value.toLowerCase();\n if (kendo.parseFloat(value) !== null) {\n value = Boolean(kendo.parseFloat(value));\n } else {\n value = (value.toLowerCase() === \"true\");\n }\n }\n return value;\n }\n });\n\n binders.attr = Binder.extend({\n refresh: function(key) {\n this.element.setAttribute(key, this.bindings.attr[key].get());\n }\n });\n\n binders.css = Binder.extend({\n init: function(element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.classes = {};\n },\n refresh: function(className) {\n var element = $(this.element),\n binding = this.bindings.css[className],\n hasClass = this.classes[className] = binding.get();\n if (hasClass) {\n element.addClass(className);\n } else {\n element.removeClass(className);\n }\n }\n });\n\n binders.style = Binder.extend({\n refresh: function(key) {\n this.element.style[key] = this.bindings.style[key].get() || \"\";\n }\n });\n\n binders.enabled = Binder.extend({\n refresh: function() {\n if (this.bindings.enabled.get()) {\n this.element.removeAttribute(\"disabled\");\n } else {\n this.element.setAttribute(\"disabled\", \"disabled\");\n }\n }\n });\n\n binders.readonly = Binder.extend({\n refresh: function() {\n if (this.bindings.readonly.get()) {\n this.element.setAttribute(\"readonly\", \"readonly\");\n } else {\n this.element.removeAttribute(\"readonly\");\n }\n }\n });\n\n binders.disabled = Binder.extend({\n refresh: function() {\n if (this.bindings.disabled.get()) {\n this.element.setAttribute(\"disabled\", \"disabled\");\n } else {\n this.element.removeAttribute(\"disabled\");\n }\n }\n });\n\n binders.events = Binder.extend({\n init: function(element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.handlers = {};\n },\n\n refresh: function(key) {\n var element = $(this.element),\n binding = this.bindings.events[key],\n handler = this.handlers[key];\n\n if (handler) {\n element.off(key, handler);\n }\n\n handler = this.handlers[key] = binding.get();\n\n element.on(key, binding.source, handler);\n },\n\n destroy: function() {\n var element = $(this.element),\n handler;\n\n for (handler in this.handlers) {\n element.off(handler, this.handlers[handler]);\n }\n }\n });\n\n binders.text = Binder.extend({\n refresh: function() {\n var text = this.bindings.text.get();\n var dataFormat = this.element.getAttribute(\"data-\" + kendo.ns + \"format\") || \"\";\n if (text == null) {\n text = \"\";\n }\n\n $(this.element).text(kendo.toString(text, dataFormat));\n }\n });\n\n binders.visible = Binder.extend({\n refresh: function() {\n if (this.bindings.visible.get()) {\n this.element.style.display = \"\";\n } else {\n this.element.style.display = \"none\";\n }\n }\n });\n\n binders.invisible = Binder.extend({\n refresh: function() {\n if (!this.bindings.invisible.get()) {\n this.element.style.display = \"\";\n } else {\n this.element.style.display = \"none\";\n }\n }\n });\n\n binders.html = Binder.extend({\n refresh: function() {\n this.element.innerHTML = this.bindings.html.get();\n }\n });\n\n binders.value = TypedBinder.extend({\n init: function(element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n\n this._change = this.change.bind(this);\n this.eventName = options.valueUpdate || CHANGE;\n\n $(this.element).on(this.eventName, this._change);\n\n this._initChange = false;\n },\n\n change: function() {\n this._initChange = this.eventName != CHANGE;\n\n this.bindings[VALUE].set(this.parsedValue());\n\n this._initChange = false;\n },\n\n refresh: function() {\n if (!this._initChange) {\n var value = this.bindings[VALUE].get();\n\n if (value == null) {\n value = \"\";\n }\n\n var type = this.dataType();\n\n if (type == \"date\") {\n value = kendo.toString(value, \"yyyy-MM-dd\");\n } else if (type == \"datetime-local\") {\n value = kendo.toString(value, \"yyyy-MM-ddTHH:mm:ss\");\n }\n\n this.element.value = value;\n }\n\n this._initChange = false;\n },\n\n destroy: function() {\n $(this.element).off(this.eventName, this._change);\n }\n });\n\n binders.source = Binder.extend({\n init: function(element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n\n var source = this.bindings.source.get();\n\n if (source instanceof kendo.data.DataSource && options.autoBind !== false) {\n source.fetch();\n }\n },\n\n refresh: function(e) {\n var that = this,\n source = that.bindings.source.get();\n\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n\n if (e.action == \"add\") {\n that.add(e.index, e.items);\n } else if (e.action == \"remove\") {\n that.remove(e.index, e.items);\n } else if (e.action != \"itemchange\") {\n that.render();\n }\n } else {\n that.render();\n }\n },\n\n container: function() {\n var element = this.element;\n\n if (element.nodeName.toLowerCase() == \"table\") {\n if (!element.tBodies[0]) {\n element.appendChild(document.createElement(\"tbody\"));\n }\n element = element.tBodies[0];\n }\n\n return element;\n },\n\n template: function() {\n var options = this.options,\n template = options.template,\n nodeName = this.container().nodeName.toLowerCase();\n\n if (!template) {\n if (nodeName == \"select\") {\n if (options.valueField || options.textField) {\n template = (data) => {\n const valueAttr = kendo.getter(options.valueField || options.textField)(data);\n const innerText = kendo.getter(options.textField || options.valueField)(data);\n return ``;\n };\n } else {\n template = (data) => ``;\n }\n } else if (nodeName == \"tbody\") {\n template = (data) => `${encode(data)}`;\n } else if (nodeName == \"ul\" || nodeName == \"ol\") {\n template = (data) => `
  • ${encode(data)}
  • `;\n } else {\n template = (data) => `${encode(data)}`;\n }\n template = kendo.template(template);\n }\n\n return template;\n },\n\n add: function(index, items) {\n var element = this.container(),\n parents,\n idx,\n length,\n child,\n clone = element.cloneNode(false),\n reference = element.children[index];\n\n $(clone).html(kendo.render(this.template(), items));\n\n if (clone.children.length) {\n parents = this.bindings.source._parents();\n\n for (idx = 0, length = items.length; idx < length; idx++) {\n child = clone.children[0];\n element.insertBefore(child, reference || null);\n bindElement(child, items[idx], this.options.roles, [items[idx]].concat(parents));\n }\n }\n },\n\n remove: function(index, items) {\n var idx, element = this.container();\n\n for (idx = 0; idx < items.length; idx++) {\n var child = element.children[index];\n unbindElementTree(child, true);\n if (child.parentNode == element) {\n element.removeChild(child);\n }\n }\n },\n\n render: function() {\n var source = this.bindings.source.get(),\n parents,\n idx,\n length,\n element = this.container(),\n template = this.template();\n\n if (source == null) {\n return;\n }\n\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n\n if (!(source instanceof ObservableArray) && toString.call(source) !== \"[object Array]\") {\n source = [source];\n }\n\n if (this.bindings.template) {\n unbindElementChildren(element, true);\n\n $(element).html(this.bindings.template.render(source));\n\n if (element.children.length) {\n parents = this.bindings.source._parents();\n\n for (idx = 0, length = source.length; idx < length; idx++) {\n bindElement(element.children[idx], source[idx], this.options.roles, [source[idx]].concat(parents));\n }\n }\n } else {\n $(element).html(kendo.render(template, source));\n }\n }\n });\n\n binders.input = {\n checked: TypedBinder.extend({\n init: function(element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = this.change.bind(this);\n\n $(this.element).change(this._change);\n },\n\n change: function() {\n var element = this.element;\n var value = this.value();\n\n if (element.type == \"radio\") {\n value = this.parsedValue();\n this.bindings[CHECKED].set(value);\n } else if (element.type == \"checkbox\") {\n var source = this.bindings[CHECKED].get();\n var index;\n\n if (source instanceof ObservableArray) {\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n if (index > -1) {\n source.splice(index, 1);\n } else {\n source.push(value);\n }\n } else {\n this.bindings[CHECKED].set(value);\n }\n }\n },\n\n refresh: function() {\n var value = this.bindings[CHECKED].get(),\n source = value,\n type = this.dataType(),\n element = this.element;\n\n if (element.type == \"checkbox\") {\n if (source instanceof ObservableArray) {\n var index = -1;\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n element.checked = (index >= 0);\n } else {\n element.checked = source;\n }\n } else if (element.type == \"radio\") {\n if (type == \"date\") {\n value = kendo.toString(value, \"yyyy-MM-dd\");\n } else if (type == \"datetime-local\") {\n value = kendo.toString(value, \"yyyy-MM-ddTHH:mm:ss\");\n }\n\n if (value !== null && typeof(value) !== \"undefined\" && element.value === value.toString()) {\n element.checked = true;\n } else {\n element.checked = false;\n }\n }\n },\n\n value: function() {\n var element = this.element,\n value = element.value;\n\n if (element.type == \"checkbox\") {\n value = element.checked;\n }\n\n return value;\n },\n destroy: function() {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n\n binders.select = {\n source: binders.source.extend({\n refresh: function(e) {\n var that = this,\n source = that.bindings.source.get();\n\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == \"add\") {\n that.add(e.index, e.items);\n } else if (e.action == \"remove\") {\n that.remove(e.index, e.items);\n } else if (e.action == \"itemchange\" || e.action === undefined$1) {\n that.render();\n if (that.bindings.value) {\n if (that.bindings.value) {\n var val = retrievePrimitiveValues(that.bindings.value.get(), $(that.element).data(\"valueField\"));\n if (val === null) {\n that.element.selectedIndex = -1;\n } else {\n that.element.value = val;\n }\n }\n }\n }\n } else {\n that.render();\n }\n }\n }),\n value: TypedBinder.extend({\n init: function(target, bindings, options) {\n TypedBinder.fn.init.call(this, target, bindings, options);\n\n this._change = this.change.bind(this);\n $(this.element).change(this._change);\n },\n\n parsedValue: function() {\n var dataType = this.dataType();\n var values = [];\n var value, option, idx, length;\n for (idx = 0, length = this.element.options.length; idx < length; idx++) {\n option = this.element.options[idx];\n\n if (option.selected) {\n value = option.attributes.value;\n\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n\n values.push(this._parseValue(value, dataType));\n }\n }\n return values;\n },\n\n change: function() {\n var values = [],\n element = this.element,\n source,\n field = this.options.valueField || this.options.textField,\n valuePrimitive = this.options.valuePrimitive,\n option,\n valueIndex,\n value,\n idx,\n length;\n\n for (idx = 0, length = element.options.length; idx < length; idx++) {\n option = element.options[idx];\n\n if (option.selected) {\n value = option.attributes.value;\n\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n\n if (field) {\n values.push(value);\n } else {\n values.push(this._parseValue(value, this.dataType()));\n }\n\n }\n }\n\n if (field) {\n source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n\n for (valueIndex = 0; valueIndex < values.length; valueIndex++) {\n for (idx = 0, length = source.length; idx < length; idx++) {\n var sourceValue = source[idx].get(field);\n var match = (String(sourceValue) === values[valueIndex]);\n if (match) {\n values[valueIndex] = source[idx];\n break;\n }\n }\n }\n }\n\n value = this.bindings[VALUE].get();\n if (value instanceof ObservableArray) {\n value.splice.apply(value, [0, value.length].concat(values));\n } else if (!valuePrimitive && (value instanceof ObservableObject || value === null || value === undefined$1 || !field)) {\n this.bindings[VALUE].set(values[0]);\n } else {\n this.bindings[VALUE].set(values[0].get(field));\n }\n },\n refresh: function() {\n var optionIndex,\n element = this.element,\n options = element.options,\n value = this.bindings[VALUE].get(),\n values = value,\n field = this.options.valueField || this.options.textField,\n found = false,\n type = this.dataType(),\n optionValue;\n\n if (!(values instanceof ObservableArray)) {\n values = new ObservableArray([value]);\n }\n\n element.selectedIndex = -1;\n\n for (var valueIndex = 0; valueIndex < values.length; valueIndex++) {\n value = values[valueIndex];\n\n\n if (field && value instanceof ObservableObject) {\n value = value.get(field);\n }\n\n if (type == \"date\") {\n value = kendo.toString(values[valueIndex], \"yyyy-MM-dd\");\n } else if (type == \"datetime-local\") {\n value = kendo.toString(values[valueIndex], \"yyyy-MM-ddTHH:mm:ss\");\n }\n\n for (optionIndex = 0; optionIndex < options.length; optionIndex++) {\n optionValue = options[optionIndex].value;\n\n if (optionValue === \"\" && value !== \"\") {\n optionValue = options[optionIndex].text;\n }\n\n if (value != null && optionValue == value.toString()) {\n options[optionIndex].selected = true;\n found = true;\n }\n }\n }\n },\n destroy: function() {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n\n function dataSourceBinding(bindingName, fieldName, setter) {\n return Binder.extend({\n init: function(widget, bindings, options) {\n var that = this;\n\n Binder.fn.init.call(that, widget.element[0], bindings, options);\n\n that.widget = widget;\n that._dataBinding = that.dataBinding.bind(that);\n that._dataBound = that.dataBound.bind(that);\n that._itemChange = that.itemChange.bind(that);\n },\n\n itemChange: function(e) {\n bindElement(e.item[0], e.data, this._ns(e.ns), [e.data].concat(this.bindings[bindingName]._parents()));\n },\n\n dataBinding: function(e) {\n var idx,\n length,\n widget = this.widget,\n items = e.removedItems || widget.items();\n\n for (idx = 0, length = items.length; idx < length; idx++) {\n unbindElementTree(items[idx], false);\n }\n },\n\n _ns: function(ns) {\n ns = ns || kendo.ui;\n var all = [ kendo.ui, kendo.dataviz.ui, kendo.mobile.ui ];\n all.splice($.inArray(ns, all), 1);\n all.unshift(ns);\n\n return kendo.rolesFromNamespaces(all);\n },\n\n dataBound: function(e) {\n var idx,\n length,\n widget = this.widget,\n items = e.addedItems || widget.items(),\n dataSource = widget[fieldName],\n view,\n parents,\n hds = kendo.data.HierarchicalDataSource;\n\n if (hds && dataSource instanceof hds) {\n // suppress binding of HDS items, because calling view() on root\n // will return only root items, and widget.items() returns all items\n return;\n }\n\n if (items.length) {\n view = e.addedDataItems || dataSource.flatView();\n parents = this.bindings[bindingName]._parents();\n\n for (idx = 0, length = view.length; idx < length; idx++) {\n if (items[idx]) {\n bindElement(items[idx], view[idx], this._ns(e.ns), [view[idx]].concat(parents));\n }\n }\n }\n },\n\n refresh: function(e) {\n var that = this,\n source,\n widget = that.widget,\n select, multiselect, dropdowntree;\n\n e = e || {};\n\n if (!e.action) {\n that.destroy();\n\n widget.bind(\"dataBinding\", that._dataBinding);\n widget.bind(\"dataBound\", that._dataBound);\n widget.bind(\"itemChange\", that._itemChange);\n\n source = that.bindings[bindingName].get();\n\n if (widget[fieldName] instanceof kendo.data.DataSource && widget[fieldName] != source) {\n if (source instanceof kendo.data.DataSource) {\n widget[setter](source);\n } else if (source && source._dataSource) {\n widget[setter](source._dataSource);\n } else {\n select = kendo.ui.Select && widget instanceof kendo.ui.Select;\n multiselect = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect;\n dropdowntree = kendo.ui.DropDownTree && widget instanceof kendo.ui.DropDownTree;\n\n if (!dropdowntree) {\n widget[fieldName].data(source);\n } else {\n widget.treeview[fieldName].data(source);\n }\n\n if (that.bindings.value && (select || multiselect)) {\n widget.value(retrievePrimitiveValues(that.bindings.value.get(), widget.options.dataValueField));\n }\n }\n }\n }\n },\n\n destroy: function() {\n var widget = this.widget;\n\n widget.unbind(\"dataBinding\", this._dataBinding);\n widget.unbind(\"dataBound\", this._dataBound);\n widget.unbind(\"itemChange\", this._itemChange);\n }\n });\n }\n\n binders.widget = {\n events: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this.handlers = {};\n },\n\n refresh: function(key) {\n var binding = this.bindings.events[key],\n handler = this.handlers[key];\n\n if (handler) {\n this.widget.unbind(key, handler);\n }\n\n handler = binding.get();\n\n this.handlers[key] = function(e) {\n e.data = binding.source;\n\n handler(e);\n\n if (e.data === binding.source) {\n delete e.data;\n }\n };\n\n this.widget.bind(key, this.handlers[key]);\n },\n\n destroy: function() {\n var handler;\n\n for (handler in this.handlers) {\n this.widget.unbind(handler, this.handlers[handler]);\n }\n }\n }),\n\n checked: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n this._change = this.change.bind(this);\n this.widget.bind(CHANGE, this._change);\n },\n change: function() {\n this.bindings[CHECKED].set(this.value());\n },\n\n refresh: function() {\n var val = this.bindings[CHECKED].get();\n\n if (this.element.type === \"radio\") {\n if (val !== undefined$1) {\n this.widget.check(val.toString() === this.value());\n } else {\n this.widget.check(false);\n }\n } else {\n this.widget.check(val === true);\n }\n },\n\n value: function() {\n var element = this.element,\n value = element.value;\n\n if (value == \"on\" || value == \"off\" || this.element.type == \"checkbox\") {\n value = element.checked;\n }\n\n return value;\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n\n start: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this._change = this.change.bind(this);\n this.widget = widget;\n this.widget.bind(CHANGE, this._change);\n },\n\n change: function() {\n this.bindings.start.set(this.widget.range().start);\n },\n\n refresh: function() {\n var that = this;\n var start = this.bindings.start.get();\n var end = that.widget._range ? that.widget._range.end : null;\n this.widget.range({ start: start, end: end });\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n\n end: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this._change = this.change.bind(this);\n this.widget = widget;\n this.widget.bind(CHANGE, this._change);\n },\n\n change: function() {\n this.bindings.end.set(this.widget.range().end);\n },\n\n refresh: function() {\n var that = this;\n var end = this.bindings.end.get();\n var start = that.widget._range ? that.widget._range.start : null;\n this.widget.range({ start: start, end: end });\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n\n visible: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n },\n\n refresh: function() {\n var visible = this.bindings.visible.get();\n this.widget.wrapper[0].style.display = visible ? \"\" : \"none\";\n }\n }),\n\n invisible: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n },\n\n refresh: function() {\n var invisible = this.bindings.invisible.get();\n this.widget.wrapper[0].style.display = invisible ? \"none\" : \"\";\n }\n }),\n\n floatingLabel: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n if (!widget.floatingLabel) {\n return;\n }\n\n widget.floatingLabel.refresh();\n }\n }),\n\n enabled: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n this.readonly = this.element.readOnly;\n },\n\n refresh: function() {\n if (this.widget.enable) {\n this.widget.enable(this.bindings.enabled.get());\n }\n if (this.readonly && this.widget.readonly) {\n this.widget.readonly(this.readonly);\n }\n }\n }),\n\n disabled: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n },\n\n refresh: function() {\n if (this.widget.enable) {\n this.widget.enable(!this.bindings.disabled.get());\n }\n }\n }),\n\n source: dataSourceBinding(\"source\", \"dataSource\", \"setDataSource\"),\n\n value: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n this._change = this.change.bind(this);\n this.widget.first(CHANGE, this._change);\n\n var value = this.bindings.value.get();\n\n this._valueIsObservableObject = !options.valuePrimitive && (value == null || value instanceof ObservableObject);\n this._valueIsObservableArray = value instanceof ObservableArray;\n this._initChange = false;\n },\n\n _source: function() {\n var source;\n\n if (this.widget.dataItem) {\n source = this.widget.dataItem();\n if (source && source instanceof ObservableObject) {\n return [source];\n }\n }\n\n if (this.bindings.source) {\n source = this.bindings.source.get();\n }\n\n if (!source || source instanceof kendo.data.DataSource) {\n source = this.widget.dataSource.flatView();\n }\n\n return source;\n },\n\n change: function() {\n var value = this.widget.value(),\n field = this.options.dataValueField || this.options.dataTextField,\n isArray = toString.call(value) === \"[object Array]\",\n isObservableObject = this._valueIsObservableObject,\n valueIndex, valueLength, values = [],\n sourceItem, sourceValue,\n idx, length, source;\n\n this._initChange = true;\n\n if (field) {\n\n if (value === \"\" && (isObservableObject || this.options.valuePrimitive)) {\n value = null;\n } else {\n source = this._source();\n\n if (isArray) {\n valueLength = value.length;\n values = value.slice(0);\n }\n\n for (idx = 0, length = source.length; idx < length; idx++) {\n sourceItem = source[idx];\n sourceValue = sourceItem.get(field);\n\n if (isArray) {\n for (valueIndex = 0; valueIndex < valueLength; valueIndex++) {\n if (sourceValue == values[valueIndex]) {\n values[valueIndex] = sourceItem;\n break;\n }\n }\n } else if (sourceValue == value) {\n value = isObservableObject ? sourceItem : sourceValue;\n break;\n }\n }\n\n if (values[0]) {\n if (this._valueIsObservableArray) {\n value = values;\n } else if (isObservableObject || !field) {\n value = values[0];\n } else {\n value = values[0].get(field);\n }\n }\n }\n }\n\n this.bindings.value.set(value);\n this._initChange = false;\n },\n\n refresh: function() {\n if (!this._initChange) {\n var widget = this.widget;\n var options = widget.options;\n var textField = options.dataTextField;\n var valueField = options.dataValueField || textField;\n var value = this.bindings.value.get();\n var text = options.text || \"\";\n var idx = 0, length;\n var values = [];\n\n if (value === undefined$1) {\n value = null;\n }\n\n if (valueField) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n values[idx] = value[idx].get(valueField);\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n text = value.get(textField);\n value = value.get(valueField);\n }\n }\n\n if (options.autoBind === false && !options.cascadeFrom && widget.listView && !widget.listView.bound()) {\n if (textField === valueField && !text) {\n text = value;\n }\n\n if (!text && (value || value === 0) && options.valuePrimitive) {\n widget.value(value);\n } else {\n widget._preselect(value, text);\n }\n } else {\n widget.value(value);\n }\n }\n\n this._initChange = false;\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n dropdowntree: {\n value: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n this._change = this.change.bind(this);\n this.widget.first(CHANGE, this._change);\n this._initChange = false;\n },\n\n change: function() {\n var that = this,\n oldValues = that.bindings[VALUE].get(),\n valuePrimitive = that.options.valuePrimitive,\n selectedNode = that.widget.treeview.select(),\n nonPrimitiveValues = that.widget._isMultipleSelection() ? that.widget._getAllChecked() : (that.widget.treeview.dataItem(selectedNode) || that.widget.value()),\n newValues = (valuePrimitive || that.widget.options.autoBind === false) ? that.widget.value() : nonPrimitiveValues;\n\n var field = this.options.dataValueField || this.options.dataTextField;\n\n newValues = newValues.slice ? newValues.slice(0) : newValues;\n\n that._initChange = true;\n\n if (oldValues instanceof ObservableArray) {\n var remove = [];\n var newLength = newValues.length;\n var i = 0, j = 0;\n var old = oldValues[i];\n var same = false;\n var removeIndex;\n var newValue;\n var found;\n\n while (old !== undefined$1) {\n found = false;\n for (j = 0; j < newLength; j++) {\n if (valuePrimitive) {\n same = newValues[j] == old;\n } else {\n newValue = newValues[j];\n\n newValue = newValue.get ? newValue.get(field) : newValue;\n same = newValue == (old.get ? old.get(field) : old);\n }\n\n if (same) {\n newValues.splice(j, 1);\n newLength -= 1;\n found = true;\n break;\n }\n }\n\n if (!found) {\n remove.push(old);\n arraySplice(oldValues, i, 1);\n removeIndex = i;\n } else {\n i += 1;\n }\n\n old = oldValues[i];\n }\n\n arraySplice(oldValues, oldValues.length, 0, newValues);\n\n if (remove.length) {\n oldValues.trigger(\"change\", {\n action: \"remove\",\n items: remove,\n index: removeIndex\n });\n }\n\n if (newValues.length) {\n oldValues.trigger(\"change\", {\n action: \"add\",\n items: newValues,\n index: oldValues.length - 1\n });\n }\n } else {\n that.bindings[VALUE].set(newValues);\n }\n\n that._initChange = false;\n },\n\n refresh: function() {\n if (!this._initChange) {\n var options = this.options,\n widget = this.widget,\n field = options.dataValueField || options.dataTextField,\n value = this.bindings.value.get(),\n data = value,\n idx = 0, length,\n values = [],\n selectedValue;\n\n if (field) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n selectedValue = value[idx];\n values[idx] = selectedValue.get ? selectedValue.get(field) : selectedValue;\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(field);\n }\n }\n if (options.autoBind === false && options.valuePrimitive !== true) {\n widget._preselect(data, value);\n } else {\n widget.value(value);\n }\n }\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n })\n },\n gantt: {\n dependencies: dataSourceBinding(\"dependencies\", \"dependencies\", \"setDependenciesDataSource\")\n },\n\n multiselect: {\n value: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n this._change = this.change.bind(this);\n this.widget.first(CHANGE, this._change);\n this._initChange = false;\n },\n\n change: function() {\n var that = this,\n oldValues = that.bindings[VALUE].get(),\n valuePrimitive = that.options.valuePrimitive,\n newValues = valuePrimitive ? that.widget.value() : that.widget.dataItems();\n\n var field = this.options.dataValueField || this.options.dataTextField;\n\n newValues = newValues.slice(0);\n\n that._initChange = true;\n\n if (oldValues instanceof ObservableArray) {\n var remove = [];\n\n var newLength = newValues.length;\n\n var i = 0, j = 0;\n var old = oldValues[i];\n var same = false;\n var removeIndex;\n var newValue;\n var found;\n\n while (old !== undefined$1) {\n found = false;\n for (j = 0; j < newLength; j++) {\n if (valuePrimitive) {\n same = newValues[j] == old;\n } else {\n newValue = newValues[j];\n\n newValue = newValue.get ? newValue.get(field) : newValue;\n same = newValue == (old.get ? old.get(field) : old);\n }\n\n if (same) {\n newValues.splice(j, 1);\n newLength -= 1;\n found = true;\n break;\n }\n }\n\n if (!found) {\n remove.push(old);\n arraySplice(oldValues, i, 1);\n removeIndex = i;\n } else {\n i += 1;\n }\n\n old = oldValues[i];\n }\n\n arraySplice(oldValues, oldValues.length, 0, newValues);\n\n if (remove.length) {\n oldValues.trigger(\"change\", {\n action: \"remove\",\n items: remove,\n index: removeIndex\n });\n }\n\n if (newValues.length) {\n oldValues.trigger(\"change\", {\n action: \"add\",\n items: newValues,\n index: oldValues.length - 1\n });\n }\n } else {\n that.bindings[VALUE].set(newValues);\n }\n\n that._initChange = false;\n },\n\n refresh: function() {\n if (!this._initChange) {\n var options = this.options,\n widget = this.widget,\n field = options.dataValueField || options.dataTextField,\n value = this.bindings.value.get(),\n data = value,\n idx = 0, length,\n values = [],\n selectedValue;\n\n if (value === undefined$1) {\n value = null;\n }\n\n if (field) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n selectedValue = value[idx];\n values[idx] = selectedValue.get ? selectedValue.get(field) : selectedValue;\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(field);\n }\n }\n\n if (options.autoBind === false && options.valuePrimitive !== true && !widget._isBound()) {\n widget._preselect(data, value);\n } else {\n widget.value(value);\n }\n }\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n\n })\n },\n scheduler: {\n source: dataSourceBinding(\"source\", \"dataSource\", \"setDataSource\").extend({\n dataBound: function(e) {\n var idx;\n var length;\n var widget = this.widget;\n var elements = e.addedItems || widget.items();\n var data, parents;\n\n if (elements.length) {\n data = e.addedDataItems || widget.dataItems();\n parents = this.bindings.source._parents();\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n bindElement(elements[idx], data[idx], this._ns(e.ns), [data[idx]].concat(parents));\n }\n }\n }\n })\n },\n\n grid: {\n source: dataSourceBinding(\"source\", \"dataSource\", \"setDataSource\").extend({\n dataBound: function(e) {\n var idx,\n length,\n widget = this.widget,\n elements = e.addedItems || widget.items(),\n parents,\n data;\n\n if (elements.length) {\n data = e.addedDataItems || widget.dataItems();\n parents = this.bindings.source._parents();\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n bindElement(elements[idx], data[idx], this._ns(e.ns), [data[idx]].concat(parents));\n }\n }\n }\n })\n },\n\n badge: {\n text: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n },\n refresh: function() {\n var text = this.bindings.text.get();\n\n if (text == null) {\n text = \"\";\n }\n this.widget.text(text);\n }\n })\n }\n };\n\n var arraySplice = function(arr, idx, remove, add) {\n add = add || [];\n remove = remove || 0;\n\n var addLength = add.length;\n var oldLength = arr.length;\n\n var shifted = [].slice.call(arr, idx + remove);\n var shiftedLength = shifted.length;\n var index;\n\n if (addLength) {\n addLength = idx + addLength;\n index = 0;\n\n for (; idx < addLength; idx++) {\n arr[idx] = add[index];\n index++;\n }\n\n arr.length = addLength;\n } else if (remove) {\n arr.length = idx;\n\n remove += idx;\n while (idx < remove) {\n delete arr[--remove];\n }\n }\n\n if (shiftedLength) {\n shiftedLength = idx + shiftedLength;\n index = 0;\n\n for (; idx < shiftedLength; idx++) {\n arr[idx] = shifted[index];\n index++;\n }\n\n arr.length = shiftedLength;\n }\n\n idx = arr.length;\n\n while (idx < oldLength) {\n delete arr[idx];\n idx++;\n }\n };\n\n var BindingTarget = Class.extend( {\n init: function(target, options) {\n this.target = target;\n this.options = options;\n this.toDestroy = [];\n },\n\n bind: function(bindings) {\n var key,\n hasValue,\n hasSource,\n hasEvents,\n hasChecked,\n hasCss,\n widgetBinding = this instanceof WidgetBindingTarget,\n specificBinders = this.binders();\n\n for (key in bindings) {\n if (key == VALUE) {\n hasValue = true;\n } else if (key == SOURCE) {\n hasSource = true;\n } else if (key == EVENTS && !widgetBinding) {\n hasEvents = true;\n } else if (key == CHECKED) {\n hasChecked = true;\n } else if (key == CSS) {\n hasCss = true;\n } else {\n this.applyBinding(key, bindings, specificBinders);\n }\n }\n if (hasSource) {\n this.applyBinding(SOURCE, bindings, specificBinders);\n }\n\n if (hasValue) {\n this.applyBinding(VALUE, bindings, specificBinders);\n }\n\n if (hasChecked) {\n this.applyBinding(CHECKED, bindings, specificBinders);\n }\n\n if (hasEvents && !widgetBinding) {\n this.applyBinding(EVENTS, bindings, specificBinders);\n }\n\n if (hasCss && !widgetBinding) {\n this.applyBinding(CSS, bindings, specificBinders);\n }\n\n if (widgetBinding && this.target && this.target.floatingLabel) {\n this.applyBinding(\"floatingLabel\", bindings, specificBinders);\n }\n },\n\n binders: function() {\n return binders[this.target.nodeName.toLowerCase()] || {};\n },\n\n applyBinding: function(name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders[name],\n toDestroy = this.toDestroy,\n attribute,\n binding = bindings[name];\n\n if (binder) {\n binder = new binder(this.target, bindings, this.options);\n\n toDestroy.push(binder);\n\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else if (name !== \"template\") {\n throw new Error(\"The \" + name + \" binding is not supported by the \" + this.target.nodeName.toLowerCase() + \" element\");\n }\n },\n\n destroy: function() {\n var idx,\n length,\n toDestroy = this.toDestroy;\n\n for (idx = 0, length = toDestroy.length; idx < length; idx++) {\n toDestroy[idx].destroy();\n }\n }\n });\n\n var WidgetBindingTarget = BindingTarget.extend( {\n binders: function() {\n return binders.widget[this.target.options.name.toLowerCase()] || {};\n },\n\n applyBinding: function(name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders.widget[name],\n toDestroy = this.toDestroy,\n attribute,\n binding = bindings[name];\n\n if (binder) {\n binder = new binder(this.target, bindings, this.target.options);\n\n toDestroy.push(binder);\n\n\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else {\n throw new Error(\"The \" + name + \" binding is not supported by the \" + this.target.options.name + \" widget\");\n }\n }\n });\n\n function bindingTargetForRole(element, roles) {\n var widget = kendo.initWidget(element, {}, roles);\n\n if (widget) {\n return new WidgetBindingTarget(widget);\n }\n }\n\n var keyValueRegExp = /[A-Za-z0-9_\\-]+:(\\{([^}]*)\\}|[^,}]+)/g,\n whiteSpaceRegExp = /\\s/g;\n\n function parseBindings(bind) {\n var result = {},\n idx,\n length,\n token,\n colonIndex,\n key,\n value,\n tokens;\n\n tokens = bind.match(keyValueRegExp);\n\n for (idx = 0, length = tokens.length; idx < length; idx++) {\n token = tokens[idx];\n colonIndex = token.indexOf(\":\");\n\n key = token.substring(0, colonIndex);\n value = token.substring(colonIndex + 1);\n\n if (value.charAt(0) == \"{\") {\n value = parseBindings(value);\n }\n\n result[key] = value;\n }\n\n return result;\n }\n\n function createBindings(bindings, source, type) {\n var binding,\n result = {};\n\n for (binding in bindings) {\n result[binding] = new type(source, bindings[binding]);\n }\n\n return result;\n }\n\n function bindElement(element, source, roles, parents) {\n\n if (!element || element.getAttribute(\"data-\" + kendo.ns + \"stop\")) {\n return;\n }\n\n var role = element.getAttribute(\"data-\" + kendo.ns + \"role\"),\n idx,\n bind = element.getAttribute(\"data-\" + kendo.ns + \"bind\"),\n childrenCopy = [],\n deep = true,\n bindings,\n options = {},\n target;\n\n parents = parents || [source];\n\n if (role || bind) {\n unbindElement(element, false);\n }\n\n if (role) {\n target = bindingTargetForRole(element, roles);\n }\n\n if (bind) {\n bind = parseBindings(bind.replace(whiteSpaceRegExp, \"\"));\n\n if (!target) {\n options = kendo.parseOptions(element, { textField: \"\", valueField: \"\", template: \"\", valueUpdate: CHANGE, valuePrimitive: false, autoBind: true }, source);\n options.roles = roles;\n target = new BindingTarget(element, options);\n }\n\n target.source = source;\n\n bindings = createBindings(bind, parents, Binding);\n\n if (options.template) {\n bindings.template = new TemplateBinding(parents, \"\", options.template);\n }\n\n if (bindings.click) {\n bind.events = bind.events || {};\n bind.events.click = bind.click;\n bindings.click.destroy();\n delete bindings.click;\n }\n\n if (bindings.source) {\n deep = false;\n }\n\n if (bind.attr) {\n bindings.attr = createBindings(bind.attr, parents, Binding);\n }\n\n if (bind.style) {\n bindings.style = createBindings(bind.style, parents, Binding);\n }\n\n if (bind.events) {\n bindings.events = createBindings(bind.events, parents, EventBinding);\n }\n\n if (bind.css) {\n bindings.css = createBindings(bind.css, parents, Binding);\n }\n\n target.bind(bindings);\n }\n\n if (target) {\n element.kendoBindingTarget = target;\n }\n\n var children = element.children;\n if (deep && children && !element.getAttribute(\"data-\" + kendo.ns + \"stop\")) {\n // https://github.com/telerik/kendo/issues/1240 for the weirdness.\n for (idx = 0; idx < children.length; idx++) {\n childrenCopy[idx] = children[idx];\n }\n\n for (idx = 0; idx < childrenCopy.length; idx++) {\n bindElement(childrenCopy[idx], source, roles, parents);\n }\n }\n }\n\n function bind(dom, object) {\n var idx,\n length,\n node,\n roles = kendo.rolesFromNamespaces([].slice.call(arguments, 2));\n\n object = kendo.observable(object);\n dom = $(dom);\n\n for (idx = 0, length = dom.length; idx < length; idx++) {\n node = dom[idx];\n if (node.nodeType === 1) {\n bindElement(node, object, roles);\n }\n }\n }\n\n function unbindElement(element, destroyWidget) {\n var bindingTarget = element.kendoBindingTarget;\n\n if (bindingTarget) {\n bindingTarget.destroy();\n\n if (deleteExpando) {\n delete element.kendoBindingTarget;\n } else if (element.removeAttribute) {\n element.removeAttribute(\"kendoBindingTarget\");\n } else {\n element.kendoBindingTarget = null;\n }\n }\n\n if (destroyWidget) {\n var widget = kendo.widgetInstance($(element));\n if (widget && typeof widget.destroy === FUNCTION) {\n widget.destroy();\n }\n }\n }\n\n function unbindElementTree(element, destroyWidgets) {\n\n if (!element) {\n return;\n }\n\n unbindElement(element, destroyWidgets);\n\n unbindElementChildren(element, destroyWidgets);\n }\n\n function unbindElementChildren(element, destroyWidgets) {\n var children = element.children;\n\n if (children) {\n for (var idx = 0, length = children.length; idx < length; idx++) {\n unbindElementTree(children[idx], destroyWidgets);\n }\n }\n }\n\n function unbind(dom) {\n var idx, length;\n\n dom = $(dom);\n\n for (idx = 0, length = dom.length; idx < length; idx++ ) {\n unbindElementTree(dom[idx], false);\n }\n }\n\n function notify(widget, namespace) {\n var element = widget.element,\n bindingTarget = element[0].kendoBindingTarget;\n\n if (bindingTarget) {\n bind(element, bindingTarget.source, namespace);\n }\n }\n\n function retrievePrimitiveValues(value, valueField) {\n var values = [];\n var idx = 0;\n var length;\n var item;\n\n if (!valueField) {\n return value;\n }\n\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n item = value[idx];\n values[idx] = item.get ? item.get(valueField) : item[valueField];\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(valueField);\n }\n\n return value;\n }\n\n kendo.unbind = unbind;\n kendo.bind = bind;\n kendo.data.binders = binders;\n kendo.data.Binder = Binder;\n kendo.notify = notify;\n\n kendo.observable = function(object) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n\n return object;\n };\n\n kendo.observableHierarchy = function(array) {\n var dataSource = kendo.data.HierarchicalDataSource.create(array);\n\n function recursiveRead(data) {\n var i, children;\n\n for (i = 0; i < data.length; i++) {\n data[i]._initChildren();\n\n children = data[i].children;\n\n children.fetch();\n\n data[i].items = children.data();\n\n recursiveRead(data[i].items);\n }\n }\n\n dataSource.fetch();\n\n recursiveRead(dataSource.data());\n\n dataSource._data._dataSource = dataSource;\n\n return dataSource._data;\n };\n\n })(window.kendo.jQuery);\n var kendo$1 = kendo;\n\n return kendo$1;\n\n}));\n"]}