From 7c66177abeed390d4522535a2f528b010510e298 Mon Sep 17 00:00:00 2001 From: Robert Tipton Date: Sun, 29 May 2022 17:57:56 -0400 Subject: [PATCH 01/33] Added routes.ts file which exports an instance of a custom Routes class. The routes class is imported by linkFiber where its addRoute method is invoked before sending a new snapshot to the frontend and by timeJump where its navigate method is invoked during time travel. Improved logic in timeJump that controls when mode.jumping switches back to false. Added url property to tree class. Co-authored-by: Chris LeBrett <100822842+fscgolden@users.noreply.github.com> Co-authored-by: Robby Tipton <100332566+RobbyTipton@users.noreply.github.com> Co-authored-by: Joseph Park <10874783+joeepark@users.noreply.github.com> Co-authored-by: David Kim <101825171+codejunkie7@users.noreply.github.com> Co-authored-by: Kevin HoEun Lee <14950124+khobread@users.noreply.github.com> --- src/backend/linkFiber.ts | 2 ++ src/backend/routes.ts | 39 +++++++++++++++++++++++++++++++++++++++ src/backend/timeJump.ts | 21 ++++++++++++++++----- src/backend/tree.ts | 2 ++ 4 files changed, 59 insertions(+), 5 deletions(-) create mode 100644 src/backend/routes.ts diff --git a/src/backend/linkFiber.ts b/src/backend/linkFiber.ts index 1902f66d0..09e4b7431 100644 --- a/src/backend/linkFiber.ts +++ b/src/backend/linkFiber.ts @@ -28,6 +28,7 @@ import { import Tree from './tree'; // passes the data down to its components ? import componentActionsRecord from './masterState'; +import routes from './routes'; // throttle returns a function that can be called any number of times (possibly in quick succession) but will only invoke the callback at most once every x ms // getHooksNames - helper function to grab the getters/setters from `elementType` @@ -93,6 +94,7 @@ function sendSnapshot(snap: Snapshot, mode: Mode): void { snap.tree = new Tree('root', 'root'); } const payload = snap.tree.cleanTreeCopy(); + payload.url = routes.addRoute(window.location.href); // if it's Recoil - run different actions if (isRecoil) { // getRecoilState() diff --git a/src/backend/routes.ts b/src/backend/routes.ts new file mode 100644 index 000000000..96d49560e --- /dev/null +++ b/src/backend/routes.ts @@ -0,0 +1,39 @@ +class Routes { + values: string[] = []; + + id = 0; + + current: number | null = null; + + addRoute(url: string): string { + if (this.values[this.values.length - 1] !== url) { + if (this.values.includes(url)) { + this.values.push((url += this.id++)); + } else { + this.values.push(url); + } + } + + this.current = this.values.length - 1; + return url; + } + + navigate(url: string): boolean { + let targetIndex: number | null = null; + for (let i = 0; i < this.values.length; i++) { + if (this.values[i] === url) targetIndex = i; + } + + const delta: number = targetIndex - this.current; + + this.current += delta; + + if (delta !== 0) { + window.history.go(delta); + return true; + } + return false; + } +} + +export default new Routes(); diff --git a/src/backend/timeJump.ts b/src/backend/timeJump.ts index 5f142dc90..0a5e9e527 100644 --- a/src/backend/timeJump.ts +++ b/src/backend/timeJump.ts @@ -1,4 +1,5 @@ import { Console } from 'console'; +import routes from './routes'; /* eslint-disable @typescript-eslint/no-unused-vars */ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ @@ -85,9 +86,19 @@ export default (origin, mode) => { // * Setting mode disables setState from posting messages to window mode.jumping = true; if (firstCall) circularComponentTable.clear(); - jump(target); - setTimeout(() => { - mode.jumping = false; - }, 100); + const navigating: boolean = routes.navigate(target.url); + if (navigating) { + addEventListener('popstate', event => { + jump(target); + document.body.onmouseover = () => { + mode.jumping = false; + }; + }); + } else { + jump(target); + document.body.onmouseover = () => { + mode.jumping = false; + }; + } }; -}; \ No newline at end of file +}; diff --git a/src/backend/tree.ts b/src/backend/tree.ts index 4dc9604cb..d9416a490 100644 --- a/src/backend/tree.ts +++ b/src/backend/tree.ts @@ -61,6 +61,8 @@ class Tree { recoilDomNode: any; + url: string; + // Duplicate names: add a unique number ID // Create an object 'componentNames' to store each component name as a key and it's frequency of use as its value // When a new component is made on the tree, check if the new component's name already exists in 'componentNames' (possibly with the .hasOwnProperty method) From b3befcb2de8128e7ad25f6490e4086c15a5ecbc8 Mon Sep 17 00:00:00 2001 From: Robert Tipton Date: Mon, 30 May 2022 18:24:40 -0400 Subject: [PATCH 02/33] Improved robustness of react-router logic. Reactime can now reliably time travel through a react-router application even in situations where the history branches. This is achieved via the rebuildHistory method on the Routes class. Co-authored-by: Chris LeBrett <100822842+fscgolden@users.noreply.github.com> Co-authored-by: Robby Tipton <100332566+RobbyTipton@users.noreply.github.com> Co-authored-by: Joseph Park <10874783+joeepark@users.noreply.github.com> Co-authored-by: David Kim <101825171+codejunkie7@users.noreply.github.com> Co-authored-by: Kevin HoEun Lee <14950124+khobread@users.noreply.github.com> --- src/backend/linkFiber.ts | 2 +- src/backend/routes.ts | 56 ++++++++++++++++++++++++++++++---------- src/backend/timeJump.ts | 2 +- src/backend/tree.ts | 2 +- 4 files changed, 46 insertions(+), 16 deletions(-) diff --git a/src/backend/linkFiber.ts b/src/backend/linkFiber.ts index 09e4b7431..779d69024 100644 --- a/src/backend/linkFiber.ts +++ b/src/backend/linkFiber.ts @@ -94,7 +94,7 @@ function sendSnapshot(snap: Snapshot, mode: Mode): void { snap.tree = new Tree('root', 'root'); } const payload = snap.tree.cleanTreeCopy(); - payload.url = routes.addRoute(window.location.href); + payload.route = routes.addRoute(window.location.href); // if it's Recoil - run different actions if (isRecoil) { // getRecoilState() diff --git a/src/backend/routes.ts b/src/backend/routes.ts index 96d49560e..aacf56c66 100644 --- a/src/backend/routes.ts +++ b/src/backend/routes.ts @@ -1,27 +1,57 @@ +/* eslint-disable max-classes-per-file */ + +class Route { + url: string; + + id: number; + + constructor(url: string, id: number) { + this.url = url; + this.id = id; + } +} + class Routes { - values: string[] = []; + values: Route[] = [new Route(null, null)]; id = 0; - current: number | null = null; + current: number | null = 0; - addRoute(url: string): string { - if (this.values[this.values.length - 1] !== url) { - if (this.values.includes(url)) { - this.values.push((url += this.id++)); - } else { - this.values.push(url); + addRoute(url: string): Route { + let route: Route = this.values[this.current]; + + if (this.values[this.current].url !== url) { + if (this.current !== this.values.length - 1) { + this.rebuildHistory(url); } + + route = new Route(url, (this.id += 1)); + this.values.push(route); + + this.current = this.values.length - 1; + } + + return route; + } + + rebuildHistory(url: string): void { + window.history.replaceState('', '', this.values[this.current + 1].url); + + for (let i = this.current + 2; i < this.values.length; i += 1) { + window.history.pushState('', '', this.values[i].url); } - this.current = this.values.length - 1; - return url; + window.history.pushState('', '', url); } - navigate(url: string): boolean { + navigate(route: Route): boolean { let targetIndex: number | null = null; - for (let i = 0; i < this.values.length; i++) { - if (this.values[i] === url) targetIndex = i; + + for (let i = 0; i < this.values.length; i += 1) { + if (this.values[i].url === route.url && this.values[i].id === route.id) { + targetIndex = i; + } } const delta: number = targetIndex - this.current; diff --git a/src/backend/timeJump.ts b/src/backend/timeJump.ts index 0a5e9e527..5256c32be 100644 --- a/src/backend/timeJump.ts +++ b/src/backend/timeJump.ts @@ -86,7 +86,7 @@ export default (origin, mode) => { // * Setting mode disables setState from posting messages to window mode.jumping = true; if (firstCall) circularComponentTable.clear(); - const navigating: boolean = routes.navigate(target.url); + const navigating: boolean = routes.navigate(target.route); if (navigating) { addEventListener('popstate', event => { jump(target); diff --git a/src/backend/tree.ts b/src/backend/tree.ts index d9416a490..eea769ab3 100644 --- a/src/backend/tree.ts +++ b/src/backend/tree.ts @@ -61,7 +61,7 @@ class Tree { recoilDomNode: any; - url: string; + route: {}; // Duplicate names: add a unique number ID // Create an object 'componentNames' to store each component name as a key and it's frequency of use as its value From fe52f47431cfef59449da7e040e80a2fb2483d7e Mon Sep 17 00:00:00 2001 From: Robert Tipton Date: Tue, 31 May 2022 21:43:40 -0400 Subject: [PATCH 03/33] Added logic to saveNew function in masterState.ts that ensures all components saved in componentActionsRecord point to components that are rendered in the DOM. Solves the problem of attempting to setState on unmounted components after returning to a route that had been navigated away from. Co-authored-by: Chris LeBrett <100822842+fscgolden@users.noreply.github.com> Co-authored-by: Robby Tipton <100332566+RobbyTipton@users.noreply.github.com> Co-authored-by: Joseph Park <10874783+joeepark@users.noreply.github.com> Co-authored-by: David Kim <101825171+codejunkie7@users.noreply.github.com> Co-authored-by: Kevin HoEun Lee <14950124+khobread@users.noreply.github.com> --- src/backend/masterState.ts | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/src/backend/masterState.ts b/src/backend/masterState.ts index e2a7283ad..0be180935 100644 --- a/src/backend/masterState.ts +++ b/src/backend/masterState.ts @@ -19,22 +19,37 @@ const componentActionsRecord: HookStates = []; let index = 0; export default { - //adds new component to ComponentActionsRecord + // adds new component to ComponentActionsRecord saveNew: (state, component): number => { componentActionsRecord[index] = { state, component }; + console.log('entire record of components is', [...componentActionsRecord]); index++; + + for (let i = 0; i < componentActionsRecord.length - 2; i++) { + if ( + componentActionsRecord[i].component.constructor.name === + component.constructor.name + ) { + console.log('reassigning componentActionsRecord at index', i); + componentActionsRecord[i] = { state, component }; + } + } + return index - 1; }, - getRecordByIndex: (inputIndex: number): HookStateItem => componentActionsRecord[inputIndex], - //this is used for class components - inputIndex will always be a fixed number (coming in timeJump.ts) - getComponentByIndex: (inputIndex: number): any => (componentActionsRecord[inputIndex] - ? componentActionsRecord[inputIndex].component - : undefined), - //this is used for react hooks - hooks will be passed in as an array from timeJump.ts + getRecordByIndex: (inputIndex: number): HookStateItem => + componentActionsRecord[inputIndex], + // this is used for class components - inputIndex will always be a fixed number (coming in timeJump.ts) + getComponentByIndex: (inputIndex: number): any => + componentActionsRecord[inputIndex] + ? componentActionsRecord[inputIndex].component + : undefined, + // this is used for react hooks - hooks will be passed in as an array from timeJump.ts getComponentByIndexHooks: (inputIndex: Array = []): any => { const multiDispatch = []; for (let i = 0; i < inputIndex.length; i++) { - if (componentActionsRecord[inputIndex[i]]) multiDispatch.push(componentActionsRecord[inputIndex[i]].component); + if (componentActionsRecord[inputIndex[i]]) + multiDispatch.push(componentActionsRecord[inputIndex[i]].component); } return multiDispatch; }, From 7ba2019f684f018dc7bc8c04c702ede7025e4f43 Mon Sep 17 00:00:00 2001 From: JosephPark Date: Tue, 31 May 2022 19:49:49 -0700 Subject: [PATCH 04/33] RouteDescription Completed git commit -m mergeMessageHere --- src/app/components/RouteDescription.tsx | 13 + src/app/containers/ActionContainer.tsx | 33 +- src/app/styles/components/_buttons.scss | 4 +- src/app/styles/layout/_actionContainer.scss | 7 + src/backend/linkFiber.ts | 1 + src/extension/build/build/__MACOSX/._build | Bin 0 -> 220 bytes .../build/build/__MACOSX/build/._.DS_Store | Bin 0 -> 120 bytes .../build/build/build/assets/icon128.png | Bin 0 -> 4123 bytes .../build/build/build/assets/icon48.png | Bin 0 -> 2351 bytes .../build/build/assets/logo-no-version.png | Bin 0 -> 55610 bytes .../build/build/build/assets/logo.png | Bin 0 -> 58236 bytes .../build/build/build/bundles/app.bundle.js | 87 ++++ .../build/build/bundles/app.bundle.js.map | 1 + .../build/build/bundles/backend.bundle.js | 1 + .../build/build/bundles/backend.bundle.js.map | 1 + .../build/build/bundles/background.bundle.js | 2 + .../build/bundles/background.bundle.js.map | 1 + .../build/build/bundles/content.bundle.js | 1 + .../build/build/bundles/content.bundle.js.map | 1 + src/extension/build/build/build/devtools.html | 15 + src/extension/build/build/build/devtools.js | 1 + src/extension/build/build/build/manifest.json | 22 + src/extension/build/build/build/panel.html | 15 + yarn.lock | 383 ++++++++---------- 24 files changed, 377 insertions(+), 212 deletions(-) create mode 100644 src/app/components/RouteDescription.tsx create mode 100644 src/extension/build/build/__MACOSX/._build create mode 100644 src/extension/build/build/__MACOSX/build/._.DS_Store create mode 100644 src/extension/build/build/build/assets/icon128.png create mode 100644 src/extension/build/build/build/assets/icon48.png create mode 100644 src/extension/build/build/build/assets/logo-no-version.png create mode 100644 src/extension/build/build/build/assets/logo.png create mode 100644 src/extension/build/build/build/bundles/app.bundle.js create mode 100644 src/extension/build/build/build/bundles/app.bundle.js.map create mode 100644 src/extension/build/build/build/bundles/backend.bundle.js create mode 100644 src/extension/build/build/build/bundles/backend.bundle.js.map create mode 100644 src/extension/build/build/build/bundles/background.bundle.js create mode 100644 src/extension/build/build/build/bundles/background.bundle.js.map create mode 100644 src/extension/build/build/build/bundles/content.bundle.js create mode 100644 src/extension/build/build/build/bundles/content.bundle.js.map create mode 100644 src/extension/build/build/build/devtools.html create mode 100644 src/extension/build/build/build/devtools.js create mode 100644 src/extension/build/build/build/manifest.json create mode 100644 src/extension/build/build/build/panel.html diff --git a/src/app/components/RouteDescription.tsx b/src/app/components/RouteDescription.tsx new file mode 100644 index 000000000..14619a8f0 --- /dev/null +++ b/src/app/components/RouteDescription.tsx @@ -0,0 +1,13 @@ +import React from "react"; + +const RouteDescription = (props) => { + const url = new URL(props.actions[0].props.routePath); + return ( +
+

Route: {url.pathname}

+ {props.actions} +
+ ); +}; + +export default RouteDescription; diff --git a/src/app/containers/ActionContainer.tsx b/src/app/containers/ActionContainer.tsx index f4367b8f3..1065f1ac6 100644 --- a/src/app/containers/ActionContainer.tsx +++ b/src/app/containers/ActionContainer.tsx @@ -10,6 +10,8 @@ import Action from '../components/Action'; import SwitchAppDropdown from '../components/SwitchApp'; import { emptySnapshots, changeView, changeSlider } from '../actions/actions'; import { useStoreContext } from '../store'; +import RouteDescription from '../components/RouteDescription'; + const resetSlider = () => { const slider = document.querySelector('.rc-slider-handle'); @@ -50,6 +52,7 @@ function ActionContainer(props): JSX.Element { displayName: `${obj.name}.${obj.branch}`, state: obj.stateSnapshot.children[0].state, componentName: obj.stateSnapshot.children[0].name, + routePath: obj.stateSnapshot.url, // nathan testing new entries for component name, original above // componentName: findDiff(obj.index), componentData: @@ -123,6 +126,7 @@ function ActionContainer(props): JSX.Element { handleOnkeyDown={handleOnKeyDown} viewIndex={viewIndex} isCurrIndex={isCurrIndex} + routePath={snapshot.routePath} /> ); @@ -142,6 +146,29 @@ function ActionContainer(props): JSX.Element { setRecordingActions(!recordingActions); }; + + // Create a cache that will be an array of all the route paths. + const cache = []; + for (let i = 0; i < actionsArr.length; i++) { + if (!cache.includes(actionsArr[i].props.routePath)){ + cache.push(actionsArr[i].props.routePath); + } + } + // Create cache2 as an object route path as a key and the individual-actions as the value. + const cache2 = {}; + for (const element of cache) { + cache2[element] = []; + } + // Create a conditional that will check if the individual-action matches the route path and add it to the cache2. + for (let i = 0; i < actionsArr.length; i++) { + for (const key in cache2){ + if (actionsArr[i].props.routePath === key) { + cache2[key].push(actionsArr[i]); + } + } + } + + // the conditional logic below will cause ActionContainer.test.tsx to fail as it cannot find the Empty button // UNLESS actionView={true} is passed into in the beforeEach() call in ActionContainer.test.tsx return ( @@ -184,7 +211,11 @@ function ActionContainer(props): JSX.Element { Clear -
{actionsArr}
+ {Object.keys(cache2).map((element) => { + return ( + + ) + })} ) : null} diff --git a/src/app/styles/components/_buttons.scss b/src/app/styles/components/_buttons.scss index f3c8b2f63..bc8d63b65 100644 --- a/src/app/styles/components/_buttons.scss +++ b/src/app/styles/components/_buttons.scss @@ -51,7 +51,7 @@ .empty-button { padding: 3px; outline: transparent; - color: white; + color: black; display: flex; justify-content: center; align-items: center; @@ -63,7 +63,7 @@ font: 300 14px 'Roboto', sans-serif; font-size: $button-text-size; width: 120px; - background: $red-color-gradient; + background: #62d6fb; } .empty-button:hover { diff --git a/src/app/styles/layout/_actionContainer.scss b/src/app/styles/layout/_actionContainer.scss index 8e076dee6..09640eea2 100644 --- a/src/app/styles/layout/_actionContainer.scss +++ b/src/app/styles/layout/_actionContainer.scss @@ -24,4 +24,11 @@ #recordBtn .fa-regular{ height: 100%; width: 28px; +} + +.route { + background-color: #ff6569; + padding-left: 10px; + padding-top: 5px; + padding-bottom: 5px; } \ No newline at end of file diff --git a/src/backend/linkFiber.ts b/src/backend/linkFiber.ts index 1902f66d0..e55c57584 100644 --- a/src/backend/linkFiber.ts +++ b/src/backend/linkFiber.ts @@ -94,6 +94,7 @@ function sendSnapshot(snap: Snapshot, mode: Mode): void { } const payload = snap.tree.cleanTreeCopy(); // if it's Recoil - run different actions + payload.url = window.location.href; if (isRecoil) { // getRecoilState() payload.atomsComponents = atomsComponents; diff --git a/src/extension/build/build/__MACOSX/._build b/src/extension/build/build/__MACOSX/._build new file mode 100644 index 0000000000000000000000000000000000000000..aa67e2ae80ef972e51d503f15da72d79e1beb74a GIT binary patch literal 220 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@hTt&@$UdJ5x_AdBnYYuq+<#Yd!T7! uM2Pbz=jZAr78K;9>g6UT=Kv*`7-ZHLdfDZ8=C7JsTd30Q^Bhe#kz4>cClyx! literal 0 HcmV?d00001 diff --git a/src/extension/build/build/__MACOSX/build/._.DS_Store b/src/extension/build/build/__MACOSX/build/._.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..a5b28df1cbc6e15bd0d35cdadd0c2e65d5131c7d GIT binary patch literal 120 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!U6R08`;00ODZ-jv*mIP;rnB Iur73U08|YJ=l}o! literal 0 HcmV?d00001 diff --git a/src/extension/build/build/build/assets/icon128.png b/src/extension/build/build/build/assets/icon128.png new file mode 100644 index 0000000000000000000000000000000000000000..5010da137e286141363342b4c4e72a07ea662bd5 GIT binary patch literal 4123 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 Z{{#0p%uH4foT2~#002ovPDHLkV1im)gkAsu literal 0 HcmV?d00001 diff --git a/src/extension/build/build/build/assets/icon48.png b/src/extension/build/build/build/assets/icon48.png new file mode 100644 index 0000000000000000000000000000000000000000..bcc3444010d22c06de89ca51832cea99201b59ad GIT binary patch literal 2351 zcmV+~3DEY5P)e$Z)O^a9RK842%|Dttr%w(yg#KfqG zXh6ltCL$upe%Vz75xIBzc`xtv+9@V4kKhL1qn1Y=dQu=ei5O+{Awx8oVn&59~@$$D!h4B*nzwyPvP3cX(KR z*z^TIH#Un0vQtt}nw#rqW#ErH`ujk|tVnr)R-%bAlalb~BS(;tl!))HUd8#A7TEdh zC5b%jb~|0*^n~WOa{c1cTF9Blk1_Z3sb1!GbSdDlI|Yr6jKo_drAUpBM{;beY^f_C zgO{O()>fRoc1^J`8d9m_Au})EuB=2=L80rDvvYHp_ocvs?D@%u4<+E}i69jVd$O_- z9UdV{#NkYH6MpIGaWP!&N&Ef#`26C9fM3hqp6aH+;hwImD|M&rw<&!Ur*KI-Rf#=Sg#zWAOG);9$v9K>`voad{IfXY+pwA-~j$!cLu|g z6Zm6ACHC&vp|U~LmMwUrun-B+Tag$YE#7FxfX!yX>esoIzHJ*4C6Q>Fe)I@)3k&+v zbaXT6@Z==El5}-{WK^ZX6Z`fltFK$P4*98RpfVYW&H!(0Z#OaXek1TiaImNdMY4T0 zHQl}~#vRm`rlXqzeERUo6EwEBVQgj^i3wu6v#*mI~-aqtnx>9+1(< z3VFx%Vr7GiQZT3Ut=4;^x|{)L-2(Iy`7 zMLreai%%r~Hg|QY>@+$(g=6LA*paeb@r;Rx#F4!vYHMwi0RQpEb-C{@zJd}yV{XoS9r5=D25;4GBo`FV1lg>b|AG1<0X*4LxH z^%mwAt>J@+CG(_7=I~}+ zE2}XcXz|Z}I;RvM&QS>1YH@(~0#blN?o3O^pAH|!ekt|Flo#N4)H22aGYq$Bv_7WjsR0 ztiETOn(#&aMP+rXk5PEz1cCd$Px=eCln-oUI4w0}e?ft(h;bUiQA}oHl2qV}QU|)R zBq=#ivQ&T#3@!EM-n}ksPD^7?;XgfFhXENfc_RvMELd`>uo3%)pJd80E=G7D9o>h#Yv4SV?c)>%qS+ocAd_*K(?6^Z=!I4pW?< zkdR_r0>4Lcf33s;=SMUc|5u4;7$*#HZqY7@FCRdbpL0&;)S2NYM}n|s&mNcc?+y*( zpMpetr11D7wS`tjgIw#33HP@~1?Nz}v8ibZ=4w?}bQi`1Kxocs2tgg=j8MZHnLH4- zaicJZ0UH+*tOjUJ#@|4?)6AB{NFE7=jy|2&J^=VEf1(>5tC6{X}65=wb{Ov`}kRC9> z3$p|Ca&;uAt7~q8O@;`pFNY<0u)iSDpdTDOhk}HNMN;UP#0Tp^tu#l>gycn-&aB1Qc%-H#FGe~h1^7Lq z!5Gk=yz`D4&gvnpUFN9jTqb5DC#2!u0vyOGkT za?C>LL1N9I5=Js9V0_5)f{YC0Nkw*uuoRp@P2nB-$VI$X2Z#D&iB14~v=(B3^KSy9 zQMX zYiGW9<{y2|wLG7EIP2{-zxNs79Px8Y9WSp?3K?HA^~6kD#QrMwj4S<|tK=y!Y2o$z z%t}m^ffPYMpFpxq0_WxzB(c0et|kTiG5Nhcw;mJx-lX&)&uayI80Y`;=#}@te*x28 VivJR-ozegR002ovPDHLkV1k!;lE?r6 literal 0 HcmV?d00001 diff --git a/src/extension/build/build/build/assets/logo-no-version.png b/src/extension/build/build/build/assets/logo-no-version.png new file mode 100644 index 0000000000000000000000000000000000000000..1cbbd91bf6e3b29cd1192cc4d2c19751c56a7c04 GIT binary patch literal 55610 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 literal 0 HcmV?d00001 diff --git a/src/extension/build/build/build/assets/logo.png b/src/extension/build/build/build/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..04c13455fd2b1849fe6de1d1535a6cd485aae64e GIT binary patch literal 58236 zcmeEuWmjC$vTYLx?(WiPa0%|vxCeI)gb>_=dn1A19$bREOK^ukg1fuBzn$~$hjahI z`|$P{utzTj^j@{9YR*|zO}MJE3>q>qG6)1hlaqyf0D<7iK_D0!M0jB3H;%#&;D+QN ztLqE`q4)m#f=OgTCjo(wRjef?RaHOPyVyH_vUi}Ala!=%aI&|w{_+t7@>s}Jx6)AG z#}~d`xsp(T`X?yZf51be{2&qOj~h$JNQHzc52ebP$5ZRVl9GZW8O(;lMo0Tc;i)mB zMj+22Y*FP#2jxK{h9B3x@@!_>Zg<9B>SslE%Puo(ClG!iq9)05sd4+G{*)lcS_>NJ z?O)$w6$?P7aR6Z=)>=?GKU2ei?tF!Wn83dfIzTWUe^3xXzm(E{v6F_qVjM`M8o>Am z!~AlIN8jad#l;a|aKW}7eD6QvGf zAkeyt@8kGpc9V}mAu(=b2=?ryDn^h&XSbRrHZ*lcMhM&_vz z<@Jf|54cy(tXYQ;EZeeZu|qRPm2k*#3%< zz5k{5DKy>zowZxD30>F$+_)dCd8EJBAm8j&D1aP@v+XYKEisODoviZ>sr z2A83h_7hiWmBF@#Uz<-v9BUhcTF@-%PJ!SWS zdY}1c`g>Vo>iD4r3!54Q{sd-9rooV{%&nd+t}T)+stbMOOfxaZ{5$mxh7ZG^<%za2 zx8HBWe@x*N*UU@%uw0y@fyEu8CsCf$@S##ItQhCLYa0Jp5Wbv3L3wWCAL360pKh%y z_gq@AmJ`X9lYeVZjqJX2@wdbh};P)Qxpq{{zMWDXt48g z9H#81Vx-z@>M%AidgH|oBPYry(j}5GvT6J*DJ)qjLD9U_9MOpRX{7E`A+5=!zWEdB zZ&ImdNv7(dI*Gc~Pr>4_602f+4bgmG-RE$4-5$jr70G}uo9wth+!bD~-gW-1%B z(ooj`?q0g;v3YMd#@3W)vero9lAk&Jl3em!+O;1p6D&m$Hd7q$GF+6Ab{UG2FMT6c za8KWDydx=muh`7-(ZHr8DLF}}RJK&DROYaqr{cIMv#?#NRrfIfU3@^E-hf`lDrWp` z=C1m@`f?F+5x$bJz;y*{iA@1XPAkN{)2`?wrD0ZKQdMXR?W^qm(a*?g}@QkWD(YMlK$nv z_APmrYe&QNuT$5V>9y(I$Hj}4Cp;(CCt*ujqwllc{m|ud{@pVuxu&)~DT(|#wP?0|^j1_EnfOvrZo5#Da-c+5@q5_K_Z))a`#iO#D#qq>r0?Pxp zyUM9P4IX_jr@Gxu8IK*eMh{W--JAK1V7g-(+2e~!9}*U#9V!~_0M#L$d1XjAmwLetl+Wx(y{t< zd>OWpxq-6jMUcWaXz1XXGv0j_QiT7L6`NTgNlX!{%$IN`j>%YzA4PkC<4zlm?AcA$ zZ3SkV~}|r5-O$m2CD7vX3D(FMW2AjcnwJ2tzit-^ zCf-}7P%Zc}p{9riM%!tX(qrx93g33RuSzxnMqR^!UG*?FhbWrJ+aW%OOS8v@DmrYs ztM#T2p_wEic;OKhxQhhIcz$yXOCH-KVfMqFsY?lUKTCU?Eha3dEcbU-SbpfECzT}c zB%|A*%`eoUt!mXBU*AYAvL%l(EVc$UNH*tn3N^KTEE*ag6BO0R*SOMn(BL_lTCO*p zy|bGCx7(T-ny~cmQ?^ z_8Ea1yE^ z{1b0=F%gxSnCauodcS0{nA_mBYd*gE8N>dx1=D4HO6oOoSFlZR+~A_g<)UVB8%MiI zJFQZ{*!IBXKaqodL@FPwN2Upt8~uSt+{Qr0XAg)&=hv%;}UJJT`QwxMJ9G4Ei-%Pt66aaNIS zf~_lczoJ9awWOu>Kq6G^Z(sK_J@G~i7ZBR79LdM_j^wa z5xyUas}~m+U*CJp9Em0PWByN|71QWIFyH>?_f&6ms!hLf&k#-(sbs}NKWSK%HP)9O z_haBQr&xp_LjNbC{hbj0Cng#6%jQg?a;|5MUpXyT>X{k`ph6cXf~N)`tT+GpiwW3D z-;}&?CM_X#+*r2q5ZLffuHX_dSlRPh0lEhZ{u&1*FD)<4jG+GT^e-CyS$Fyfj9iXI zI?9thSd;ZnPFJV>+Ek+!OmXAPX+4%YzCEp6r7BuBclyoRaHWnqv2k*xqT1H%(>V_x zH@Qz&N9IBsmOd-AVQ6Er@SzfM<}*z6yuRFaF1pu)&QEt=g`K35$F`kLYE3mo7MT(&$m3(IMHn|LCH5 z^VmA~HN9Nn=F(Mab-;Q+wX^Ze2Qc8aq`LW^_uvB=$aDB7H1L5OWEz62_7E5(4J{6V zicsb9hVKuGJ-(9u~&h{95X z@xf+vW`%=3%$%|M(NKP{B^CHFKAhjz2)bDi&ykt}O}^!AjoqYwcDuVS9++=W3!b-A zyYP4+9I}a@y{mq5oBPOr4~cGEwZkc`47M;-Yooy_y>5kBwzdcN6TaD06HYFK5`HFmF}Rl=b5 zW}sZ*ek)!@I`PlT)8oBg3@N+GufEYXEA6t*f`aW_Khf9IIOS+p{C}Qm!GVH~-|7>I z&myot&p+XodRKL`V6$2K1#fWMDIQvEGVo<($uqsYc3hw{Jol5L-s01G7zKKd`<|2M z!|KHAqjtg5y`JLfW{l{I$D`R?G=Z^4wcoOyP5TH$_$<8MJ9zJqP2|;kk1pNr0x7rp z;5|2wskA-v-!a%3ZooQ%jc)J+0(19dV>EVA?^}%@9%()N?Ycf&W=v`5U6S4?m{FYTg7d=mSaD-AGb`_kukyYTTKBH#`|uudtwj`b#-SLtg&Beca~*qRVxpN#-y(6 z)q1*LuMe)neh7Psa07WlJ(uA?1IA3#N(?raA!3I0s#;dv<(Ki+H6J=-#9Zx$xC_r>IE2%mjHdr!$8U z8)x5fW(l--cC9NY3!J<3c-raL|9IN*dQL97vdIe0oi*}8%QYc@T{or00)w$yHX@jU zQ}!A=U!Ok{#XhUtPgfRF3P?HSEHc^}Y+tN~<72*J$4=;T2~veaz{!6tlj~-i9UX^! zl(F}2M5}*b(WW|HW69F}q&8vVz=1HY|9UXCn?y*Q z%2LZw5~gkd6+S3M37hPLK2Z#t9R@a)WLy4vFUG}2#ELuxb}MjkOoYdk8!J>9-$gOiu}T1#WQSLsMPkeC%aV9VIj@&-M_*OzA!dCvQuw#)BS zk~{Btcus`>{p{|jY)L)!!+T+4BNTeo2lmNvD3C$@quIaAvHNaS#vCOMS%kWut~|f7 zjFz_uMBa7cr_25HJ6l{E3rqN>aexOmb~Y4^#0`V%kKfBB1tO*)TyR)o7hR<01$R7` zahB7;yQjs~mz>4@qO8ABlz0P-`Q{R&=hITWtF=q zFS-MgxO(Xa+q2i=_s*NDKds~JCD1Ijf5+-DvJJ!I3^tsWd~%{yY}#%^Tw5TgCCMvA z%J_wa^phpx?VDl2+446%IoVjf!R^Ie8+dR=h2!0k?4c=Or-K+A&){Tj&5ahe05E<0 z(2=Oc;P>avOQRnd!ZtTQA()gP&_2gMn;e!muFR|99;+Wbe$dwDRYGaHJ7V5YP>yYo zh;Do?J~p=g3~~3b$kizIQ>}*s2p#p8`f06L=wM!qkbn{7=5R7^VDH1L@)2;C0#2ky zhQiZDM?qmkv|-6RqW z71=$-Lvc$)-_paJpVU2#7a%xJ`|>u>E)h~v5U2N1hc-u#hrc@DX|-Ek7PIrQqB_2u z-H``PLf{N+gk-8Myzw?dtjVE+z&C^DbJiv^8(GS|mt-hvDm7T;Uo7K-X(q+?KcEt< z$+Cxx{^0ha!I}h|se&$-Z1`hmng8RwRTdd1U_lL0UPtA1XVl)Sqj_gg^gF1UhP$D-<~W_3~f7oJa3OX>RAx}dd26r-W|gIhq&;1!7|BdaLehKB z0vv2Y>%gxOKgy@l21ldJYV0|k=rpaV-5w_9%E26fCYBMb@)GMf{RRTD*w{U8^Ktzi zAA#sJFvt4Nj^o^%Ui3Nb_}+98Eu>q#N?@`QuYLMl^iVhUh~(#hoPD~VconN!Xis7#^mU7vAL1pI*R7(`#E|oRsjr8#g-dR%TCI_D#at zBBwP~&CA2#tJ_W4Jhg2N<^Wm(^5yOrMKgdgS%H@o9;&%Lq>R*);*1hHj`yrbDVxL`nQ=|ucy7CT)C6bsHnakO48K;&iI z+}yAmYr)qwHmcj&9uukIX0rP%TuI7A69x!*&eiBos<>21bURr@*vk$g z(B}{cWK0B==pY(d4aA?3YHkV`Bc78bwxx7ce1)KJ*(uVe!NE|nbbAo$Fn z-Z{=(NnLdyw!T3bl+Izw9%LkmZwK)%o>dcO844JB(Foa1L`jVSD#z4=E_n3ab1eV? zohsLS*3f^{z1LnF}==< z;Zg{6@3!+*xHpVdK-Dxc&?ibWQNrnH={(QGO?3Y=e4Z42X7KH9$d6@;7^<$6ky6s{ z+1-JIDwnf~sJO^@@+oI{grPdYQL2=d!Is#j*CE$YXNx%yghLW4$7vZ=`|P?mT4_OE zMxLfs%Q`o2LPWug(b)aW#h6%ZMo`|qUt{h>ssP@FDiJ1?-1(;;4Cm^^sj1<9`*}rl zkVqq-!$aD#P72N~`r(bd0lSBJ+~wVd&&*6{yhUGyb!;Oj zJMeDhwj;TH_r&XF+_EG~RhS=JkV zU}-t9{NQ>WBphp4N)nFK4S@h)c6x}_KK>-8*4Y&7K4tk%f~Gd7RF1(MgYvRure z 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 literal 0 HcmV?d00001 diff --git a/src/extension/build/build/build/bundles/app.bundle.js b/src/extension/build/build/build/bundles/app.bundle.js new file mode 100644 index 000000000..123fe3a81 --- /dev/null +++ b/src/extension/build/build/build/bundles/app.bundle.js @@ -0,0 +1,87 @@ +!function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=1152)}([function(t,e,n){"use strict";t.exports=n(517)},function(t,e,n){t.exports=n(522)()},,,function(t,e,n){var r; +/*! + Copyright (c) 2017 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames +*/!function(){"use strict";var n={}.hasOwnProperty;function i(){for(var t=[],e=0;e0))return a;do{a.push(o=new Date(+n)),e(n,i),t(n)}while(o=e)for(;t(e),!n(e);)e.setTime(e-1)}),(function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););}))},n&&(s.count=function(e,o){return r.setTime(+e),i.setTime(+o),t(r),t(i),Math.floor(n(r,i))},s.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?s.filter(a?function(e){return a(e)%t==0}:function(e){return s.count(0,e)%t==0}):s:null}),s}},,function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},,function(t,e,n){"use strict";n.d(e,"d",(function(){return r})),n.d(e,"c",(function(){return i})),n.d(e,"b",(function(){return o})),n.d(e,"a",(function(){return a})),n.d(e,"e",(function(){return s}));var r=1e3,i=6e4,o=36e5,a=864e5,s=6048e5},function(t,e,n){"use strict";n.d(e,"c",(function(){return o})),n.d(e,"b",(function(){return a})),n.d(e,"a",(function(){return s}));var r=n(122);function i(t,e){return function(n){return t+n*e}}function o(t,e){var n=e-t;return n?i(t,n>180||n<-180?n-360*Math.round(n/360):n):Object(r.a)(isNaN(t)?e:t)}function a(t){return 1==(t=+t)?s:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):Object(r.a)(isNaN(e)?n:e)}}function s(t,e){var n=e-t;return n?i(t,n):Object(r.a)(isNaN(t)?e:t)}},,,function(t,e){var n,r,i=t.exports={};function o(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(t){if(n===setTimeout)return setTimeout(t,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(t){n=o}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(t){r=a}}();var u,l=[],c=!1,f=-1;function h(){c&&u&&(c=!1,u.length?l=u.concat(l):f=-1,l.length&&d())}function d(){if(!c){var t=s(h);c=!0;for(var e=l.length;e;){for(u=l,l=[];++f1)for(var n=1;n + * @license MIT + */ +var r=n(697),i=n(698),o=n(224);function a(){return u.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(t,e){if(a()=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|t}function p(t,e){if(u.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var r=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return q(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return z(t).length;default:if(r)return q(t).length;e=(""+e).toLowerCase(),r=!0}}function m(t,e,n){var r=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return C(this,e,n);case"utf8":case"utf-8":return S(this,e,n);case"ascii":return O(this,e,n);case"latin1":case"binary":return A(this,e,n);case"base64":return E(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return T(this,e,n);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}function g(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function v(t,e,n,r,i){if(0===t.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=i?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(i)return-1;n=t.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof e&&(e=u.from(e,r)),u.isBuffer(e))return 0===e.length?-1:b(t,e,n,r,i);if("number"==typeof e)return e&=255,u.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):b(t,[e],n,r,i);throw new TypeError("val must be string, number or Buffer")}function b(t,e,n,r,i){var o,a=1,s=t.length,u=e.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(t.length<2||e.length<2)return-1;a=2,s/=2,u/=2,n/=2}function l(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}if(i){var c=-1;for(o=n;os&&(n=s-u),o=n;o>=0;o--){for(var f=!0,h=0;hi&&(r=i):r=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");r>o/2&&(r=o/2);for(var a=0;a>8,i=n%256,o.push(i),o.push(r);return o}(e,t.length-n),t,n,r)}function E(t,e,n){return 0===e&&n===t.length?r.fromByteArray(t):r.fromByteArray(t.slice(e,n))}function S(t,e,n){n=Math.min(t.length,n);for(var r=[],i=e;i239?4:l>223?3:l>191?2:1;if(i+f<=n)switch(f){case 1:l<128&&(c=l);break;case 2:128==(192&(o=t[i+1]))&&(u=(31&l)<<6|63&o)>127&&(c=u);break;case 3:o=t[i+1],a=t[i+2],128==(192&o)&&128==(192&a)&&(u=(15&l)<<12|(63&o)<<6|63&a)>2047&&(u<55296||u>57343)&&(c=u);break;case 4:o=t[i+1],a=t[i+2],s=t[i+3],128==(192&o)&&128==(192&a)&&128==(192&s)&&(u=(15&l)<<18|(63&o)<<12|(63&a)<<6|63&s)>65535&&u<1114112&&(c=u)}null===c?(c=65533,f=1):c>65535&&(c-=65536,r.push(c>>>10&1023|55296),c=56320|1023&c),r.push(c),i+=f}return function(t){var e=t.length;if(e<=4096)return String.fromCharCode.apply(String,t);var n="",r=0;for(;r0&&(t=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(t+=" ... ")),""},u.prototype.compare=function(t,e,n,r,i){if(!u.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),e<0||n>t.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&e>=n)return 0;if(r>=i)return-1;if(e>=n)return 1;if(this===t)return 0;for(var o=(i>>>=0)-(r>>>=0),a=(n>>>=0)-(e>>>=0),s=Math.min(o,a),l=this.slice(r,i),c=t.slice(e,n),f=0;fi)&&(n=i),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return y(this,t,e,n);case"utf8":case"utf-8":return w(this,t,e,n);case"ascii":return _(this,t,e,n);case"latin1":case"binary":return M(this,t,e,n);case"base64":return x(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return k(this,t,e,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},u.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function O(t,e,n){var r="";n=Math.min(t.length,n);for(var i=e;ir)&&(n=r);for(var i="",o=e;on)throw new RangeError("Trying to access beyond buffer length")}function P(t,e,n,r,i,o){if(!u.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function j(t,e,n,r){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-n,2);i>>8*(r?i:1-i)}function N(t,e,n,r){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-n,4);i>>8*(r?i:3-i)&255}function D(t,e,n,r,i,o){if(n+r>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function L(t,e,n,r,o){return o||D(t,0,n,4),i.write(t,e,n,r,23,4),n+4}function I(t,e,n,r,o){return o||D(t,0,n,8),i.write(t,e,n,r,52,8),n+8}u.prototype.slice=function(t,e){var n,r=this.length;if((t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e0&&(i*=256);)r+=this[t+--e]*i;return r},u.prototype.readUInt8=function(t,e){return e||R(t,1,this.length),this[t]},u.prototype.readUInt16LE=function(t,e){return e||R(t,2,this.length),this[t]|this[t+1]<<8},u.prototype.readUInt16BE=function(t,e){return e||R(t,2,this.length),this[t]<<8|this[t+1]},u.prototype.readUInt32LE=function(t,e){return e||R(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},u.prototype.readUInt32BE=function(t,e){return e||R(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},u.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||R(t,e,this.length);for(var r=this[t],i=1,o=0;++o=(i*=128)&&(r-=Math.pow(2,8*e)),r},u.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||R(t,e,this.length);for(var r=e,i=1,o=this[t+--r];r>0&&(i*=256);)o+=this[t+--r]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*e)),o},u.prototype.readInt8=function(t,e){return e||R(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},u.prototype.readInt16LE=function(t,e){e||R(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt16BE=function(t,e){e||R(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt32LE=function(t,e){return e||R(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},u.prototype.readInt32BE=function(t,e){return e||R(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},u.prototype.readFloatLE=function(t,e){return e||R(t,4,this.length),i.read(this,t,!0,23,4)},u.prototype.readFloatBE=function(t,e){return e||R(t,4,this.length),i.read(this,t,!1,23,4)},u.prototype.readDoubleLE=function(t,e){return e||R(t,8,this.length),i.read(this,t,!0,52,8)},u.prototype.readDoubleBE=function(t,e){return e||R(t,8,this.length),i.read(this,t,!1,52,8)},u.prototype.writeUIntLE=function(t,e,n,r){(t=+t,e|=0,n|=0,r)||P(this,t,e,n,Math.pow(2,8*n)-1,0);var i=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+i]=t/o&255;return e+n},u.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||P(this,t,e,1,255,0),u.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},u.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||P(this,t,e,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):j(this,t,e,!0),e+2},u.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||P(this,t,e,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):j(this,t,e,!1),e+2},u.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||P(this,t,e,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):N(this,t,e,!0),e+4},u.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||P(this,t,e,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):N(this,t,e,!1),e+4},u.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);P(this,t,e,n,i-1,-i)}var o=0,a=1,s=0;for(this[e]=255&t;++o>0)-s&255;return e+n},u.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);P(this,t,e,n,i-1,-i)}var o=n-1,a=1,s=0;for(this[e+o]=255&t;--o>=0&&(a*=256);)t<0&&0===s&&0!==this[e+o+1]&&(s=1),this[e+o]=(t/a>>0)-s&255;return e+n},u.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||P(this,t,e,1,127,-128),u.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},u.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||P(this,t,e,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):j(this,t,e,!0),e+2},u.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||P(this,t,e,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):j(this,t,e,!1),e+2},u.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||P(this,t,e,4,2147483647,-2147483648),u.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):N(this,t,e,!0),e+4},u.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||P(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):N(this,t,e,!1),e+4},u.prototype.writeFloatLE=function(t,e,n){return L(this,t,e,!0,n)},u.prototype.writeFloatBE=function(t,e,n){return L(this,t,e,!1,n)},u.prototype.writeDoubleLE=function(t,e,n){return I(this,t,e,!0,n)},u.prototype.writeDoubleBE=function(t,e,n){return I(this,t,e,!1,n)},u.prototype.copy=function(t,e,n,r){if(n||(n=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e=0;--i)t[i+e]=this[i+n];else if(o<1e3||!u.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(o=e;o55295&&n<57344){if(!i){if(n>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===r){(e-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(e-=3)>-1&&o.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((e-=1)<0)break;o.push(n)}else if(n<2048){if((e-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function z(t){return r.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(B,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function U(t,e,n,r){for(var i=0;i=e.length||i>=t.length);++i)e[i+n]=t[i];return i}}).call(this,n(26))},,,function(t,e,n){"use strict";function r(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e}n.d(e,"a",(function(){return r}))},function(t,e){var n=t.exports={version:"2.6.11"};"number"==typeof __e&&(__e=n)},,,,,,,,,function(t,e,n){"use strict";e.__esModule=!0,e.default=function(t,e){var n={};for(var r in t)e.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n}},function(t,e,n){"use strict";e.__esModule=!0;var r,i=n(329),o=(r=i)&&r.__esModule?r:{default:r};e.default=function(){function t(t,e){for(var n=0;n>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?M(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?M(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=f.exec(t))?new E(e[1],e[2],e[3],1):(e=h.exec(t))?new E(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=d.exec(t))?M(e[1],e[2],e[3],e[4]):(e=p.exec(t))?M(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=m.exec(t))?C(e[1],e[2]/100,e[3]/100,1):(e=g.exec(t))?C(e[1],e[2]/100,e[3]/100,e[4]):v.hasOwnProperty(t)?_(v[t]):"transparent"===t?new E(NaN,NaN,NaN,0):null}function _(t){return new E(t>>16&255,t>>8&255,255&t,1)}function M(t,e,n,r){return r<=0&&(t=e=n=NaN),new E(t,e,n,r)}function x(t){return t instanceof i||(t=w(t)),t?new E((t=t.rgb()).r,t.g,t.b,t.opacity):new E}function k(t,e,n,r){return 1===arguments.length?x(t):new E(t,e,n,null==r?1:r)}function E(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function S(){return"#"+A(this.r)+A(this.g)+A(this.b)}function O(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function A(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function C(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new P(t,e,n,r)}function T(t){if(t instanceof P)return new P(t.h,t.s,t.l,t.opacity);if(t instanceof i||(t=w(t)),!t)return new P;if(t instanceof P)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,o=Math.min(e,n,r),a=Math.max(e,n,r),s=NaN,u=a-o,l=(a+o)/2;return u?(s=e===a?(n-r)/u+6*(n0&&l<1?0:s,new P(s,u,l,t.opacity)}function R(t,e,n,r){return 1===arguments.length?T(t):new P(t,e,n,null==r?1:r)}function P(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function j(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}Object(r.a)(i,w,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:b,formatHex:b,formatHsl:function(){return T(this).formatHsl()},formatRgb:y,toString:y}),Object(r.a)(E,k,Object(r.b)(i,{brighter:function(t){return t=null==t?a:Math.pow(a,t),new E(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?o:Math.pow(o,t),new E(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:S,formatHex:S,formatRgb:O,toString:O})),Object(r.a)(P,R,Object(r.b)(i,{brighter:function(t){return t=null==t?a:Math.pow(a,t),new P(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?o:Math.pow(o,t),new P(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new E(j(t>=240?t-240:t+120,i,r),j(t,i,r),j(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}))},,function(t,e,n){"use strict";function r(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}n.d(e,"b",(function(){return r})),e.a=function(t,e,n){t.prototype=e.prototype=n,n.constructor=t}},,,,,,,function(t,e){function n(t,e){if(!t)throw new Error(e||"Assertion failed")}t.exports=n,n.equal=function(t,e,n){if(t!=e)throw new Error(n||"Assertion failed: "+t+" != "+e)}},function(t,e,n){"use strict";var r=e,i=n(73),o=n(59),a=n(363);r.assert=o,r.toArray=a.toArray,r.zero2=a.zero2,r.toHex=a.toHex,r.encode=a.encode,r.getNAF=function(t,e,n){var r=new Array(Math.max(t.bitLength(),n)+1);r.fill(0);for(var i=1<(i>>1)-1?(i>>1)-u:u,o.isubn(s)):s=0,r[a]=s,o.iushrn(1)}return r},r.getJSF=function(t,e){var n=[[],[]];t=t.clone(),e=e.clone();for(var r=0,i=0;t.cmpn(-r)>0||e.cmpn(-i)>0;){var o,a,s,u=t.andln(3)+r&3,l=e.andln(3)+i&3;if(3===u&&(u=-1),3===l&&(l=-1),0==(1&u))o=0;else o=3!==(s=t.andln(7)+r&7)&&5!==s||2!==l?u:-u;if(n[0].push(o),0==(1&l))a=0;else a=3!==(s=e.andln(7)+i&7)&&5!==s||2!==u?l:-l;n[1].push(a),2*r===o+1&&(r=1-r),2*i===a+1&&(i=1-i),t.iushrn(1),e.iushrn(1)}return n},r.cachedProperty=function(t,e,n){var r="_"+e;t.prototype[e]=function(){return void 0!==this[r]?this[r]:this[r]=n.call(this)}},r.parseBytes=function(t){return"string"==typeof t?r.toArray(t,"hex"):t},r.intFromLE=function(t){return new i(t,"hex","le")}},,function(t,e,n){"use strict";e.a=function(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}},function(t,e,n){var r=n(212)("wks"),i=n(158),o=n(82).Symbol,a="function"==typeof o;(t.exports=function(t){return r[t]||(r[t]=a&&o[t]||(a?o:i)("Symbol."+t))}).store=r},,,function(t,e,n){"use strict";var r,i="object"==typeof Reflect?Reflect:null,o=i&&"function"==typeof i.apply?i.apply:function(t,e,n){return Function.prototype.apply.call(t,e,n)};r=i&&"function"==typeof i.ownKeys?i.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:function(t){return Object.getOwnPropertyNames(t)};var a=Number.isNaN||function(t){return t!=t};function s(){s.init.call(this)}t.exports=s,t.exports.once=function(t,e){return new Promise((function(n,r){function i(){void 0!==o&&t.removeListener("error",o),n([].slice.call(arguments))}var o;"error"!==e&&(o=function(n){t.removeListener(e,i),r(n)},t.once("error",o)),t.once(e,i)}))},s.EventEmitter=s,s.prototype._events=void 0,s.prototype._eventsCount=0,s.prototype._maxListeners=void 0;var u=10;function l(t){if("function"!=typeof t)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}function c(t){return void 0===t._maxListeners?s.defaultMaxListeners:t._maxListeners}function f(t,e,n,r){var i,o,a,s;if(l(n),void 0===(o=t._events)?(o=t._events=Object.create(null),t._eventsCount=0):(void 0!==o.newListener&&(t.emit("newListener",e,n.listener?n.listener:n),o=t._events),a=o[e]),void 0===a)a=o[e]=n,++t._eventsCount;else if("function"==typeof a?a=o[e]=r?[n,a]:[a,n]:r?a.unshift(n):a.push(n),(i=c(t))>0&&a.length>i&&!a.warned){a.warned=!0;var u=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");u.name="MaxListenersExceededWarning",u.emitter=t,u.type=e,u.count=a.length,s=u,console&&console.warn&&console.warn(s)}return t}function h(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function d(t,e,n){var r={fired:!1,wrapFn:void 0,target:t,type:e,listener:n},i=h.bind(r);return i.listener=n,r.wrapFn=i,i}function p(t,e,n){var r=t._events;if(void 0===r)return[];var i=r[e];return void 0===i?[]:"function"==typeof i?n?[i.listener||i]:[i]:n?function(t){for(var e=new Array(t.length),n=0;n0&&(a=e[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var u=i[t];if(void 0===u)return!1;if("function"==typeof u)o(u,this,e);else{var l=u.length,c=g(u,l);for(n=0;n=0;o--)if(n[o]===e||n[o].listener===e){a=n[o].listener,i=o;break}if(i<0)return this;0===i?n.shift():function(t,e){for(;e+1=0;r--)this.removeListener(t,e[r]);return this},s.prototype.listeners=function(t){return p(this,t,!0)},s.prototype.rawListeners=function(t){return p(this,t,!1)},s.listenerCount=function(t,e){return"function"==typeof t.listenerCount?t.listenerCount(e):m.call(t,e)},s.prototype.listenerCount=m,s.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}},function(t,e,n){(function(t){function n(t){return Object.prototype.toString.call(t)}e.isArray=function(t){return Array.isArray?Array.isArray(t):"[object Array]"===n(t)},e.isBoolean=function(t){return"boolean"==typeof t},e.isNull=function(t){return null===t},e.isNullOrUndefined=function(t){return null==t},e.isNumber=function(t){return"number"==typeof t},e.isString=function(t){return"string"==typeof t},e.isSymbol=function(t){return"symbol"==typeof t},e.isUndefined=function(t){return void 0===t},e.isRegExp=function(t){return"[object RegExp]"===n(t)},e.isObject=function(t){return"object"==typeof t&&null!==t},e.isDate=function(t){return"[object Date]"===n(t)},e.isError=function(t){return"[object Error]"===n(t)||t instanceof Error},e.isFunction=function(t){return"function"==typeof t},e.isPrimitive=function(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||void 0===t},e.isBuffer=t.isBuffer}).call(this,n(33).Buffer)},function(t,e,n){"use strict";var r=n(59),i=n(7);function o(t,e){return 55296==(64512&t.charCodeAt(e))&&(!(e<0||e+1>=t.length)&&56320==(64512&t.charCodeAt(e+1)))}function a(t){return(t>>>24|t>>>8&65280|t<<8&16711680|(255&t)<<24)>>>0}function s(t){return 1===t.length?"0"+t:t}function u(t){return 7===t.length?"0"+t:6===t.length?"00"+t:5===t.length?"000"+t:4===t.length?"0000"+t:3===t.length?"00000"+t:2===t.length?"000000"+t:1===t.length?"0000000"+t:t}e.inherits=i,e.toArray=function(t,e){if(Array.isArray(t))return t.slice();if(!t)return[];var n=[];if("string"==typeof t)if(e){if("hex"===e)for((t=t.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(t="0"+t),i=0;i>6|192,n[r++]=63&a|128):o(t,i)?(a=65536+((1023&a)<<10)+(1023&t.charCodeAt(++i)),n[r++]=a>>18|240,n[r++]=a>>12&63|128,n[r++]=a>>6&63|128,n[r++]=63&a|128):(n[r++]=a>>12|224,n[r++]=a>>6&63|128,n[r++]=63&a|128)}else for(i=0;i>>0}return a},e.split32=function(t,e){for(var n=new Array(4*t.length),r=0,i=0;r>>24,n[i+1]=o>>>16&255,n[i+2]=o>>>8&255,n[i+3]=255&o):(n[i+3]=o>>>24,n[i+2]=o>>>16&255,n[i+1]=o>>>8&255,n[i]=255&o)}return n},e.rotr32=function(t,e){return t>>>e|t<<32-e},e.rotl32=function(t,e){return t<>>32-e},e.sum32=function(t,e){return t+e>>>0},e.sum32_3=function(t,e,n){return t+e+n>>>0},e.sum32_4=function(t,e,n,r){return t+e+n+r>>>0},e.sum32_5=function(t,e,n,r,i){return t+e+n+r+i>>>0},e.sum64=function(t,e,n,r){var i=t[e],o=r+t[e+1]>>>0,a=(o>>0,t[e+1]=o},e.sum64_hi=function(t,e,n,r){return(e+r>>>0>>0},e.sum64_lo=function(t,e,n,r){return e+r>>>0},e.sum64_4_hi=function(t,e,n,r,i,o,a,s){var u=0,l=e;return u+=(l=l+r>>>0)>>0)>>0)>>0},e.sum64_4_lo=function(t,e,n,r,i,o,a,s){return e+r+o+s>>>0},e.sum64_5_hi=function(t,e,n,r,i,o,a,s,u,l){var c=0,f=e;return c+=(f=f+r>>>0)>>0)>>0)>>0)>>0},e.sum64_5_lo=function(t,e,n,r,i,o,a,s,u,l){return e+r+o+s+l>>>0},e.rotr64_hi=function(t,e,n){return(e<<32-n|t>>>n)>>>0},e.rotr64_lo=function(t,e,n){return(t<<32-n|e>>>n)>>>0},e.shr64_hi=function(t,e,n){return t>>>n},e.shr64_lo=function(t,e,n){return(t<<32-n|e>>>n)>>>0}},,,,function(t,e,n){var r=n(82),i=n(37),o=n(207),a=n(106),s=n(93),u=function(t,e,n){var l,c,f,h=t&u.F,d=t&u.G,p=t&u.S,m=t&u.P,g=t&u.B,v=t&u.W,b=d?i:i[e]||(i[e]={}),y=b.prototype,w=d?r:p?r[e]:(r[e]||{}).prototype;for(l in d&&(n=e),n)(c=!h&&w&&void 0!==w[l])&&s(b,l)||(f=c?w[l]:n[l],b[l]=d&&"function"!=typeof w[l]?n[l]:g&&c?o(f,r):v&&w[l]==f?function(t){var e=function(e,n,r){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,n)}return new t(e,n,r)}return t.apply(this,arguments)};return e.prototype=t.prototype,e}(f):m&&"function"==typeof f?o(Function.call,f):f,m&&((b.virtual||(b.virtual={}))[l]=f,t&u.R&&y&&!y[l]&&a(y,l,f)))};u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,t.exports=u},function(t,e,n){(function(t){!function(t,e){"use strict";function r(t,e){if(!t)throw new Error(e||"Assertion failed")}function i(t,e){t.super_=e;var n=function(){};n.prototype=e.prototype,t.prototype=new n,t.prototype.constructor=t}function o(t,e,n){if(o.isBN(t))return t;this.negative=0,this.words=null,this.length=0,this.red=null,null!==t&&("le"!==e&&"be"!==e||(n=e,e=10),this._init(t||0,e||10,n||"be"))}var a;"object"==typeof t?t.exports=o:e.BN=o,o.BN=o,o.wordSize=26;try{a=n(780).Buffer}catch(t){}function s(t,e,n){for(var r=0,i=Math.min(t.length,n),o=e;o=49&&a<=54?a-49+10:a>=17&&a<=22?a-17+10:15&a}return r}function u(t,e,n,r){for(var i=0,o=Math.min(t.length,n),a=e;a=49?s-49+10:s>=17?s-17+10:s}return i}o.isBN=function(t){return t instanceof o||null!==t&&"object"==typeof t&&t.constructor.wordSize===o.wordSize&&Array.isArray(t.words)},o.max=function(t,e){return t.cmp(e)>0?t:e},o.min=function(t,e){return t.cmp(e)<0?t:e},o.prototype._init=function(t,e,n){if("number"==typeof t)return this._initNumber(t,e,n);if("object"==typeof t)return this._initArray(t,e,n);"hex"===e&&(e=16),r(e===(0|e)&&e>=2&&e<=36);var i=0;"-"===(t=t.toString().replace(/\s+/g,""))[0]&&i++,16===e?this._parseHex(t,i):this._parseBase(t,e,i),"-"===t[0]&&(this.negative=1),this.strip(),"le"===n&&this._initArray(this.toArray(),e,n)},o.prototype._initNumber=function(t,e,n){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(r(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"===n&&this._initArray(this.toArray(),e,n)},o.prototype._initArray=function(t,e,n){if(r("number"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var i=0;i=0;i-=3)a=t[i]|t[i-1]<<8|t[i-2]<<16,this.words[o]|=a<>>26-s&67108863,(s+=24)>=26&&(s-=26,o++);else if("le"===n)for(i=0,o=0;i>>26-s&67108863,(s+=24)>=26&&(s-=26,o++);return this.strip()},o.prototype._parseHex=function(t,e){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var n=0;n=e;n-=6)i=s(t,n,n+6),this.words[r]|=i<>>26-o&4194303,(o+=24)>=26&&(o-=26,r++);n+6!==e&&(i=s(t,e,n+6),this.words[r]|=i<>>26-o&4194303),this.strip()},o.prototype._parseBase=function(t,e,n){this.words=[0],this.length=1;for(var r=0,i=1;i<=67108863;i*=e)r++;r--,i=i/e|0;for(var o=t.length-n,a=o%r,s=Math.min(o,o-a)+n,l=0,c=n;c1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function(){return(this.red?""};var l=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],c=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],f=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function h(t,e,n){n.negative=e.negative^t.negative;var r=t.length+e.length|0;n.length=r,r=r-1|0;var i=0|t.words[0],o=0|e.words[0],a=i*o,s=67108863&a,u=a/67108864|0;n.words[0]=s;for(var l=1;l>>26,f=67108863&u,h=Math.min(l,e.length-1),d=Math.max(0,l-t.length+1);d<=h;d++){var p=l-d|0;c+=(a=(i=0|t.words[p])*(o=0|e.words[d])+f)/67108864|0,f=67108863&a}n.words[l]=0|f,u=0|c}return 0!==u?n.words[l]=0|u:n.length--,n.strip()}o.prototype.toString=function(t,e){var n;if(e=0|e||1,16===(t=t||10)||"hex"===t){n="";for(var i=0,o=0,a=0;a>>24-i&16777215)||a!==this.length-1?l[6-u.length]+u+n:u+n,(i+=2)>=26&&(i-=26,a--)}for(0!==o&&(n=o.toString(16)+n);n.length%e!=0;)n="0"+n;return 0!==this.negative&&(n="-"+n),n}if(t===(0|t)&&t>=2&&t<=36){var h=c[t],d=f[t];n="";var p=this.clone();for(p.negative=0;!p.isZero();){var m=p.modn(d).toString(t);n=(p=p.idivn(d)).isZero()?m+n:l[h-m.length]+m+n}for(this.isZero()&&(n="0"+n);n.length%e!=0;)n="0"+n;return 0!==this.negative&&(n="-"+n),n}r(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&r(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},o.prototype.toJSON=function(){return this.toString(16)},o.prototype.toBuffer=function(t,e){return r(void 0!==a),this.toArrayLike(a,t,e)},o.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},o.prototype.toArrayLike=function(t,e,n){var i=this.byteLength(),o=n||Math.max(1,i);r(i<=o,"byte array longer than desired length"),r(o>0,"Requested array length <= 0"),this.strip();var a,s,u="le"===e,l=new t(o),c=this.clone();if(u){for(s=0;!c.isZero();s++)a=c.andln(255),c.iushrn(8),l[s]=a;for(;s=4096&&(n+=13,e>>>=13),e>=64&&(n+=7,e>>>=7),e>=8&&(n+=4,e>>>=4),e>=2&&(n+=2,e>>>=2),n+e},o.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,n=0;return 0==(8191&e)&&(n+=13,e>>>=13),0==(127&e)&&(n+=7,e>>>=7),0==(15&e)&&(n+=4,e>>>=4),0==(3&e)&&(n+=2,e>>>=2),0==(1&e)&&n++,n},o.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;et.length?this.clone().ior(t):t.clone().ior(this)},o.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},o.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var n=0;nt.length?this.clone().iand(t):t.clone().iand(this)},o.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},o.prototype.iuxor=function(t){var e,n;this.length>t.length?(e=this,n=t):(e=t,n=this);for(var r=0;rt.length?this.clone().ixor(t):t.clone().ixor(this)},o.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},o.prototype.inotn=function(t){r("number"==typeof t&&t>=0);var e=0|Math.ceil(t/26),n=t%26;this._expand(e),n>0&&e--;for(var i=0;i0&&(this.words[i]=~this.words[i]&67108863>>26-n),this.strip()},o.prototype.notn=function(t){return this.clone().inotn(t)},o.prototype.setn=function(t,e){r("number"==typeof t&&t>=0);var n=t/26|0,i=t%26;return this._expand(n+1),this.words[n]=e?this.words[n]|1<t.length?(n=this,r=t):(n=t,r=this);for(var i=0,o=0;o>>26;for(;0!==i&&o>>26;if(this.length=n.length,0!==i)this.words[this.length]=i,this.length++;else if(n!==this)for(;ot.length?this.clone().iadd(t):t.clone().iadd(this)},o.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var n,r,i=this.cmp(t);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;i>0?(n=this,r=t):(n=t,r=this);for(var o=0,a=0;a>26,this.words[a]=67108863&e;for(;0!==o&&a>26,this.words[a]=67108863&e;if(0===o&&a>>13,d=0|a[1],p=8191&d,m=d>>>13,g=0|a[2],v=8191&g,b=g>>>13,y=0|a[3],w=8191&y,_=y>>>13,M=0|a[4],x=8191&M,k=M>>>13,E=0|a[5],S=8191&E,O=E>>>13,A=0|a[6],C=8191&A,T=A>>>13,R=0|a[7],P=8191&R,j=R>>>13,N=0|a[8],D=8191&N,L=N>>>13,I=0|a[9],B=8191&I,F=I>>>13,q=0|s[0],z=8191&q,U=q>>>13,V=0|s[1],H=8191&V,W=V>>>13,$=0|s[2],K=8191&$,Y=$>>>13,G=0|s[3],Z=8191&G,X=G>>>13,J=0|s[4],Q=8191&J,tt=J>>>13,et=0|s[5],nt=8191&et,rt=et>>>13,it=0|s[6],ot=8191&it,at=it>>>13,st=0|s[7],ut=8191&st,lt=st>>>13,ct=0|s[8],ft=8191&ct,ht=ct>>>13,dt=0|s[9],pt=8191&dt,mt=dt>>>13;n.negative=t.negative^e.negative,n.length=19;var gt=(l+(r=Math.imul(f,z))|0)+((8191&(i=(i=Math.imul(f,U))+Math.imul(h,z)|0))<<13)|0;l=((o=Math.imul(h,U))+(i>>>13)|0)+(gt>>>26)|0,gt&=67108863,r=Math.imul(p,z),i=(i=Math.imul(p,U))+Math.imul(m,z)|0,o=Math.imul(m,U);var vt=(l+(r=r+Math.imul(f,H)|0)|0)+((8191&(i=(i=i+Math.imul(f,W)|0)+Math.imul(h,H)|0))<<13)|0;l=((o=o+Math.imul(h,W)|0)+(i>>>13)|0)+(vt>>>26)|0,vt&=67108863,r=Math.imul(v,z),i=(i=Math.imul(v,U))+Math.imul(b,z)|0,o=Math.imul(b,U),r=r+Math.imul(p,H)|0,i=(i=i+Math.imul(p,W)|0)+Math.imul(m,H)|0,o=o+Math.imul(m,W)|0;var bt=(l+(r=r+Math.imul(f,K)|0)|0)+((8191&(i=(i=i+Math.imul(f,Y)|0)+Math.imul(h,K)|0))<<13)|0;l=((o=o+Math.imul(h,Y)|0)+(i>>>13)|0)+(bt>>>26)|0,bt&=67108863,r=Math.imul(w,z),i=(i=Math.imul(w,U))+Math.imul(_,z)|0,o=Math.imul(_,U),r=r+Math.imul(v,H)|0,i=(i=i+Math.imul(v,W)|0)+Math.imul(b,H)|0,o=o+Math.imul(b,W)|0,r=r+Math.imul(p,K)|0,i=(i=i+Math.imul(p,Y)|0)+Math.imul(m,K)|0,o=o+Math.imul(m,Y)|0;var yt=(l+(r=r+Math.imul(f,Z)|0)|0)+((8191&(i=(i=i+Math.imul(f,X)|0)+Math.imul(h,Z)|0))<<13)|0;l=((o=o+Math.imul(h,X)|0)+(i>>>13)|0)+(yt>>>26)|0,yt&=67108863,r=Math.imul(x,z),i=(i=Math.imul(x,U))+Math.imul(k,z)|0,o=Math.imul(k,U),r=r+Math.imul(w,H)|0,i=(i=i+Math.imul(w,W)|0)+Math.imul(_,H)|0,o=o+Math.imul(_,W)|0,r=r+Math.imul(v,K)|0,i=(i=i+Math.imul(v,Y)|0)+Math.imul(b,K)|0,o=o+Math.imul(b,Y)|0,r=r+Math.imul(p,Z)|0,i=(i=i+Math.imul(p,X)|0)+Math.imul(m,Z)|0,o=o+Math.imul(m,X)|0;var wt=(l+(r=r+Math.imul(f,Q)|0)|0)+((8191&(i=(i=i+Math.imul(f,tt)|0)+Math.imul(h,Q)|0))<<13)|0;l=((o=o+Math.imul(h,tt)|0)+(i>>>13)|0)+(wt>>>26)|0,wt&=67108863,r=Math.imul(S,z),i=(i=Math.imul(S,U))+Math.imul(O,z)|0,o=Math.imul(O,U),r=r+Math.imul(x,H)|0,i=(i=i+Math.imul(x,W)|0)+Math.imul(k,H)|0,o=o+Math.imul(k,W)|0,r=r+Math.imul(w,K)|0,i=(i=i+Math.imul(w,Y)|0)+Math.imul(_,K)|0,o=o+Math.imul(_,Y)|0,r=r+Math.imul(v,Z)|0,i=(i=i+Math.imul(v,X)|0)+Math.imul(b,Z)|0,o=o+Math.imul(b,X)|0,r=r+Math.imul(p,Q)|0,i=(i=i+Math.imul(p,tt)|0)+Math.imul(m,Q)|0,o=o+Math.imul(m,tt)|0;var _t=(l+(r=r+Math.imul(f,nt)|0)|0)+((8191&(i=(i=i+Math.imul(f,rt)|0)+Math.imul(h,nt)|0))<<13)|0;l=((o=o+Math.imul(h,rt)|0)+(i>>>13)|0)+(_t>>>26)|0,_t&=67108863,r=Math.imul(C,z),i=(i=Math.imul(C,U))+Math.imul(T,z)|0,o=Math.imul(T,U),r=r+Math.imul(S,H)|0,i=(i=i+Math.imul(S,W)|0)+Math.imul(O,H)|0,o=o+Math.imul(O,W)|0,r=r+Math.imul(x,K)|0,i=(i=i+Math.imul(x,Y)|0)+Math.imul(k,K)|0,o=o+Math.imul(k,Y)|0,r=r+Math.imul(w,Z)|0,i=(i=i+Math.imul(w,X)|0)+Math.imul(_,Z)|0,o=o+Math.imul(_,X)|0,r=r+Math.imul(v,Q)|0,i=(i=i+Math.imul(v,tt)|0)+Math.imul(b,Q)|0,o=o+Math.imul(b,tt)|0,r=r+Math.imul(p,nt)|0,i=(i=i+Math.imul(p,rt)|0)+Math.imul(m,nt)|0,o=o+Math.imul(m,rt)|0;var Mt=(l+(r=r+Math.imul(f,ot)|0)|0)+((8191&(i=(i=i+Math.imul(f,at)|0)+Math.imul(h,ot)|0))<<13)|0;l=((o=o+Math.imul(h,at)|0)+(i>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,r=Math.imul(P,z),i=(i=Math.imul(P,U))+Math.imul(j,z)|0,o=Math.imul(j,U),r=r+Math.imul(C,H)|0,i=(i=i+Math.imul(C,W)|0)+Math.imul(T,H)|0,o=o+Math.imul(T,W)|0,r=r+Math.imul(S,K)|0,i=(i=i+Math.imul(S,Y)|0)+Math.imul(O,K)|0,o=o+Math.imul(O,Y)|0,r=r+Math.imul(x,Z)|0,i=(i=i+Math.imul(x,X)|0)+Math.imul(k,Z)|0,o=o+Math.imul(k,X)|0,r=r+Math.imul(w,Q)|0,i=(i=i+Math.imul(w,tt)|0)+Math.imul(_,Q)|0,o=o+Math.imul(_,tt)|0,r=r+Math.imul(v,nt)|0,i=(i=i+Math.imul(v,rt)|0)+Math.imul(b,nt)|0,o=o+Math.imul(b,rt)|0,r=r+Math.imul(p,ot)|0,i=(i=i+Math.imul(p,at)|0)+Math.imul(m,ot)|0,o=o+Math.imul(m,at)|0;var xt=(l+(r=r+Math.imul(f,ut)|0)|0)+((8191&(i=(i=i+Math.imul(f,lt)|0)+Math.imul(h,ut)|0))<<13)|0;l=((o=o+Math.imul(h,lt)|0)+(i>>>13)|0)+(xt>>>26)|0,xt&=67108863,r=Math.imul(D,z),i=(i=Math.imul(D,U))+Math.imul(L,z)|0,o=Math.imul(L,U),r=r+Math.imul(P,H)|0,i=(i=i+Math.imul(P,W)|0)+Math.imul(j,H)|0,o=o+Math.imul(j,W)|0,r=r+Math.imul(C,K)|0,i=(i=i+Math.imul(C,Y)|0)+Math.imul(T,K)|0,o=o+Math.imul(T,Y)|0,r=r+Math.imul(S,Z)|0,i=(i=i+Math.imul(S,X)|0)+Math.imul(O,Z)|0,o=o+Math.imul(O,X)|0,r=r+Math.imul(x,Q)|0,i=(i=i+Math.imul(x,tt)|0)+Math.imul(k,Q)|0,o=o+Math.imul(k,tt)|0,r=r+Math.imul(w,nt)|0,i=(i=i+Math.imul(w,rt)|0)+Math.imul(_,nt)|0,o=o+Math.imul(_,rt)|0,r=r+Math.imul(v,ot)|0,i=(i=i+Math.imul(v,at)|0)+Math.imul(b,ot)|0,o=o+Math.imul(b,at)|0,r=r+Math.imul(p,ut)|0,i=(i=i+Math.imul(p,lt)|0)+Math.imul(m,ut)|0,o=o+Math.imul(m,lt)|0;var kt=(l+(r=r+Math.imul(f,ft)|0)|0)+((8191&(i=(i=i+Math.imul(f,ht)|0)+Math.imul(h,ft)|0))<<13)|0;l=((o=o+Math.imul(h,ht)|0)+(i>>>13)|0)+(kt>>>26)|0,kt&=67108863,r=Math.imul(B,z),i=(i=Math.imul(B,U))+Math.imul(F,z)|0,o=Math.imul(F,U),r=r+Math.imul(D,H)|0,i=(i=i+Math.imul(D,W)|0)+Math.imul(L,H)|0,o=o+Math.imul(L,W)|0,r=r+Math.imul(P,K)|0,i=(i=i+Math.imul(P,Y)|0)+Math.imul(j,K)|0,o=o+Math.imul(j,Y)|0,r=r+Math.imul(C,Z)|0,i=(i=i+Math.imul(C,X)|0)+Math.imul(T,Z)|0,o=o+Math.imul(T,X)|0,r=r+Math.imul(S,Q)|0,i=(i=i+Math.imul(S,tt)|0)+Math.imul(O,Q)|0,o=o+Math.imul(O,tt)|0,r=r+Math.imul(x,nt)|0,i=(i=i+Math.imul(x,rt)|0)+Math.imul(k,nt)|0,o=o+Math.imul(k,rt)|0,r=r+Math.imul(w,ot)|0,i=(i=i+Math.imul(w,at)|0)+Math.imul(_,ot)|0,o=o+Math.imul(_,at)|0,r=r+Math.imul(v,ut)|0,i=(i=i+Math.imul(v,lt)|0)+Math.imul(b,ut)|0,o=o+Math.imul(b,lt)|0,r=r+Math.imul(p,ft)|0,i=(i=i+Math.imul(p,ht)|0)+Math.imul(m,ft)|0,o=o+Math.imul(m,ht)|0;var Et=(l+(r=r+Math.imul(f,pt)|0)|0)+((8191&(i=(i=i+Math.imul(f,mt)|0)+Math.imul(h,pt)|0))<<13)|0;l=((o=o+Math.imul(h,mt)|0)+(i>>>13)|0)+(Et>>>26)|0,Et&=67108863,r=Math.imul(B,H),i=(i=Math.imul(B,W))+Math.imul(F,H)|0,o=Math.imul(F,W),r=r+Math.imul(D,K)|0,i=(i=i+Math.imul(D,Y)|0)+Math.imul(L,K)|0,o=o+Math.imul(L,Y)|0,r=r+Math.imul(P,Z)|0,i=(i=i+Math.imul(P,X)|0)+Math.imul(j,Z)|0,o=o+Math.imul(j,X)|0,r=r+Math.imul(C,Q)|0,i=(i=i+Math.imul(C,tt)|0)+Math.imul(T,Q)|0,o=o+Math.imul(T,tt)|0,r=r+Math.imul(S,nt)|0,i=(i=i+Math.imul(S,rt)|0)+Math.imul(O,nt)|0,o=o+Math.imul(O,rt)|0,r=r+Math.imul(x,ot)|0,i=(i=i+Math.imul(x,at)|0)+Math.imul(k,ot)|0,o=o+Math.imul(k,at)|0,r=r+Math.imul(w,ut)|0,i=(i=i+Math.imul(w,lt)|0)+Math.imul(_,ut)|0,o=o+Math.imul(_,lt)|0,r=r+Math.imul(v,ft)|0,i=(i=i+Math.imul(v,ht)|0)+Math.imul(b,ft)|0,o=o+Math.imul(b,ht)|0;var St=(l+(r=r+Math.imul(p,pt)|0)|0)+((8191&(i=(i=i+Math.imul(p,mt)|0)+Math.imul(m,pt)|0))<<13)|0;l=((o=o+Math.imul(m,mt)|0)+(i>>>13)|0)+(St>>>26)|0,St&=67108863,r=Math.imul(B,K),i=(i=Math.imul(B,Y))+Math.imul(F,K)|0,o=Math.imul(F,Y),r=r+Math.imul(D,Z)|0,i=(i=i+Math.imul(D,X)|0)+Math.imul(L,Z)|0,o=o+Math.imul(L,X)|0,r=r+Math.imul(P,Q)|0,i=(i=i+Math.imul(P,tt)|0)+Math.imul(j,Q)|0,o=o+Math.imul(j,tt)|0,r=r+Math.imul(C,nt)|0,i=(i=i+Math.imul(C,rt)|0)+Math.imul(T,nt)|0,o=o+Math.imul(T,rt)|0,r=r+Math.imul(S,ot)|0,i=(i=i+Math.imul(S,at)|0)+Math.imul(O,ot)|0,o=o+Math.imul(O,at)|0,r=r+Math.imul(x,ut)|0,i=(i=i+Math.imul(x,lt)|0)+Math.imul(k,ut)|0,o=o+Math.imul(k,lt)|0,r=r+Math.imul(w,ft)|0,i=(i=i+Math.imul(w,ht)|0)+Math.imul(_,ft)|0,o=o+Math.imul(_,ht)|0;var Ot=(l+(r=r+Math.imul(v,pt)|0)|0)+((8191&(i=(i=i+Math.imul(v,mt)|0)+Math.imul(b,pt)|0))<<13)|0;l=((o=o+Math.imul(b,mt)|0)+(i>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,r=Math.imul(B,Z),i=(i=Math.imul(B,X))+Math.imul(F,Z)|0,o=Math.imul(F,X),r=r+Math.imul(D,Q)|0,i=(i=i+Math.imul(D,tt)|0)+Math.imul(L,Q)|0,o=o+Math.imul(L,tt)|0,r=r+Math.imul(P,nt)|0,i=(i=i+Math.imul(P,rt)|0)+Math.imul(j,nt)|0,o=o+Math.imul(j,rt)|0,r=r+Math.imul(C,ot)|0,i=(i=i+Math.imul(C,at)|0)+Math.imul(T,ot)|0,o=o+Math.imul(T,at)|0,r=r+Math.imul(S,ut)|0,i=(i=i+Math.imul(S,lt)|0)+Math.imul(O,ut)|0,o=o+Math.imul(O,lt)|0,r=r+Math.imul(x,ft)|0,i=(i=i+Math.imul(x,ht)|0)+Math.imul(k,ft)|0,o=o+Math.imul(k,ht)|0;var At=(l+(r=r+Math.imul(w,pt)|0)|0)+((8191&(i=(i=i+Math.imul(w,mt)|0)+Math.imul(_,pt)|0))<<13)|0;l=((o=o+Math.imul(_,mt)|0)+(i>>>13)|0)+(At>>>26)|0,At&=67108863,r=Math.imul(B,Q),i=(i=Math.imul(B,tt))+Math.imul(F,Q)|0,o=Math.imul(F,tt),r=r+Math.imul(D,nt)|0,i=(i=i+Math.imul(D,rt)|0)+Math.imul(L,nt)|0,o=o+Math.imul(L,rt)|0,r=r+Math.imul(P,ot)|0,i=(i=i+Math.imul(P,at)|0)+Math.imul(j,ot)|0,o=o+Math.imul(j,at)|0,r=r+Math.imul(C,ut)|0,i=(i=i+Math.imul(C,lt)|0)+Math.imul(T,ut)|0,o=o+Math.imul(T,lt)|0,r=r+Math.imul(S,ft)|0,i=(i=i+Math.imul(S,ht)|0)+Math.imul(O,ft)|0,o=o+Math.imul(O,ht)|0;var Ct=(l+(r=r+Math.imul(x,pt)|0)|0)+((8191&(i=(i=i+Math.imul(x,mt)|0)+Math.imul(k,pt)|0))<<13)|0;l=((o=o+Math.imul(k,mt)|0)+(i>>>13)|0)+(Ct>>>26)|0,Ct&=67108863,r=Math.imul(B,nt),i=(i=Math.imul(B,rt))+Math.imul(F,nt)|0,o=Math.imul(F,rt),r=r+Math.imul(D,ot)|0,i=(i=i+Math.imul(D,at)|0)+Math.imul(L,ot)|0,o=o+Math.imul(L,at)|0,r=r+Math.imul(P,ut)|0,i=(i=i+Math.imul(P,lt)|0)+Math.imul(j,ut)|0,o=o+Math.imul(j,lt)|0,r=r+Math.imul(C,ft)|0,i=(i=i+Math.imul(C,ht)|0)+Math.imul(T,ft)|0,o=o+Math.imul(T,ht)|0;var Tt=(l+(r=r+Math.imul(S,pt)|0)|0)+((8191&(i=(i=i+Math.imul(S,mt)|0)+Math.imul(O,pt)|0))<<13)|0;l=((o=o+Math.imul(O,mt)|0)+(i>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,r=Math.imul(B,ot),i=(i=Math.imul(B,at))+Math.imul(F,ot)|0,o=Math.imul(F,at),r=r+Math.imul(D,ut)|0,i=(i=i+Math.imul(D,lt)|0)+Math.imul(L,ut)|0,o=o+Math.imul(L,lt)|0,r=r+Math.imul(P,ft)|0,i=(i=i+Math.imul(P,ht)|0)+Math.imul(j,ft)|0,o=o+Math.imul(j,ht)|0;var Rt=(l+(r=r+Math.imul(C,pt)|0)|0)+((8191&(i=(i=i+Math.imul(C,mt)|0)+Math.imul(T,pt)|0))<<13)|0;l=((o=o+Math.imul(T,mt)|0)+(i>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,r=Math.imul(B,ut),i=(i=Math.imul(B,lt))+Math.imul(F,ut)|0,o=Math.imul(F,lt),r=r+Math.imul(D,ft)|0,i=(i=i+Math.imul(D,ht)|0)+Math.imul(L,ft)|0,o=o+Math.imul(L,ht)|0;var Pt=(l+(r=r+Math.imul(P,pt)|0)|0)+((8191&(i=(i=i+Math.imul(P,mt)|0)+Math.imul(j,pt)|0))<<13)|0;l=((o=o+Math.imul(j,mt)|0)+(i>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,r=Math.imul(B,ft),i=(i=Math.imul(B,ht))+Math.imul(F,ft)|0,o=Math.imul(F,ht);var jt=(l+(r=r+Math.imul(D,pt)|0)|0)+((8191&(i=(i=i+Math.imul(D,mt)|0)+Math.imul(L,pt)|0))<<13)|0;l=((o=o+Math.imul(L,mt)|0)+(i>>>13)|0)+(jt>>>26)|0,jt&=67108863;var Nt=(l+(r=Math.imul(B,pt))|0)+((8191&(i=(i=Math.imul(B,mt))+Math.imul(F,pt)|0))<<13)|0;return l=((o=Math.imul(F,mt))+(i>>>13)|0)+(Nt>>>26)|0,Nt&=67108863,u[0]=gt,u[1]=vt,u[2]=bt,u[3]=yt,u[4]=wt,u[5]=_t,u[6]=Mt,u[7]=xt,u[8]=kt,u[9]=Et,u[10]=St,u[11]=Ot,u[12]=At,u[13]=Ct,u[14]=Tt,u[15]=Rt,u[16]=Pt,u[17]=jt,u[18]=Nt,0!==l&&(u[19]=l,n.length++),n};function p(t,e,n){return(new m).mulp(t,e,n)}function m(t,e){this.x=t,this.y=e}Math.imul||(d=h),o.prototype.mulTo=function(t,e){var n=this.length+t.length;return 10===this.length&&10===t.length?d(this,t,e):n<63?h(this,t,e):n<1024?function(t,e,n){n.negative=e.negative^t.negative,n.length=t.length+e.length;for(var r=0,i=0,o=0;o>>26)|0)>>>26,a&=67108863}n.words[o]=s,r=a,a=i}return 0!==r?n.words[o]=r:n.length--,n.strip()}(this,t,e):p(this,t,e)},m.prototype.makeRBT=function(t){for(var e=new Array(t),n=o.prototype._countBits(t)-1,r=0;r>=1;return r},m.prototype.permute=function(t,e,n,r,i,o){for(var a=0;a>>=1)i++;return 1<>>=13,n[2*a+1]=8191&o,o>>>=13;for(a=2*e;a>=26,e+=i/67108864|0,e+=o>>>26,this.words[n]=67108863&o}return 0!==e&&(this.words[n]=e,this.length++),this},o.prototype.muln=function(t){return this.clone().imuln(t)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(t){var e=function(t){for(var e=new Array(t.bitLength()),n=0;n>>i}return e}(t);if(0===e.length)return new o(1);for(var n=this,r=0;r=0);var e,n=t%26,i=(t-n)/26,o=67108863>>>26-n<<26-n;if(0!==n){var a=0;for(e=0;e>>26-n}a&&(this.words[e]=a,this.length++)}if(0!==i){for(e=this.length-1;e>=0;e--)this.words[e+i]=this.words[e];for(e=0;e=0),i=e?(e-e%26)/26:0;var o=t%26,a=Math.min((t-o)/26,this.length),s=67108863^67108863>>>o<a)for(this.length-=a,l=0;l=0&&(0!==c||l>=i);l--){var f=0|this.words[l];this.words[l]=c<<26-o|f>>>o,c=f&s}return u&&0!==c&&(u.words[u.length++]=c),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function(t,e,n){return r(0===this.negative),this.iushrn(t,e,n)},o.prototype.shln=function(t){return this.clone().ishln(t)},o.prototype.ushln=function(t){return this.clone().iushln(t)},o.prototype.shrn=function(t){return this.clone().ishrn(t)},o.prototype.ushrn=function(t){return this.clone().iushrn(t)},o.prototype.testn=function(t){r("number"==typeof t&&t>=0);var e=t%26,n=(t-e)/26,i=1<=0);var e=t%26,n=(t-e)/26;if(r(0===this.negative,"imaskn works only with positive numbers"),this.length<=n)return this;if(0!==e&&n++,this.length=Math.min(n,this.length),0!==e){var i=67108863^67108863>>>e<=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},o.prototype.isubn=function(t){if(r("number"==typeof t),r(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e>26)-(u/67108864|0),this.words[i+n]=67108863&o}for(;i>26,this.words[i+n]=67108863&o;if(0===s)return this.strip();for(r(-1===s),s=0,i=0;i>26,this.words[i]=67108863&o;return this.negative=1,this.strip()},o.prototype._wordDiv=function(t,e){var n=(this.length,t.length),r=this.clone(),i=t,a=0|i.words[i.length-1];0!==(n=26-this._countBits(a))&&(i=i.ushln(n),r.iushln(n),a=0|i.words[i.length-1]);var s,u=r.length-i.length;if("mod"!==e){(s=new o(null)).length=u+1,s.words=new Array(s.length);for(var l=0;l=0;f--){var h=67108864*(0|r.words[i.length+f])+(0|r.words[i.length+f-1]);for(h=Math.min(h/a|0,67108863),r._ishlnsubmul(i,h,f);0!==r.negative;)h--,r.negative=0,r._ishlnsubmul(i,1,f),r.isZero()||(r.negative^=1);s&&(s.words[f]=h)}return s&&s.strip(),r.strip(),"div"!==e&&0!==n&&r.iushrn(n),{div:s||null,mod:r}},o.prototype.divmod=function(t,e,n){return r(!t.isZero()),this.isZero()?{div:new o(0),mod:new o(0)}:0!==this.negative&&0===t.negative?(s=this.neg().divmod(t,e),"mod"!==e&&(i=s.div.neg()),"div"!==e&&(a=s.mod.neg(),n&&0!==a.negative&&a.iadd(t)),{div:i,mod:a}):0===this.negative&&0!==t.negative?(s=this.divmod(t.neg(),e),"mod"!==e&&(i=s.div.neg()),{div:i,mod:s.mod}):0!=(this.negative&t.negative)?(s=this.neg().divmod(t.neg(),e),"div"!==e&&(a=s.mod.neg(),n&&0!==a.negative&&a.isub(t)),{div:s.div,mod:a}):t.length>this.length||this.cmp(t)<0?{div:new o(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new o(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new o(this.modn(t.words[0]))}:this._wordDiv(t,e);var i,a,s},o.prototype.div=function(t){return this.divmod(t,"div",!1).div},o.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},o.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},o.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var n=0!==e.div.negative?e.mod.isub(t):e.mod,r=t.ushrn(1),i=t.andln(1),o=n.cmp(r);return o<0||1===i&&0===o?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},o.prototype.modn=function(t){r(t<=67108863);for(var e=(1<<26)%t,n=0,i=this.length-1;i>=0;i--)n=(e*n+(0|this.words[i]))%t;return n},o.prototype.idivn=function(t){r(t<=67108863);for(var e=0,n=this.length-1;n>=0;n--){var i=(0|this.words[n])+67108864*e;this.words[n]=i/t|0,e=i%t}return this.strip()},o.prototype.divn=function(t){return this.clone().idivn(t)},o.prototype.egcd=function(t){r(0===t.negative),r(!t.isZero());var e=this,n=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new o(1),a=new o(0),s=new o(0),u=new o(1),l=0;e.isEven()&&n.isEven();)e.iushrn(1),n.iushrn(1),++l;for(var c=n.clone(),f=e.clone();!e.isZero();){for(var h=0,d=1;0==(e.words[0]&d)&&h<26;++h,d<<=1);if(h>0)for(e.iushrn(h);h-- >0;)(i.isOdd()||a.isOdd())&&(i.iadd(c),a.isub(f)),i.iushrn(1),a.iushrn(1);for(var p=0,m=1;0==(n.words[0]&m)&&p<26;++p,m<<=1);if(p>0)for(n.iushrn(p);p-- >0;)(s.isOdd()||u.isOdd())&&(s.iadd(c),u.isub(f)),s.iushrn(1),u.iushrn(1);e.cmp(n)>=0?(e.isub(n),i.isub(s),a.isub(u)):(n.isub(e),s.isub(i),u.isub(a))}return{a:s,b:u,gcd:n.iushln(l)}},o.prototype._invmp=function(t){r(0===t.negative),r(!t.isZero());var e=this,n=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i,a=new o(1),s=new o(0),u=n.clone();e.cmpn(1)>0&&n.cmpn(1)>0;){for(var l=0,c=1;0==(e.words[0]&c)&&l<26;++l,c<<=1);if(l>0)for(e.iushrn(l);l-- >0;)a.isOdd()&&a.iadd(u),a.iushrn(1);for(var f=0,h=1;0==(n.words[0]&h)&&f<26;++f,h<<=1);if(f>0)for(n.iushrn(f);f-- >0;)s.isOdd()&&s.iadd(u),s.iushrn(1);e.cmp(n)>=0?(e.isub(n),a.isub(s)):(n.isub(e),s.isub(a))}return(i=0===e.cmpn(1)?a:s).cmpn(0)<0&&i.iadd(t),i},o.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),n=t.clone();e.negative=0,n.negative=0;for(var r=0;e.isEven()&&n.isEven();r++)e.iushrn(1),n.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;n.isEven();)n.iushrn(1);var i=e.cmp(n);if(i<0){var o=e;e=n,n=o}else if(0===i||0===n.cmpn(1))break;e.isub(n)}return n.iushln(r)},o.prototype.invm=function(t){return this.egcd(t).a.umod(t)},o.prototype.isEven=function(){return 0==(1&this.words[0])},o.prototype.isOdd=function(){return 1==(1&this.words[0])},o.prototype.andln=function(t){return this.words[0]&t},o.prototype.bincn=function(t){r("number"==typeof t);var e=t%26,n=(t-e)/26,i=1<>>26,s&=67108863,this.words[a]=s}return 0!==o&&(this.words[a]=o,this.length++),this},o.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function(t){var e,n=t<0;if(0!==this.negative&&!n)return-1;if(0===this.negative&&n)return 1;if(this.strip(),this.length>1)e=1;else{n&&(t=-t),r(t<=67108863,"Number is too big");var i=0|this.words[0];e=i===t?0:it.length)return 1;if(this.length=0;n--){var r=0|this.words[n],i=0|t.words[n];if(r!==i){ri&&(e=1);break}}return e},o.prototype.gtn=function(t){return 1===this.cmpn(t)},o.prototype.gt=function(t){return 1===this.cmp(t)},o.prototype.gten=function(t){return this.cmpn(t)>=0},o.prototype.gte=function(t){return this.cmp(t)>=0},o.prototype.ltn=function(t){return-1===this.cmpn(t)},o.prototype.lt=function(t){return-1===this.cmp(t)},o.prototype.lten=function(t){return this.cmpn(t)<=0},o.prototype.lte=function(t){return this.cmp(t)<=0},o.prototype.eqn=function(t){return 0===this.cmpn(t)},o.prototype.eq=function(t){return 0===this.cmp(t)},o.red=function(t){return new M(t)},o.prototype.toRed=function(t){return r(!this.red,"Already a number in reduction context"),r(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},o.prototype.fromRed=function(){return r(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function(t){return this.red=t,this},o.prototype.forceRed=function(t){return r(!this.red,"Already a number in reduction context"),this._forceRed(t)},o.prototype.redAdd=function(t){return r(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},o.prototype.redIAdd=function(t){return r(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},o.prototype.redSub=function(t){return r(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},o.prototype.redISub=function(t){return r(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},o.prototype.redShl=function(t){return r(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},o.prototype.redMul=function(t){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},o.prototype.redIMul=function(t){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},o.prototype.redSqr=function(){return r(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return r(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return r(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return r(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return r(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(t){return r(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var g={k256:null,p224:null,p192:null,p25519:null};function v(t,e){this.name=t,this.p=new o(e,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function b(){v.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function y(){v.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function w(){v.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function _(){v.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function M(t){if("string"==typeof t){var e=o._prime(t);this.m=e.p,this.prime=e}else r(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function x(t){M.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}v.prototype._tmp=function(){var t=new o(null);return t.words=new Array(Math.ceil(this.n/13)),t},v.prototype.ireduce=function(t){var e,n=t;do{this.split(n,this.tmp),e=(n=(n=this.imulK(n)).iadd(this.tmp)).bitLength()}while(e>this.n);var r=e0?n.isub(this.p):void 0!==n.strip?n.strip():n._strip(),n},v.prototype.split=function(t,e){t.iushrn(this.n,0,e)},v.prototype.imulK=function(t){return t.imul(this.k)},i(b,v),b.prototype.split=function(t,e){for(var n=Math.min(t.length,9),r=0;r>>22,i=o}i>>>=22,t.words[r-10]=i,0===i&&t.length>10?t.length-=10:t.length-=9},b.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,n=0;n>>=26,t.words[n]=i,e=r}return 0!==e&&(t.words[t.length++]=e),t},o._prime=function(t){if(g[t])return g[t];var e;if("k256"===t)e=new b;else if("p224"===t)e=new y;else if("p192"===t)e=new w;else{if("p25519"!==t)throw new Error("Unknown prime "+t);e=new _}return g[t]=e,e},M.prototype._verify1=function(t){r(0===t.negative,"red works only with positives"),r(t.red,"red works only with red numbers")},M.prototype._verify2=function(t,e){r(0==(t.negative|e.negative),"red works only with positives"),r(t.red&&t.red===e.red,"red works only with red numbers")},M.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},M.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},M.prototype.add=function(t,e){this._verify2(t,e);var n=t.add(e);return n.cmp(this.m)>=0&&n.isub(this.m),n._forceRed(this)},M.prototype.iadd=function(t,e){this._verify2(t,e);var n=t.iadd(e);return n.cmp(this.m)>=0&&n.isub(this.m),n},M.prototype.sub=function(t,e){this._verify2(t,e);var n=t.sub(e);return n.cmpn(0)<0&&n.iadd(this.m),n._forceRed(this)},M.prototype.isub=function(t,e){this._verify2(t,e);var n=t.isub(e);return n.cmpn(0)<0&&n.iadd(this.m),n},M.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},M.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},M.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},M.prototype.isqr=function(t){return this.imul(t,t.clone())},M.prototype.sqr=function(t){return this.mul(t,t)},M.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(r(e%2==1),3===e){var n=this.m.add(new o(1)).iushrn(2);return this.pow(t,n)}for(var i=this.m.subn(1),a=0;!i.isZero()&&0===i.andln(1);)a++,i.iushrn(1);r(!i.isZero());var s=new o(1).toRed(this),u=s.redNeg(),l=this.m.subn(1).iushrn(1),c=this.m.bitLength();for(c=new o(2*c*c).toRed(this);0!==this.pow(c,l).cmp(u);)c.redIAdd(u);for(var f=this.pow(c,i),h=this.pow(t,i.addn(1).iushrn(1)),d=this.pow(t,i),p=a;0!==d.cmp(s);){for(var m=d,g=0;0!==m.cmp(s);g++)m=m.redSqr();r(g=0;r--){for(var l=e.words[r],c=u-1;c>=0;c--){var f=l>>c&1;i!==n[0]&&(i=this.sqr(i)),0!==f||0!==a?(a<<=1,a|=f,(4===++s||0===r&&0===c)&&(i=this.mul(i,n[a]),s=0,a=0)):s=0}u=26}return i},M.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},M.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},o.mont=function(t){return new x(t)},i(x,M),x.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},x.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},x.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var n=t.imul(e),r=n.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=n.isub(r).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},x.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new o(0)._forceRed(this);var n=t.mul(e),r=n.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=n.isub(r).iushrn(this.shift),a=i;return i.cmp(this.m)>=0?a=i.isub(this.m):i.cmpn(0)<0&&(a=i.iadd(this.m)),a._forceRed(this)},x.prototype.invm=function(t){return this.imod(t._invmp(this.m).mul(this.r2))._forceRed(this)}}(t,this)}).call(this,n(88)(t))},,,,,,,function(t,e,n){"use strict";e.a=function(t,e){}},,function(t,e){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(t,e,n){var r=n(91),i=n(294),o=n(208),a=Object.defineProperty;e.f=n(84)?Object.defineProperty:function(t,e,n){if(r(t),e=o(e,!0),r(n),i)try{return a(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){t.exports=!n(107)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},function(t,e,n){"use strict";var r=n(696).Buffer,i=r.isEncoding||function(t){switch((t=""+t)&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function o(t){var e;switch(this.encoding=function(t){var e=function(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}(t);if("string"!=typeof e&&(r.isEncoding===i||!i(t)))throw new Error("Unknown encoding: "+t);return e||t}(t),this.encoding){case"utf16le":this.text=u,this.end=l,e=4;break;case"utf8":this.fillLast=s,e=4;break;case"base64":this.text=c,this.end=f,e=3;break;default:return this.write=h,void(this.end=d)}this.lastNeed=0,this.lastTotal=0,this.lastChar=r.allocUnsafe(e)}function a(t){return t<=127?0:t>>5==6?2:t>>4==14?3:t>>3==30?4:t>>6==2?-1:-2}function s(t){var e=this.lastTotal-this.lastNeed,n=function(t,e,n){if(128!=(192&e[0]))return t.lastNeed=0,"�";if(t.lastNeed>1&&e.length>1){if(128!=(192&e[1]))return t.lastNeed=1,"�";if(t.lastNeed>2&&e.length>2&&128!=(192&e[2]))return t.lastNeed=2,"�"}}(this,t);return void 0!==n?n:this.lastNeed<=t.length?(t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(t.copy(this.lastChar,e,0,t.length),void(this.lastNeed-=t.length))}function u(t,e){if((t.length-e)%2==0){var n=t.toString("utf16le",e);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function l(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,n)}return e}function c(t,e){var n=(t.length-e)%3;return 0===n?t.toString("base64",e):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-n))}function f(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function h(t){return t.toString(this.encoding)}function d(t){return t&&t.length?this.write(t):""}e.StringDecoder=o,o.prototype.write=function(t){if(0===t.length)return"";var e,n;if(this.lastNeed){if(void 0===(e=this.fillLast(t)))return"";n=this.lastNeed,this.lastNeed=0}else n=0;return n=0)return i>0&&(t.lastNeed=i-1),i;if(--r=0)return i>0&&(t.lastNeed=i-2),i;if(--r=0)return i>0&&(2===i?i=0:t.lastNeed=i-3),i;return 0}(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=n;var r=t.length-(n-this.lastNeed);return t.copy(this.lastChar,0,r),t.toString("utf8",e,r)},o.prototype.fillLast=function(t){if(this.lastNeed<=t.length)return t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,t.length),this.lastNeed-=t.length}},function(t,e,n){var r=n(11).Buffer,i=n(742).Transform,o=n(85).StringDecoder;function a(t){i.call(this),this.hashMode="string"==typeof t,this.hashMode?this[t]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}n(7)(a,i),a.prototype.update=function(t,e,n){"string"==typeof t&&(t=r.from(t,e));var i=this._update(t);return this.hashMode?this:(n&&(i=this._toString(i,n)),i)},a.prototype.setAutoPadding=function(){},a.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},a.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},a.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},a.prototype._transform=function(t,e,n){var r;try{this.hashMode?this._update(t):this.push(this._update(t))}catch(t){r=t}finally{n(r)}},a.prototype._flush=function(t){var e;try{this.push(this.__final())}catch(t){e=t}t(e)},a.prototype._finalOrDigest=function(t){var e=this.__final()||r.alloc(0);return t&&(e=this._toString(e,t,!0)),e},a.prototype._toString=function(t,e,n){if(this._decoder||(this._decoder=new o(e),this._encoding=e),this._encoding!==e)throw new Error("can't switch encodings");var r=this._decoder.write(t);return n&&(r+=this._decoder.end()),r},t.exports=a},function(t,e,n){"use strict";(function(e){void 0===e||!e.version||0===e.version.indexOf("v0.")||0===e.version.indexOf("v1.")&&0!==e.version.indexOf("v1.8.")?t.exports={nextTick:function(t,n,r,i){if("function"!=typeof t)throw new TypeError('"callback" argument must be a function');var o,a,s=arguments.length;switch(s){case 0:case 1:return e.nextTick(t);case 2:return e.nextTick((function(){t.call(null,n)}));case 3:return e.nextTick((function(){t.call(null,n,r)}));case 4:return e.nextTick((function(){t.call(null,n,r,i)}));default:for(o=new Array(s-1),a=0;a4294967295)throw new RangeError("requested too many random bytes");var n=i.allocUnsafe(t);if(t>0)if(t>65536)for(var a=0;a2?"one of ".concat(e," ").concat(t.slice(0,n-1).join(", "),", or ")+t[n-1]:2===n?"one of ".concat(e," ").concat(t[0]," or ").concat(t[1]):"of ".concat(e," ").concat(t[0])}return"of ".concat(e," ").concat(String(t))}i("ERR_INVALID_OPT_VALUE",(function(t,e){return'The value "'+e+'" is invalid for option "'+t+'"'}),TypeError),i("ERR_INVALID_ARG_TYPE",(function(t,e,n){var r,i,a,s;if("string"==typeof e&&(i="not ",e.substr(!a||a<0?0:+a,i.length)===i)?(r="must not be",e=e.replace(/^not /,"")):r="must be",function(t,e,n){return(void 0===n||n>t.length)&&(n=t.length),t.substring(n-e.length,n)===e}(t," argument"))s="The ".concat(t," ").concat(r," ").concat(o(e,"type"));else{var u=function(t,e,n){return"number"!=typeof n&&(n=0),!(n+e.length>t.length)&&-1!==t.indexOf(e,n)}(t,".")?"property":"argument";s='The "'.concat(t,'" ').concat(u," ").concat(r," ").concat(o(e,"type"))}return s+=". Received type ".concat(typeof n)}),TypeError),i("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),i("ERR_METHOD_NOT_IMPLEMENTED",(function(t){return"The "+t+" method is not implemented"})),i("ERR_STREAM_PREMATURE_CLOSE","Premature close"),i("ERR_STREAM_DESTROYED",(function(t){return"Cannot call "+t+" after a stream was destroyed"})),i("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),i("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),i("ERR_STREAM_WRITE_AFTER_END","write after end"),i("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),i("ERR_UNKNOWN_ENCODING",(function(t){return"Unknown encoding: "+t}),TypeError),i("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),t.exports.codes=r},function(t,e,n){"use strict";(function(e){var r=Object.keys||function(t){var e=[];for(var n in t)e.push(n);return e};t.exports=l;var i=n(333),o=n(337);n(7)(l,i);for(var a=r(o.prototype),s=0;s=this._finalSize&&(this._update(this._block),this._block.fill(0));var n=8*this._len;if(n<=4294967295)this._block.writeUInt32BE(n,this._blockSize-4);else{var r=(4294967295&n)>>>0,i=(n-r)/4294967296;this._block.writeUInt32BE(i,this._blockSize-8),this._block.writeUInt32BE(r,this._blockSize-4)}this._update(this._block);var o=this._hash();return t?o.toString(t):o},i.prototype._update=function(){throw new Error("_update must be implemented by subclass")},t.exports=i},function(t,e,n){"use strict";var r=n(87),i=Object.keys||function(t){var e=[];for(var n in t)e.push(n);return e};t.exports=f;var o=Object.create(n(67));o.inherits=n(7);var a=n(383),s=n(386);o.inherits(f,a);for(var u=i(s.prototype),l=0;l.008856451679035631?Math.pow(t,1/3):t/u+4/29}function d(t){return t>s?t*t*t:u*(t-4/29)}function p(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function m(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function g(t){if(t instanceof b)return new b(t.h,t.c,t.l,t.opacity);if(t instanceof f||(t=l(t)),0===t.a&&0===t.b)return new b(NaN,0=this._delta8){var n=(t=this.pending).length%this._delta8;this.pending=t.slice(t.length-n,t.length),0===this.pending.length&&(this.pending=null),t=r.join32(t,0,t.length-n,this.endian);for(var i=0;i>>24&255,r[i++]=t>>>16&255,r[i++]=t>>>8&255,r[i++]=255&t}else for(r[i++]=255&t,r[i++]=t>>>8&255,r[i++]=t>>>16&255,r[i++]=t>>>24&255,r[i++]=0,r[i++]=0,r[i++]=0,r[i++]=0,o=8;oe[i-1][o]?t(e,n,r,i,o-1,a):t(e,n,r,i-1,o,a)}(function(t,e,n,r){var i=t.length,o=e.length,a=void 0,s=void 0,u=[i+1];for(a=0;a0&&c>0&&!e.objectHash&&"boolean"!=typeof e.matchByPosition&&(e.matchByPosition=!function(t,e,n,r){for(var i=0;i0)for(var x=0;x=0;e--){var u=r["_"+(n=o[e])],l=i.splice(n,1)[0];3===u[2]&&a.push({index:u[1],value:l})}var c=(a=a.sort(D("index"))).length;for(e=0;e0)for(e=0;er?r++:a>=r&&se.length?t:e,a=t.length>e.length?e:t,s=o.indexOf(a);if(-1!=s)return i=[[1,o.substring(0,s)],[0,a],[1,o.substring(s+a.length)]],t.length>e.length&&(i[0][0]=i[2][0]=-1),i;if(1==a.length)return[[-1,t],[1,e]];var u=this.diff_halfMatch_(t,e);if(u){var l=u[0],c=u[1],f=u[2],h=u[3],d=u[4],p=this.diff_main(l,f,n,r),m=this.diff_main(c,h,n,r);return p.concat([[0,d]],m)}return n&&t.length>100&&e.length>100?this.diff_lineMode_(t,e,r):this.diff_bisect_(t,e,r)},e.prototype.diff_lineMode_=function(t,e,n){t=(c=this.diff_linesToChars_(t,e)).chars1,e=c.chars2;var r=c.lineArray,i=this.diff_main(t,e,!1,n);this.diff_charsToLines_(i,r),this.diff_cleanupSemantic(i),i.push([0,""]);for(var o=0,a=0,s=0,u="",l="";o=1&&s>=1){i.splice(o-a-s,a+s),o=o-a-s;for(var c,f=(c=this.diff_main(u,l,!1,n)).length-1;f>=0;f--)i.splice(o,0,c[f]);o+=c.length}s=0,a=0,u="",l=""}o++}return i.pop(),i},e.prototype.diff_bisect_=function(t,e,n){for(var r=t.length,i=e.length,o=Math.ceil((r+i)/2),a=o,s=2*o,u=new Array(s),l=new Array(s),c=0;cn);v++){for(var b=-v+d;b<=v-p;b+=2){for(var y=a+b,w=(E=b==-v||b!=v&&u[y-1]r)p+=2;else if(w>i)d+=2;else if(h&&(x=a+f-b)>=0&&x=(M=r-l[x]))return this.diff_bisectSplit_(t,e,E,w,n)}for(var _=-v+m;_<=v-g;_+=2){for(var M,x=a+_,k=(M=_==-v||_!=v&&l[x-1]r)g+=2;else if(k>i)m+=2;else if(!h){var E;if((y=a+f-_)>=0&&y=(M=r-M))return this.diff_bisectSplit_(t,e,E,w,n)}}}return[[-1,t],[1,e]]},e.prototype.diff_bisectSplit_=function(t,e,n,r,i){var o=t.substring(0,n),a=e.substring(0,r),s=t.substring(n),u=e.substring(r),l=this.diff_main(o,a,!1,i),c=this.diff_main(s,u,!1,i);return l.concat(c)},e.prototype.diff_linesToChars_=function(t,e){var n=[],r={};function i(t){for(var e="",i=0,o=-1,a=n.length;or?t=t.substring(n-r):ne.length?t:e,r=t.length>e.length?e:t;if(n.length<4||2*r.length=t.length?[r,o,a,s,c]:null}var a,s,u,l,c,f=o(n,r,Math.ceil(n.length/4)),h=o(n,r,Math.ceil(n.length/2));return f||h?(a=h?f&&f[4].length>h[4].length?f:h:f,t.length>e.length?(s=a[0],u=a[1],l=a[2],c=a[3]):(l=a[0],c=a[1],s=a[2],u=a[3]),[s,u,l,c,a[4]]):null},e.prototype.diff_cleanupSemantic=function(t){for(var e=!1,n=[],r=0,i=null,o=0,a=0,s=0,u=0,l=0;o0?n[r-1]:-1,a=0,s=0,u=0,l=0,i=null,e=!0)),o++;for(e&&this.diff_cleanupMerge(t),this.diff_cleanupSemanticLossless(t),o=1;o=d?(h>=c.length/2||h>=f.length/2)&&(t.splice(o,0,[0,f.substring(0,h)]),t[o-1][1]=c.substring(0,c.length-h),t[o+1][1]=f.substring(h),o++):(d>=c.length/2||d>=f.length/2)&&(t.splice(o,0,[0,c.substring(0,d)]),t[o-1][0]=1,t[o-1][1]=f.substring(0,f.length-d),t[o+1][0]=-1,t[o+1][1]=c.substring(d),o++),o++}o++}},e.prototype.diff_cleanupSemanticLossless=function(t){function n(t,n){if(!t||!n)return 6;var r=t.charAt(t.length-1),i=n.charAt(0),o=r.match(e.nonAlphaNumericRegex_),a=i.match(e.nonAlphaNumericRegex_),s=o&&r.match(e.whitespaceRegex_),u=a&&i.match(e.whitespaceRegex_),l=s&&r.match(e.linebreakRegex_),c=u&&i.match(e.linebreakRegex_),f=l&&t.match(e.blanklineEndRegex_),h=c&&n.match(e.blanklineStartRegex_);return f||h?5:l||c?4:o&&!s&&u?3:s||u?2:o||a?1:0}for(var r=1;r=h&&(h=d,l=i,c=o,f=a)}t[r-1][1]!=l&&(l?t[r-1][1]=l:(t.splice(r-1,1),r--),t[r][1]=c,f?t[r+1][1]=f:(t.splice(r+1,1),r--))}r++}},e.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/,e.whitespaceRegex_=/\s/,e.linebreakRegex_=/[\r\n]/,e.blanklineEndRegex_=/\n\r?\n$/,e.blanklineStartRegex_=/^\r?\n\r?\n/,e.prototype.diff_cleanupEfficiency=function(t){for(var e=!1,n=[],r=0,i=null,o=0,a=!1,s=!1,u=!1,l=!1;o0?n[r-1]:-1,u=l=!1),e=!0)),o++;e&&this.diff_cleanupMerge(t)},e.prototype.diff_cleanupMerge=function(t){t.push([0,""]);for(var e,n=0,r=0,i=0,o="",a="";n1?(0!==r&&0!==i&&(0!==(e=this.diff_commonPrefix(a,o))&&(n-r-i>0&&0==t[n-r-i-1][0]?t[n-r-i-1][1]+=a.substring(0,e):(t.splice(0,0,[0,a.substring(0,e)]),n++),a=a.substring(e),o=o.substring(e)),0!==(e=this.diff_commonSuffix(a,o))&&(t[n][1]=a.substring(a.length-e)+t[n][1],a=a.substring(0,a.length-e),o=o.substring(0,o.length-e))),0===r?t.splice(n-i,r+i,[1,a]):0===i?t.splice(n-r,r+i,[-1,o]):t.splice(n-r-i,r+i,[-1,o],[1,a]),n=n-r-i+(r?1:0)+(i?1:0)+1):0!==n&&0==t[n-1][0]?(t[n-1][1]+=t[n][1],t.splice(n,1)):n++,i=0,r=0,o="",a=""}""===t[t.length-1][1]&&t.pop();var s=!1;for(n=1;ne));n++)o=r,a=i;return t.length!=n&&-1===t[n][0]?a:a+(e-o)},e.prototype.diff_prettyHtml=function(t){for(var e=[],n=/&/g,r=//g,o=/\n/g,a=0;a");switch(s){case 1:e[a]=''+u+"";break;case-1:e[a]=''+u+"";break;case 0:e[a]=""+u+""}}return e.join("")},e.prototype.diff_text1=function(t){for(var e=[],n=0;nthis.Match_MaxBits)throw new Error("Pattern too long for this browser.");var r=this.match_alphabet_(e),i=this;function o(t,r){var o=t/e.length,a=Math.abs(n-r);return i.Match_Distance?o+a/i.Match_Distance:a?1:o}var a=this.Match_Threshold,s=t.indexOf(e,n);-1!=s&&(a=Math.min(o(0,s),a),-1!=(s=t.lastIndexOf(e,n+e.length))&&(a=Math.min(o(0,s),a)));var u,l,c=1<=p;v--){var b=r[t.charAt(v-1)];if(g[v]=0===d?(g[v+1]<<1|1)&b:(g[v+1]<<1|1)&b|(f[v+1]|f[v])<<1|1|f[v+1],g[v]&c){var y=o(d,v-1);if(y<=a){if(a=y,!((s=v-1)>n))break;p=Math.max(1,2*n-s)}}}if(o(d+1,n)>a)break;f=g}return s},e.prototype.match_alphabet_=function(t){for(var e={},n=0;n2&&(this.diff_cleanupSemantic(o),this.diff_cleanupEfficiency(o));else if(t&&"object"==typeof t&&void 0===n&&void 0===r)o=t,i=this.diff_text1(o);else if("string"==typeof t&&n&&"object"==typeof n&&void 0===r)i=t,o=n;else{if("string"!=typeof t||"string"!=typeof n||!r||"object"!=typeof r)throw new Error("Unknown call format to patch_make.");i=t,o=r}if(0===o.length)return[];for(var a=[],s=new e.patch_obj,u=0,l=0,c=0,f=i,h=i,d=0;d=2*this.Patch_Margin&&u&&(this.patch_addContext_(s,f),a.push(s),s=new e.patch_obj,u=0,f=h,l=c)}1!==p&&(l+=m.length),-1!==p&&(c+=m.length)}return u&&(this.patch_addContext_(s,f),a.push(s)),a},e.prototype.patch_deepCopy=function(t){for(var n=[],r=0;rthis.Match_MaxBits?-1!=(a=this.match_main(e,l.substring(0,this.Match_MaxBits),u))&&(-1==(c=this.match_main(e,l.substring(l.length-this.Match_MaxBits),u+l.length-this.Match_MaxBits))||a>=c)&&(a=-1):a=this.match_main(e,l,u),-1==a)i[o]=!1,r-=t[o].length2-t[o].length1;else if(i[o]=!0,r=a-u,l==(s=-1==c?e.substring(a,a+l.length):e.substring(a,c+this.Match_MaxBits)))e=e.substring(0,a)+this.diff_text2(t[o].diffs)+e.substring(a+l.length);else{var f=this.diff_main(l,s,!1);if(l.length>this.Match_MaxBits&&this.diff_levenshtein(f)/l.length>this.Patch_DeleteThreshold)i[o]=!1;else{this.diff_cleanupSemanticLossless(f);for(var h,d=0,p=0;po[0][1].length){var a=e-o[0][1].length;o[0][1]=n.substring(o[0][1].length)+o[0][1],i.start1-=a,i.start2-=a,i.length1+=a,i.length2+=a}return 0==(o=(i=t[t.length-1]).diffs).length||0!=o[o.length-1][0]?(o.push([0,n]),i.length1+=e,i.length2+=e):e>o[o.length-1][1].length&&(a=e-o[o.length-1][1].length,o[o.length-1][1]+=n.substring(0,a),i.length1+=a,i.length2+=a),n},e.prototype.patch_splitMax=function(t){for(var n=this.Match_MaxBits,r=0;r2*n?(u.length1+=f.length,o+=f.length,l=!1,u.diffs.push([c,f]),i.diffs.shift()):(f=f.substring(0,n-u.length1-this.Patch_Margin),u.length1+=f.length,o+=f.length,0===c?(u.length2+=f.length,a+=f.length):l=!1,u.diffs.push([c,f]),f==i.diffs[0][1]?i.diffs.shift():i.diffs[0][1]=i.diffs[0][1].substring(f.length))}s=(s=this.diff_text2(u.diffs)).substring(s.length-this.Patch_Margin);var h=this.diff_text1(i.diffs).substring(0,this.Patch_Margin);""!==h&&(u.length1+=h.length,u.length2+=h.length,0!==u.diffs.length&&0===u.diffs[u.diffs.length-1][0]?u.diffs[u.diffs.length-1][1]+=h:u.diffs.push([0,h])),l||t.splice(++r,0,u)}}},e.prototype.patch_toText=function(t){for(var e=[],n=0;n'+e+"")}},{key:"formatValue",value:function(t,e){t.out("
"+rt(JSON.stringify(e,null,2))+"
")}},{key:"formatTextDiffString",value:function(t,e){var n=this.parseTextDiff(e);t.out('
    ');for(var r=0,i=n.length;r
    '+o.location.line+''+o.location.chr+'
    ');for(var a=o.pieces,s=0,u=a.length;s'+rt(decodeURI(l.text))+"")}t.out("
    ")}t.out("
")}},{key:"rootBegin",value:function(t,e,n){var r="jsondiffpatch-"+e+(n?" jsondiffpatch-child-node-type-"+n:"");t.out('
')}},{key:"rootEnd",value:function(t){t.out("
"+(t.hasArrows?'') : ''));\n }\n }, {\n key: 'nodeBegin',\n value: function nodeBegin(context, key, leftKey, type, nodeType) {\n var nodeClass = 'jsondiffpatch-' + type + (nodeType ? ' jsondiffpatch-child-node-type-' + nodeType : '');\n context.out('
  • ' + ('
    ' + leftKey + '
    '));\n }\n }, {\n key: 'nodeEnd',\n value: function nodeEnd(context) {\n context.out('
  • ');\n }\n\n /* jshint camelcase: false */\n /* eslint-disable camelcase */\n\n }, {\n key: 'format_unchanged',\n value: function format_unchanged(context, delta, left) {\n if (typeof left === 'undefined') {\n return;\n }\n context.out('
    ');\n this.formatValue(context, left);\n context.out('
    ');\n }\n }, {\n key: 'format_movedestination',\n value: function format_movedestination(context, delta, left) {\n if (typeof left === 'undefined') {\n return;\n }\n context.out('
    ');\n this.formatValue(context, left);\n context.out('
    ');\n }\n }, {\n key: 'format_node',\n value: function format_node(context, delta, left) {\n // recurse\n var nodeType = delta._t === 'a' ? 'array' : 'object';\n context.out('
      ');\n this.formatDeltaChildren(context, delta, left);\n context.out('
    ');\n }\n }, {\n key: 'format_added',\n value: function format_added(context, delta) {\n context.out('
    ');\n this.formatValue(context, delta[0]);\n context.out('
    ');\n }\n }, {\n key: 'format_modified',\n value: function format_modified(context, delta) {\n context.out('
    ');\n this.formatValue(context, delta[0]);\n context.out('
    ' + '
    ');\n this.formatValue(context, delta[1]);\n context.out('
    ');\n }\n }, {\n key: 'format_deleted',\n value: function format_deleted(context, delta) {\n context.out('
    ');\n this.formatValue(context, delta[0]);\n context.out('
    ');\n }\n }, {\n key: 'format_moved',\n value: function format_moved(context, delta) {\n context.out('
    ');\n this.formatValue(context, delta[0]);\n context.out('
    ' + delta[1] + '
    ');\n\n // draw an SVG arrow from here to move destination\n context.out(\n /* jshint multistr: true */\n '
    \\n \\n \\n \\n \\n \\n \\n \\n \\n
    ');\n context.hasArrows = true;\n }\n }, {\n key: 'format_textdiff',\n value: function format_textdiff(context, delta) {\n context.out('
    ');\n this.formatTextDiffString(context, delta[0]);\n context.out('
    ');\n }\n }]);\n return HtmlFormatter;\n}(BaseFormatter);\n\nfunction htmlEscape(text) {\n var html = text;\n var replacements = [[/&/g, '&'], [//g, '>'], [/'/g, '''], [/\"/g, '"']];\n for (var i = 0; i < replacements.length; i++) {\n html = html.replace(replacements[i][0], replacements[i][1]);\n }\n return html;\n}\n\nvar adjustArrows = function jsondiffpatchHtmlFormatterAdjustArrows(nodeArg) {\n var node = nodeArg || document;\n var getElementText = function getElementText(_ref) {\n var textContent = _ref.textContent,\n innerText = _ref.innerText;\n return textContent || innerText;\n };\n var eachByQuery = function eachByQuery(el, query, fn) {\n var elems = el.querySelectorAll(query);\n for (var i = 0, l = elems.length; i < l; i++) {\n fn(elems[i]);\n }\n };\n var eachChildren = function eachChildren(_ref2, fn) {\n var children = _ref2.children;\n\n for (var i = 0, l = children.length; i < l; i++) {\n fn(children[i], i);\n }\n };\n eachByQuery(node, '.jsondiffpatch-arrow', function (_ref3) {\n var parentNode = _ref3.parentNode,\n children = _ref3.children,\n style = _ref3.style;\n\n var arrowParent = parentNode;\n var svg = children[0];\n var path = svg.children[1];\n svg.style.display = 'none';\n var destination = getElementText(arrowParent.querySelector('.jsondiffpatch-moved-destination'));\n var container = arrowParent.parentNode;\n var destinationElem = void 0;\n eachChildren(container, function (child) {\n if (child.getAttribute('data-key') === destination) {\n destinationElem = child;\n }\n });\n if (!destinationElem) {\n return;\n }\n try {\n var distance = destinationElem.offsetTop - arrowParent.offsetTop;\n svg.setAttribute('height', Math.abs(distance) + 6);\n style.top = -8 + (distance > 0 ? 0 : distance) + 'px';\n var curve = distance > 0 ? 'M30,0 Q-10,' + Math.round(distance / 2) + ' 26,' + (distance - 4) : 'M30,' + -distance + ' Q-10,' + Math.round(-distance / 2) + ' 26,4';\n path.setAttribute('d', curve);\n svg.style.display = '';\n } catch (err) {}\n });\n};\n\n/* jshint camelcase: true */\n/* eslint-enable camelcase */\n\nvar showUnchanged = function showUnchanged(show, node, delay) {\n var el = node || document.body;\n var prefix = 'jsondiffpatch-unchanged-';\n var classes = {\n showing: prefix + 'showing',\n hiding: prefix + 'hiding',\n visible: prefix + 'visible',\n hidden: prefix + 'hidden'\n };\n var list = el.classList;\n if (!list) {\n return;\n }\n if (!delay) {\n list.remove(classes.showing);\n list.remove(classes.hiding);\n list.remove(classes.visible);\n list.remove(classes.hidden);\n if (show === false) {\n list.add(classes.hidden);\n }\n return;\n }\n if (show === false) {\n list.remove(classes.showing);\n list.add(classes.visible);\n setTimeout(function () {\n list.add(classes.hiding);\n }, 10);\n } else {\n list.remove(classes.hiding);\n list.add(classes.showing);\n list.remove(classes.hidden);\n }\n var intervalId = setInterval(function () {\n adjustArrows(el);\n }, 100);\n setTimeout(function () {\n list.remove(classes.showing);\n list.remove(classes.hiding);\n if (show === false) {\n list.add(classes.hidden);\n list.remove(classes.visible);\n } else {\n list.add(classes.visible);\n list.remove(classes.hidden);\n }\n setTimeout(function () {\n list.remove(classes.visible);\n clearInterval(intervalId);\n }, delay + 400);\n }, delay);\n};\n\nvar hideUnchanged = function hideUnchanged(node, delay) {\n return showUnchanged(false, node, delay);\n};\n\nvar defaultInstance = void 0;\n\nfunction format(delta, left) {\n if (!defaultInstance) {\n defaultInstance = new HtmlFormatter();\n }\n return defaultInstance.format(delta, left);\n}\n\n\n\nvar html = Object.freeze({\n\tshowUnchanged: showUnchanged,\n\thideUnchanged: hideUnchanged,\n\tdefault: HtmlFormatter,\n\tformat: format\n});\n\nvar AnnotatedFormatter = function (_BaseFormatter) {\n inherits(AnnotatedFormatter, _BaseFormatter);\n\n function AnnotatedFormatter() {\n classCallCheck(this, AnnotatedFormatter);\n\n var _this = possibleConstructorReturn(this, (AnnotatedFormatter.__proto__ || Object.getPrototypeOf(AnnotatedFormatter)).call(this));\n\n _this.includeMoveDestinations = false;\n return _this;\n }\n\n createClass(AnnotatedFormatter, [{\n key: 'prepareContext',\n value: function prepareContext(context) {\n get(AnnotatedFormatter.prototype.__proto__ || Object.getPrototypeOf(AnnotatedFormatter.prototype), 'prepareContext', this).call(this, context);\n context.indent = function (levels) {\n this.indentLevel = (this.indentLevel || 0) + (typeof levels === 'undefined' ? 1 : levels);\n this.indentPad = new Array(this.indentLevel + 1).join('  ');\n };\n context.row = function (json, htmlNote) {\n context.out('' + '
    ');\n        context.out(context.indentPad);\n        context.out('
    ');\n        context.out(json);\n        context.out('
    ');\n context.out(htmlNote);\n context.out('
    ');\n };\n }\n }, {\n key: 'typeFormattterErrorFormatter',\n value: function typeFormattterErrorFormatter(context, err) {\n context.row('', '
    ' + err + '
    ');\n }\n }, {\n key: 'formatTextDiffString',\n value: function formatTextDiffString(context, value) {\n var lines = this.parseTextDiff(value);\n context.out('
      ');\n for (var i = 0, l = lines.length; i < l; i++) {\n var line = lines[i];\n context.out('
    • ' + ('' + line.location.line + '' + line.location.chr + '
      '));\n var pieces = line.pieces;\n for (var pieceIndex = 0, piecesLength = pieces.length; pieceIndex < piecesLength; pieceIndex++) {\n var piece = pieces[pieceIndex];\n context.out('' + piece.text + '');\n }\n context.out('
    • ');\n }\n context.out('
    ');\n }\n }, {\n key: 'rootBegin',\n value: function rootBegin(context, type, nodeType) {\n context.out('');\n if (type === 'node') {\n context.row('{');\n context.indent();\n }\n if (nodeType === 'array') {\n context.row('\"_t\": \"a\",', 'Array delta (member names indicate array indices)');\n }\n }\n }, {\n key: 'rootEnd',\n value: function rootEnd(context, type) {\n if (type === 'node') {\n context.indent(-1);\n context.row('}');\n }\n context.out('
    ');\n }\n }, {\n key: 'nodeBegin',\n value: function nodeBegin(context, key, leftKey, type, nodeType) {\n context.row('"' + key + '": {');\n if (type === 'node') {\n context.indent();\n }\n if (nodeType === 'array') {\n context.row('\"_t\": \"a\",', 'Array delta (member names indicate array indices)');\n }\n }\n }, {\n key: 'nodeEnd',\n value: function nodeEnd(context, key, leftKey, type, nodeType, isLast) {\n if (type === 'node') {\n context.indent(-1);\n }\n context.row('}' + (isLast ? '' : ','));\n }\n\n /* jshint camelcase: false */\n\n /* eslint-disable camelcase */\n\n }, {\n key: 'format_unchanged',\n value: function format_unchanged() {}\n }, {\n key: 'format_movedestination',\n value: function format_movedestination() {}\n }, {\n key: 'format_node',\n value: function format_node(context, delta, left) {\n // recurse\n this.formatDeltaChildren(context, delta, left);\n }\n }]);\n return AnnotatedFormatter;\n}(BaseFormatter);\n\n/* eslint-enable camelcase */\n\nvar wrapPropertyName = function wrapPropertyName(name) {\n return '
    "' + name + '"
    ';\n};\n\nvar deltaAnnotations = {\n added: function added(delta, left, key, leftKey) {\n var formatLegend = '
    ([newValue])
    ';\n if (typeof leftKey === 'undefined') {\n return 'new value' + formatLegend;\n }\n if (typeof leftKey === 'number') {\n return 'insert at index ' + leftKey + formatLegend;\n }\n return 'add property ' + wrapPropertyName(leftKey) + formatLegend;\n },\n modified: function modified(delta, left, key, leftKey) {\n var formatLegend = '
    ([previousValue, newValue])
    ';\n if (typeof leftKey === 'undefined') {\n return 'modify value' + formatLegend;\n }\n if (typeof leftKey === 'number') {\n return 'modify at index ' + leftKey + formatLegend;\n }\n return 'modify property ' + wrapPropertyName(leftKey) + formatLegend;\n },\n deleted: function deleted(delta, left, key, leftKey) {\n var formatLegend = '
    ([previousValue, 0, 0])
    ';\n if (typeof leftKey === 'undefined') {\n return 'delete value' + formatLegend;\n }\n if (typeof leftKey === 'number') {\n return 'remove index ' + leftKey + formatLegend;\n }\n return 'delete property ' + wrapPropertyName(leftKey) + formatLegend;\n },\n moved: function moved(delta, left, key, leftKey) {\n return 'move from ' + ('index ' + leftKey + ' to index ' + delta[1] + '');\n },\n textdiff: function textdiff(delta, left, key, leftKey) {\n var location = typeof leftKey === 'undefined' ? '' : typeof leftKey === 'number' ? ' at index ' + leftKey : ' at property ' + wrapPropertyName(leftKey);\n return 'text diff' + location + ', format is
    a variation of Unidiff';\n }\n};\n\nvar formatAnyChange = function formatAnyChange(context, delta) {\n var deltaType = this.getDeltaType(delta);\n var annotator = deltaAnnotations[deltaType];\n var htmlNote = annotator && annotator.apply(annotator, Array.prototype.slice.call(arguments, 1));\n var json = JSON.stringify(delta, null, 2);\n if (deltaType === 'textdiff') {\n // split text diffs lines\n json = json.split('\\\\n').join('\\\\n\"+\\n \"');\n }\n context.indent();\n context.row(json, htmlNote);\n context.indent(-1);\n};\n\n/* eslint-disable camelcase */\nAnnotatedFormatter.prototype.format_added = formatAnyChange;\nAnnotatedFormatter.prototype.format_modified = formatAnyChange;\nAnnotatedFormatter.prototype.format_deleted = formatAnyChange;\nAnnotatedFormatter.prototype.format_moved = formatAnyChange;\nAnnotatedFormatter.prototype.format_textdiff = formatAnyChange;\nvar defaultInstance$1 = void 0;\n\nfunction format$1(delta, left) {\n if (!defaultInstance$1) {\n defaultInstance$1 = new AnnotatedFormatter();\n }\n return defaultInstance$1.format(delta, left);\n}\n\n\n\nvar annotated = Object.freeze({\n\tdefault: AnnotatedFormatter,\n\tformat: format$1\n});\n\nvar OPERATIONS = {\n add: 'add',\n remove: 'remove',\n replace: 'replace',\n move: 'move'\n};\n\nvar JSONFormatter = function (_BaseFormatter) {\n inherits(JSONFormatter, _BaseFormatter);\n\n function JSONFormatter() {\n classCallCheck(this, JSONFormatter);\n\n var _this = possibleConstructorReturn(this, (JSONFormatter.__proto__ || Object.getPrototypeOf(JSONFormatter)).call(this));\n\n _this.includeMoveDestinations = true;\n return _this;\n }\n\n createClass(JSONFormatter, [{\n key: 'prepareContext',\n value: function prepareContext(context) {\n get(JSONFormatter.prototype.__proto__ || Object.getPrototypeOf(JSONFormatter.prototype), 'prepareContext', this).call(this, context);\n context.result = [];\n context.path = [];\n context.pushCurrentOp = function (obj) {\n var op = obj.op,\n value = obj.value;\n\n var val = {\n op: op,\n path: this.currentPath()\n };\n if (typeof value !== 'undefined') {\n val.value = value;\n }\n this.result.push(val);\n };\n\n context.pushMoveOp = function (to) {\n var from = this.currentPath();\n this.result.push({\n op: OPERATIONS.move,\n from: from,\n path: this.toPath(to)\n });\n };\n\n context.currentPath = function () {\n return '/' + this.path.join('/');\n };\n\n context.toPath = function (toPath) {\n var to = this.path.slice();\n to[to.length - 1] = toPath;\n return '/' + to.join('/');\n };\n }\n }, {\n key: 'typeFormattterErrorFormatter',\n value: function typeFormattterErrorFormatter(context, err) {\n context.out('[ERROR] ' + err);\n }\n }, {\n key: 'rootBegin',\n value: function rootBegin() {}\n }, {\n key: 'rootEnd',\n value: function rootEnd() {}\n }, {\n key: 'nodeBegin',\n value: function nodeBegin(_ref, key, leftKey) {\n var path = _ref.path;\n\n path.push(leftKey);\n }\n }, {\n key: 'nodeEnd',\n value: function nodeEnd(_ref2) {\n var path = _ref2.path;\n\n path.pop();\n }\n\n /* jshint camelcase: false */\n /* eslint-disable camelcase */\n\n }, {\n key: 'format_unchanged',\n value: function format_unchanged() {}\n }, {\n key: 'format_movedestination',\n value: function format_movedestination() {}\n }, {\n key: 'format_node',\n value: function format_node(context, delta, left) {\n this.formatDeltaChildren(context, delta, left);\n }\n }, {\n key: 'format_added',\n value: function format_added(context, delta) {\n context.pushCurrentOp({ op: OPERATIONS.add, value: delta[0] });\n }\n }, {\n key: 'format_modified',\n value: function format_modified(context, delta) {\n context.pushCurrentOp({ op: OPERATIONS.replace, value: delta[1] });\n }\n }, {\n key: 'format_deleted',\n value: function format_deleted(context) {\n context.pushCurrentOp({ op: OPERATIONS.remove });\n }\n }, {\n key: 'format_moved',\n value: function format_moved(context, delta) {\n var to = delta[1];\n context.pushMoveOp(to);\n }\n }, {\n key: 'format_textdiff',\n value: function format_textdiff() {\n throw new Error('Not implemented');\n }\n }, {\n key: 'format',\n value: function format(delta, left) {\n var context = {};\n this.prepareContext(context);\n this.recurse(context, delta, left);\n return context.result;\n }\n }]);\n return JSONFormatter;\n}(BaseFormatter);\n\nvar last = function last(arr) {\n return arr[arr.length - 1];\n};\n\nvar sortBy = function sortBy(arr, pred) {\n arr.sort(pred);\n return arr;\n};\n\nvar compareByIndexDesc = function compareByIndexDesc(indexA, indexB) {\n var lastA = parseInt(indexA, 10);\n var lastB = parseInt(indexB, 10);\n if (!(isNaN(lastA) || isNaN(lastB))) {\n return lastB - lastA;\n } else {\n return 0;\n }\n};\n\nvar opsByDescendingOrder = function opsByDescendingOrder(removeOps) {\n return sortBy(removeOps, function (a, b) {\n var splitA = a.path.split('/');\n var splitB = b.path.split('/');\n if (splitA.length !== splitB.length) {\n return splitA.length - splitB.length;\n } else {\n return compareByIndexDesc(last(splitA), last(splitB));\n }\n });\n};\n\nvar partitionOps = function partitionOps(arr, fns) {\n var initArr = Array(fns.length + 1).fill().map(function () {\n return [];\n });\n return arr.map(function (item) {\n var position = fns.map(function (fn) {\n return fn(item);\n }).indexOf(true);\n if (position < 0) {\n position = fns.length;\n }\n return { item: item, position: position };\n }).reduce(function (acc, item) {\n acc[item.position].push(item.item);\n return acc;\n }, initArr);\n};\nvar isMoveOp = function isMoveOp(_ref3) {\n var op = _ref3.op;\n return op === 'move';\n};\nvar isRemoveOp = function isRemoveOp(_ref4) {\n var op = _ref4.op;\n return op === 'remove';\n};\n\nvar reorderOps = function reorderOps(diff) {\n var _partitionOps = partitionOps(diff, [isMoveOp, isRemoveOp]),\n _partitionOps2 = slicedToArray(_partitionOps, 3),\n moveOps = _partitionOps2[0],\n removedOps = _partitionOps2[1],\n restOps = _partitionOps2[2];\n\n var removeOpsReverse = opsByDescendingOrder(removedOps);\n return [].concat(toConsumableArray(removeOpsReverse), toConsumableArray(moveOps), toConsumableArray(restOps));\n};\n\nvar defaultInstance$2 = void 0;\n\nvar format$2 = function format(delta, left) {\n if (!defaultInstance$2) {\n defaultInstance$2 = new JSONFormatter();\n }\n return reorderOps(defaultInstance$2.format(delta, left));\n};\n\nvar log = function log(delta, left) {\n console.log(format$2(delta, left));\n};\n\n\n\nvar jsonpatch = Object.freeze({\n\tdefault: JSONFormatter,\n\tpartitionOps: partitionOps,\n\tformat: format$2,\n\tlog: log\n});\n\nfunction chalkColor(name) {\n return chalk && chalk[name] || function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return args;\n };\n}\n\nvar colors = {\n added: chalkColor('green'),\n deleted: chalkColor('red'),\n movedestination: chalkColor('gray'),\n moved: chalkColor('yellow'),\n unchanged: chalkColor('gray'),\n error: chalkColor('white.bgRed'),\n textDiffLine: chalkColor('gray')\n};\n\nvar ConsoleFormatter = function (_BaseFormatter) {\n inherits(ConsoleFormatter, _BaseFormatter);\n\n function ConsoleFormatter() {\n classCallCheck(this, ConsoleFormatter);\n\n var _this = possibleConstructorReturn(this, (ConsoleFormatter.__proto__ || Object.getPrototypeOf(ConsoleFormatter)).call(this));\n\n _this.includeMoveDestinations = false;\n return _this;\n }\n\n createClass(ConsoleFormatter, [{\n key: 'prepareContext',\n value: function prepareContext(context) {\n get(ConsoleFormatter.prototype.__proto__ || Object.getPrototypeOf(ConsoleFormatter.prototype), 'prepareContext', this).call(this, context);\n context.indent = function (levels) {\n this.indentLevel = (this.indentLevel || 0) + (typeof levels === 'undefined' ? 1 : levels);\n this.indentPad = new Array(this.indentLevel + 1).join(' ');\n this.outLine();\n };\n context.outLine = function () {\n this.buffer.push('\\n' + (this.indentPad || ''));\n };\n context.out = function () {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n for (var i = 0, l = args.length; i < l; i++) {\n var lines = args[i].split('\\n');\n var text = lines.join('\\n' + (this.indentPad || ''));\n if (this.color && this.color[0]) {\n text = this.color[0](text);\n }\n this.buffer.push(text);\n }\n };\n context.pushColor = function (color) {\n this.color = this.color || [];\n this.color.unshift(color);\n };\n context.popColor = function () {\n this.color = this.color || [];\n this.color.shift();\n };\n }\n }, {\n key: 'typeFormattterErrorFormatter',\n value: function typeFormattterErrorFormatter(context, err) {\n context.pushColor(colors.error);\n context.out('[ERROR]' + err);\n context.popColor();\n }\n }, {\n key: 'formatValue',\n value: function formatValue(context, value) {\n context.out(JSON.stringify(value, null, 2));\n }\n }, {\n key: 'formatTextDiffString',\n value: function formatTextDiffString(context, value) {\n var lines = this.parseTextDiff(value);\n context.indent();\n for (var i = 0, l = lines.length; i < l; i++) {\n var line = lines[i];\n context.pushColor(colors.textDiffLine);\n context.out(line.location.line + ',' + line.location.chr + ' ');\n context.popColor();\n var pieces = line.pieces;\n for (var pieceIndex = 0, piecesLength = pieces.length; pieceIndex < piecesLength; pieceIndex++) {\n var piece = pieces[pieceIndex];\n context.pushColor(colors[piece.type]);\n context.out(piece.text);\n context.popColor();\n }\n if (i < l - 1) {\n context.outLine();\n }\n }\n context.indent(-1);\n }\n }, {\n key: 'rootBegin',\n value: function rootBegin(context, type, nodeType) {\n context.pushColor(colors[type]);\n if (type === 'node') {\n context.out(nodeType === 'array' ? '[' : '{');\n context.indent();\n }\n }\n }, {\n key: 'rootEnd',\n value: function rootEnd(context, type, nodeType) {\n if (type === 'node') {\n context.indent(-1);\n context.out(nodeType === 'array' ? ']' : '}');\n }\n context.popColor();\n }\n }, {\n key: 'nodeBegin',\n value: function nodeBegin(context, key, leftKey, type, nodeType) {\n context.pushColor(colors[type]);\n context.out(leftKey + ': ');\n if (type === 'node') {\n context.out(nodeType === 'array' ? '[' : '{');\n context.indent();\n }\n }\n }, {\n key: 'nodeEnd',\n value: function nodeEnd(context, key, leftKey, type, nodeType, isLast) {\n if (type === 'node') {\n context.indent(-1);\n context.out(nodeType === 'array' ? ']' : '}' + (isLast ? '' : ','));\n }\n if (!isLast) {\n context.outLine();\n }\n context.popColor();\n }\n\n /* jshint camelcase: false */\n /* eslint-disable camelcase */\n\n }, {\n key: 'format_unchanged',\n value: function format_unchanged(context, delta, left) {\n if (typeof left === 'undefined') {\n return;\n }\n this.formatValue(context, left);\n }\n }, {\n key: 'format_movedestination',\n value: function format_movedestination(context, delta, left) {\n if (typeof left === 'undefined') {\n return;\n }\n this.formatValue(context, left);\n }\n }, {\n key: 'format_node',\n value: function format_node(context, delta, left) {\n // recurse\n this.formatDeltaChildren(context, delta, left);\n }\n }, {\n key: 'format_added',\n value: function format_added(context, delta) {\n this.formatValue(context, delta[0]);\n }\n }, {\n key: 'format_modified',\n value: function format_modified(context, delta) {\n context.pushColor(colors.deleted);\n this.formatValue(context, delta[0]);\n context.popColor();\n context.out(' => ');\n context.pushColor(colors.added);\n this.formatValue(context, delta[1]);\n context.popColor();\n }\n }, {\n key: 'format_deleted',\n value: function format_deleted(context, delta) {\n this.formatValue(context, delta[0]);\n }\n }, {\n key: 'format_moved',\n value: function format_moved(context, delta) {\n context.out('==> ' + delta[1]);\n }\n }, {\n key: 'format_textdiff',\n value: function format_textdiff(context, delta) {\n this.formatTextDiffString(context, delta[0]);\n }\n }]);\n return ConsoleFormatter;\n}(BaseFormatter);\n\nvar defaultInstance$3 = void 0;\n\nvar format$3 = function format(delta, left) {\n if (!defaultInstance$3) {\n defaultInstance$3 = new ConsoleFormatter();\n }\n return defaultInstance$3.format(delta, left);\n};\n\nfunction log$1(delta, left) {\n console.log(format$3(delta, left));\n}\n\n\n\nvar console$1 = Object.freeze({\n\tdefault: ConsoleFormatter,\n\tformat: format$3,\n\tlog: log$1\n});\n\n\n\nvar index = Object.freeze({\n\tbase: base,\n\thtml: html,\n\tannotated: annotated,\n\tjsonpatch: jsonpatch,\n\tconsole: console$1\n});\n\n// use as 2nd parameter for JSON.parse to revive Date instances\nfunction dateReviver(key, value) {\n var parts = void 0;\n if (typeof value === 'string') {\n // eslint-disable-next-line max-len\n parts = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d*))?(Z|([+-])(\\d{2}):(\\d{2}))$/.exec(value);\n if (parts) {\n return new Date(Date.UTC(+parts[1], +parts[2] - 1, +parts[3], +parts[4], +parts[5], +parts[6], +(parts[7] || 0)));\n }\n }\n return value;\n}\n\nfunction create(options) {\n return new DiffPatcher(options);\n}\n\nvar defaultInstance$4 = void 0;\n\nfunction diff() {\n if (!defaultInstance$4) {\n defaultInstance$4 = new DiffPatcher();\n }\n return defaultInstance$4.diff.apply(defaultInstance$4, arguments);\n}\n\nfunction patch() {\n if (!defaultInstance$4) {\n defaultInstance$4 = new DiffPatcher();\n }\n return defaultInstance$4.patch.apply(defaultInstance$4, arguments);\n}\n\nfunction unpatch() {\n if (!defaultInstance$4) {\n defaultInstance$4 = new DiffPatcher();\n }\n return defaultInstance$4.unpatch.apply(defaultInstance$4, arguments);\n}\n\nfunction reverse() {\n if (!defaultInstance$4) {\n defaultInstance$4 = new DiffPatcher();\n }\n return defaultInstance$4.reverse.apply(defaultInstance$4, arguments);\n}\n\nfunction clone$1() {\n if (!defaultInstance$4) {\n defaultInstance$4 = new DiffPatcher();\n }\n return defaultInstance$4.clone.apply(defaultInstance$4, arguments);\n}\n\nexports.DiffPatcher = DiffPatcher;\nexports.formatters = index;\nexports.console = console$1;\nexports.create = create;\nexports.dateReviver = dateReviver;\nexports.diff = diff;\nexports.patch = patch;\nexports.unpatch = unpatch;\nexports.reverse = reverse;\nexports.clone = clone$1;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as the internal argument placeholder. */\nvar PLACEHOLDER = '__lodash_placeholder__';\n\n/** Used to compose bitmasks for function metadata. */\nvar BIND_FLAG = 1,\n BIND_KEY_FLAG = 2,\n CURRY_BOUND_FLAG = 4,\n CURRY_FLAG = 8,\n CURRY_RIGHT_FLAG = 16,\n PARTIAL_FLAG = 32,\n PARTIAL_RIGHT_FLAG = 64,\n ARY_FLAG = 128,\n REARG_FLAG = 256,\n FLIP_FLAG = 512;\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n/** Used to associate wrap methods with their bit flags. */\nvar wrapFlags = [\n ['ary', ARY_FLAG],\n ['bind', BIND_FLAG],\n ['bindKey', BIND_KEY_FLAG],\n ['curry', CURRY_FLAG],\n ['curryRight', CURRY_RIGHT_FLAG],\n ['flip', FLIP_FLAG],\n ['partial', PARTIAL_FLAG],\n ['partialRight', PARTIAL_RIGHT_FLAG],\n ['rearg', REARG_FLAG]\n];\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n symbolTag = '[object Symbol]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to match wrap detail comments. */\nvar reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\n/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array ? array.length : 0;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\n/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n if (value !== value) {\n return baseFindIndex(array, baseIsNaN, fromIndex);\n }\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\n/**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\nfunction countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n result++;\n }\n }\n return result;\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\nfunction replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/* Used to set `toString` methods. */\nvar defineProperty = (function() {\n var func = getNative(Object, 'defineProperty'),\n name = getNative.name;\n\n return (name && name.length > 2) ? func : undefined;\n}());\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} prototype The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nfunction baseCreate(proto) {\n return isObject(proto) ? objectCreate(proto) : {};\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\nfunction composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n}\n\n/**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\nfunction composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n}\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\n/**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createBind(func, bitmask, thisArg) {\n var isBind = bitmask & BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n}\n\n/**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n}\n\n/**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n}\n\n/**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & ARY_FLAG,\n isBind = bitmask & BIND_FLAG,\n isBindKey = bitmask & BIND_KEY_FLAG,\n isCurried = bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG),\n isFlip = bitmask & FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n}\n\n/**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n}\n\n/**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG);\n\n if (!(bitmask & CURRY_BOUND_FLAG)) {\n bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG);\n }\n\n var result = wrapFunc(func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, newHoldersRight, argPos, ary, arity);\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n}\n\n/**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * The bitmask may be composed of the following flags:\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] == null\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG)) {\n bitmask &= ~(CURRY_FLAG | CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == CURRY_FLAG || bitmask == CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n return setWrapToString(result, func, bitmask);\n}\n\n/**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\nfunction getHolder(func) {\n var object = func;\n return object.placeholder;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\nfunction getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n}\n\n/**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\nfunction insertWrapDetails(source, details) {\n var length = details.length,\n lastIndex = length - 1;\n\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\nfunction reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n}\n\n/**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\nvar setWrapToString = !defineProperty ? identity : function(wrapper, reference, bitmask) {\n var source = (reference + '');\n return defineProperty(wrapper, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)))\n });\n};\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\nfunction updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n}\n\n/**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\nfunction curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\n/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\n// Assign default placeholders.\ncurry.placeholder = {};\n\nmodule.exports = curry;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = array;\n return apply(func, this, otherArgs);\n };\n}\n\n/**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\nfunction createFlow(fromRight) {\n return baseRest(function(funcs) {\n funcs = baseFlatten(funcs, 1);\n\n var length = funcs.length,\n index = length;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n if (typeof funcs[index] != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n }\n return function() {\n var index = 0,\n result = length ? funcs[index].apply(this, arguments) : arguments[0];\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n}\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Creates a function that returns the result of invoking the given functions\n * with the `this` binding of the created function, where each successive\n * invocation is supplied the return value of the previous.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flowRight\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flow([_.add, square]);\n * addSquare(1, 2);\n * // => 9\n */\nvar flow = createFlow();\n\nmodule.exports = flow;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","var isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var Mexp=require('./postfix_evaluator.js');\r\nMexp.prototype.formulaEval = function () {\r\n\t\"use strict\";\r\n\tvar stack=[],pop1,pop2,pop3;\r\n\tvar disp=[];\r\n\tvar temp='';\r\n\tvar arr=this.value;\r\n\tfor(var i=0;i\"+pop2.value+\"\"+arr[i].show+\"\"+pop1.value+\"\",type:10});\r\n\t\t\telse disp.push({value:(pop2.type!=1?\"(\":\"\")+pop2.value+(pop2.type!=1?\")\":\"\")+\"\"+pop1.value+\"\",type:1});\r\n\t\t}\r\n\t\telse if(arr[i].type===2||arr[i].type===9){\r\n\t\t\tpop1=disp.pop();\r\n\t\t\tpop2=disp.pop();\r\n\t\t\tdisp.push({value:(pop2.type!=1?\"(\":\"\")+pop2.value+(pop2.type!=1?\")\":\"\")+arr[i].show+(pop1.type!=1?\"(\":\"\")+pop1.value+(pop1.type!=1?\")\":\"\"),type:arr[i].type});\r\n\t\t}\r\n\t\telse if(arr[i].type===12){\r\n\t\t\tpop1=disp.pop();\r\n\t\t\tpop2=disp.pop();\r\n\t\t\tpop3=disp.pop();\r\n\t\t\tdisp.push({value:arr[i].show+\"(\"+pop3.value+\",\"+pop2.value+\",\"+pop1.value+\")\",type:12});\r\n\t\t}\r\n\t}\r\n\treturn disp[0].value;\r\n};\r\nmodule.exports=Mexp;","var Mexp = require('./math_function.js')\r\nfunction inc (arr, val) {\r\n for (var i = 0; i < arr.length; i++) {\r\n arr[i] += val\r\n }\r\n return arr\r\n}\r\nvar token = ['sin', 'cos', 'tan', 'pi', '(', ')', 'P', 'C',\r\n 'asin', 'acos', 'atan', '7', '8', '9', 'int',\r\n 'cosh', 'acosh', 'ln', '^', 'root', '4', '5', '6', '/', '!',\r\n 'tanh', 'atanh', 'Mod', '1', '2', '3', '*',\r\n 'sinh', 'asinh', 'e', 'log', '0', '.', '+', '-', ',', 'Sigma', 'n', 'Pi', 'pow']\r\nvar show = ['sin', 'cos', 'tan', 'π', '(', ')', 'P', 'C',\r\n 'asin', 'acos', 'atan', '7', '8', '9', 'Int',\r\n 'cosh', 'acosh', ' ln', '^', 'root', '4', '5', '6', '÷', '!',\r\n 'tanh', 'atanh', ' Mod ', '1', '2', '3', '×',\r\n 'sinh', 'asinh', 'e', ' log', '0', '.', '+', '-', ',', 'Σ', 'n', 'Π', 'pow']\r\nvar eva = [Mexp.math.sin, Mexp.math.cos, Mexp.math.tan, 'PI', '(', ')', Mexp.math.P, Mexp.math.C,\r\n Mexp.math.asin, Mexp.math.acos, Mexp.math.atan, '7', '8', '9', Math.floor,\r\n Mexp.math.cosh, Mexp.math.acosh, Math.log, Math.pow, Math.sqrt, '4', '5', '6', Mexp.math.div, Mexp.math.fact,\r\n Mexp.math.tanh, Mexp.math.atanh, Mexp.math.mod, '1', '2', '3', Mexp.math.mul,\r\n Mexp.math.sinh, Mexp.math.asinh, 'E', Mexp.math.log, '0', '.', Mexp.math.add, Mexp.math.sub, ',', Mexp.math.sigma, 'n', Mexp.math.Pi, Math.pow]\r\nvar preced = {\r\n 0: 11,\r\n 1: 0,\r\n 2: 3,\r\n 3: 0,\r\n 4: 0,\r\n 5: 0,\r\n 6: 0,\r\n 7: 11,\r\n 8: 11,\r\n 9: 1,\r\n 10: 10,\r\n 11: 0,\r\n 12: 11,\r\n 13: 0\r\n} // stores precedence by types\r\nvar type = [0, 0, 0, 3, 4, 5, 10, 10,\r\n 0, 0, 0, 1, 1, 1, 0,\r\n 0, 0, 0, 10, 0, 1, 1, 1, 2, 7,\r\n 0, 0, 2, 1, 1, 1, 2,\r\n 0, 0, 3, 0, 1, 6, 9, 9, 11, 12, 13, 12, 8]\r\n/*\r\n0 : function with syntax function_name(Maths_exp)\r\n1 : numbers\r\n2 : binary operators like * / Mod left associate and same precedence\r\n3 : Math constant values like e,pi,Cruncher ans\r\n4 : opening bracket\r\n5 : closing bracket\r\n6 : decimal\r\n7 : function with syntax (Math_exp)function_name\r\n8: function with syntax function_name(Math_exp1,Math_exp2)\r\n9 : binary operator like +,-\r\n10: binary operator like P C or ^\r\n11: ,\r\n12: function with , seperated three parameters\r\n13: variable of Sigma function\r\n*/\r\nvar type0 = {\r\n 0: true,\r\n 1: true,\r\n 3: true,\r\n 4: true,\r\n 6: true,\r\n 8: true,\r\n 9: true,\r\n 12: true,\r\n 13: true\r\n} // type2:true,type4:true,type9:true,type11:true,type21:true,type22\r\nvar type1 = {\r\n 0: true,\r\n 1: true,\r\n 2: true,\r\n 3: true,\r\n 4: true,\r\n 5: true,\r\n 6: true,\r\n 7: true,\r\n 8: true,\r\n 9: true,\r\n 10: true,\r\n 11: true,\r\n 12: true,\r\n 13: true\r\n} // type3:true,type5:true,type7:true,type23\r\nvar type1Asterick = {\r\n 0: true,\r\n 3: true,\r\n 4: true,\r\n 8: true,\r\n 12: true,\r\n 13: true\r\n}\r\nvar empty = {}\r\nvar type3Asterick = {\r\n 0: true,\r\n 1: true,\r\n 3: true,\r\n 4: true,\r\n 6: true,\r\n 8: true,\r\n 12: true,\r\n 13: true\r\n} // type_5:true,type_7:true,type_23\r\nvar type6 = {\r\n 1: true\r\n}\r\nvar newAr = [\r\n [],\r\n ['1', '2', '3', '7', '8', '9', '4', '5', '6', '+', '-', '*', '/', '(', ')', '^', '!', 'P', 'C', 'e', '0', '.', ',', 'n'],\r\n ['pi', 'ln', 'Pi'],\r\n ['sin', 'cos', 'tan', 'Del', 'int', 'Mod', 'log', 'pow'],\r\n ['asin', 'acos', 'atan', 'cosh', 'root', 'tanh', 'sinh'],\r\n ['acosh', 'atanh', 'asinh', 'Sigma']\r\n]\r\n\r\nfunction match (str1, str2, i, x) {\r\n for (var f = 0; f < x; f++) {\r\n if (str1[i + f] !== str2[f]) {\r\n return false\r\n }\r\n }\r\n return true\r\n}\r\nMexp.addToken = function (tokens) {\r\n for (var i = 0; i < tokens.length; i++) {\r\n var x = tokens[i].token.length\r\n var temp = -1\r\n\r\n // newAr is a specially designed data structure index of 1d array = length of tokens\r\n\r\n if (x < newAr.length) { // match to check if token is really huge and not existing\r\n // if not checked it will break in next line as undefined index\r\n for (var y = 0; y < newAr[x].length; y++) {\r\n if (tokens[i].token === newAr[x][y]) {\r\n temp = token.indexOf(newAr[x][y])\r\n break\r\n }\r\n }\r\n }\r\n if (temp === -1) {\r\n token.push(tokens[i].token)\r\n type.push(tokens[i].type)\r\n if (newAr.length <= tokens[i].token.length) {\r\n newAr[tokens[i].token.length] = []\r\n }\r\n newAr[tokens[i].token.length].push(tokens[i].token)\r\n eva.push(tokens[i].value)\r\n show.push(tokens[i].show)\r\n } else {\r\n token[temp] = tokens[i].token\r\n type[temp] = tokens[i].type\r\n eva[temp] = tokens[i].value\r\n show[temp] = tokens[i].show\r\n }\r\n }\r\n}\r\nMexp.lex = function (inp, tokens) {\r\n 'use strict'\r\n var changeSignObj = {\r\n value: Mexp.math.changeSign,\r\n type: 0,\r\n pre: 21,\r\n show: '-'\r\n }\r\n var closingParObj = {\r\n value: ')',\r\n show: ')',\r\n type: 5,\r\n pre: 0\r\n }\r\n var openingParObj = {\r\n value: '(',\r\n type: 4,\r\n pre: 0,\r\n show: '('\r\n }\r\n var str = [openingParObj]\r\n var ptc = [] // Parenthesis to close at the beginning is after one token\r\n var inpStr = inp\r\n var key\r\n var allowed = type0\r\n var bracToClose = 0\r\n var asterick = empty\r\n var prevKey = ''\r\n var i, x, y\r\n if (typeof tokens !== 'undefined') {\r\n Mexp.addToken(tokens)\r\n }\r\n var obj = {}\r\n for (i = 0; i < inpStr.length; i++) {\r\n if (inpStr[i] === ' ') {\r\n continue\r\n }\r\n key = ''\r\n for (x = (inpStr.length - i > (newAr.length - 2) ? newAr.length - 1 : inpStr.length - i); x > 0; x--) {\r\n if (newAr[x] === undefined) continue;\r\n for (y = 0; y < newAr[x].length; y++) {\r\n if (match(inpStr, newAr[x][y], i, x)) {\r\n key = newAr[x][y]\r\n y = newAr[x].length\r\n x = 0\r\n }\r\n }\r\n }\r\n i += key.length - 1\r\n if (key === '') {\r\n throw (new Mexp.Exception('Can\\'t understand after ' + inpStr.slice(i)))\r\n }\r\n var index = token.indexOf(key)\r\n var cToken = key\r\n var cType = type[index]\r\n var cEv = eva[index]\r\n var cPre = preced[cType]\r\n var cShow = show[index]\r\n var pre = str[str.length - 1]\r\n var j\r\n for (j = ptc.length; j--;) { // loop over ptc\r\n if (ptc[j] === 0) {\r\n if ([0, 2, 3, 4, 5, 9, 11, 12, 13].indexOf(cType) !== -1) {\r\n if (allowed[cType] !== true) {\r\n throw (new Mexp.Exception(key + ' is not allowed after ' + prevKey))\r\n }\r\n str.push(closingParObj)\r\n allowed = type1\r\n asterick = type3Asterick\r\n inc(ptc, -1).pop()\r\n }\r\n } else break\r\n }\r\n if (allowed[cType] !== true) {\r\n throw (new Mexp.Exception(key + ' is not allowed after ' + prevKey))\r\n }\r\n if (asterick[cType] === true) {\r\n cType = 2\r\n cEv = Mexp.math.mul\r\n cShow = '×'\r\n cPre = 3\r\n i = i - key.length\r\n }\r\n obj = {\r\n value: cEv,\r\n type: cType,\r\n pre: cPre,\r\n show: cShow\r\n }\r\n if (cType === 0) {\r\n allowed = type0\r\n asterick = empty\r\n inc(ptc, 2).push(2)\r\n str.push(obj)\r\n str.push(openingParObj)\r\n } else if (cType === 1) {\r\n if (pre.type === 1) {\r\n pre.value += cEv\r\n inc(ptc, 1)\r\n } else {\r\n str.push(obj)\r\n }\r\n allowed = type1\r\n asterick = type1Asterick\r\n } else if (cType === 2) {\r\n allowed = type0\r\n asterick = empty\r\n inc(ptc, 2)\r\n str.push(obj)\r\n } else if (cType === 3) { // constant\r\n str.push(obj)\r\n allowed = type1\r\n asterick = type3Asterick\r\n } else if (cType === 4) {\r\n inc(ptc, 1)\r\n bracToClose++\r\n allowed = type0\r\n asterick = empty\r\n str.push(obj)\r\n } else if (cType === 5) {\r\n if (!bracToClose) {\r\n throw (new Mexp.Exception('Closing parenthesis are more than opening one, wait What!!!'))\r\n }\r\n bracToClose--\r\n allowed = type1\r\n asterick = type3Asterick\r\n str.push(obj)\r\n } else if (cType === 6) {\r\n if (pre.hasDec) {\r\n throw (new Mexp.Exception('Two decimals are not allowed in one number'))\r\n }\r\n if (pre.type !== 1) {\r\n pre = {\r\n value: 0,\r\n type: 1,\r\n pre: 0\r\n } // pre needs to be changed as it will the last value now to be safe in later code\r\n str.push(pre)\r\n inc(ptc, -1)\r\n }\r\n allowed = type6\r\n inc(ptc, 1)\r\n asterick = empty\r\n pre.value += cEv\r\n pre.hasDec = true\r\n } else if (cType === 7) {\r\n allowed = type1\r\n asterick = type3Asterick\r\n inc(ptc, 1)\r\n str.push(obj)\r\n }\r\n if (cType === 8) {\r\n allowed = type0\r\n asterick = empty\r\n inc(ptc, 4).push(4)\r\n str.push(obj)\r\n str.push(openingParObj)\r\n } else if (cType === 9) {\r\n if (pre.type === 9) {\r\n if (pre.value === Mexp.math.add) {\r\n pre.value = cEv\r\n pre.show = cShow\r\n inc(ptc, 1)\r\n } else if (pre.value === Mexp.math.sub && cShow === '-') {\r\n pre.value = Mexp.math.add\r\n pre.show = '+'\r\n inc(ptc, 1)\r\n }\r\n } else if (pre.type !== 5 && pre.type !== 7 && pre.type !== 1 && pre.type !== 3 && pre.type !== 13) { // changesign only when negative is found\r\n if (cToken === '-') { // do nothing for + token\r\n // don't add with the above if statement as that will run the else statement of parent if on Ctoken +\r\n allowed = type0\r\n asterick = empty\r\n inc(ptc, 2).push(2)\r\n str.push(changeSignObj)\r\n str.push(openingParObj)\r\n }\r\n } else {\r\n str.push(obj)\r\n inc(ptc, 2)\r\n }\r\n allowed = type0\r\n asterick = empty\r\n } else if (cType === 10) {\r\n allowed = type0\r\n asterick = empty\r\n inc(ptc, 2)\r\n str.push(obj)\r\n } else if (cType === 11) {\r\n allowed = type0\r\n asterick = empty\r\n str.push(obj)\r\n } else if (cType === 12) {\r\n allowed = type0\r\n asterick = empty\r\n inc(ptc, 6).push(6)\r\n str.push(obj)\r\n str.push(openingParObj)\r\n } else if (cType === 13) {\r\n allowed = type1\r\n asterick = type3Asterick\r\n str.push(obj)\r\n }\r\n inc(ptc, -1)\r\n prevKey = key\r\n }\r\n for (j = ptc.length; j--;) { // loop over ptc\r\n if (ptc[j] === 0) {\r\n str.push(closingParObj)\r\n inc(ptc, -1).pop()\r\n } else break // if it is not zero so before ptc also cant be zero\r\n }\r\n if (allowed[5] !== true) {\r\n throw (new Mexp.Exception('complete the expression'))\r\n }\r\n while (bracToClose--) {\r\n str.push(closingParObj)\r\n }\r\n\r\n str.push(closingParObj)\r\n // console.log(str);\r\n return new Mexp(str)\r\n}\r\nmodule.exports = Mexp\r\n","var Mexp = function (parsed) {\r\n this.value = parsed\r\n}\r\n\r\nMexp.math = {\r\n isDegree: true, // mode of calculator\r\n acos: function (x) {\r\n return (Mexp.math.isDegree ? 180 / Math.PI * Math.acos(x) : Math.acos(x))\r\n },\r\n add: function (a, b) {\r\n return a + b\r\n },\r\n asin: function (x) {\r\n return (Mexp.math.isDegree ? 180 / Math.PI * Math.asin(x) : Math.asin(x))\r\n },\r\n atan: function (x) {\r\n return (Mexp.math.isDegree ? 180 / Math.PI * Math.atan(x) : Math.atan(x))\r\n },\r\n acosh: function (x) {\r\n return Math.log(x + Math.sqrt(x * x - 1))\r\n },\r\n asinh: function (x) {\r\n return Math.log(x + Math.sqrt(x * x + 1))\r\n },\r\n atanh: function (x) {\r\n return Math.log((1 + x) / (1 - x))\r\n },\r\n C: function (n, r) {\r\n var pro = 1\r\n var other = n - r\r\n var choice = r\r\n if (choice < other) {\r\n choice = other\r\n other = r\r\n }\r\n for (var i = choice + 1; i <= n; i++) {\r\n pro *= i\r\n }\r\n return pro / Mexp.math.fact(other)\r\n },\r\n changeSign: function (x) {\r\n return -x\r\n },\r\n cos: function (x) {\r\n if (Mexp.math.isDegree) x = Mexp.math.toRadian(x)\r\n return Math.cos(x)\r\n },\r\n cosh: function (x) {\r\n return (Math.pow(Math.E, x) + Math.pow(Math.E, -1 * x)) / 2\r\n },\r\n div: function (a, b) {\r\n return a / b\r\n },\r\n fact: function (n) {\r\n if (n % 1 !== 0) return 'NaN'\r\n var pro = 1\r\n for (var i = 2; i <= n; i++) {\r\n pro *= i\r\n }\r\n return pro\r\n },\r\n inverse: function (x) {\r\n return 1 / x\r\n },\r\n log: function (i) {\r\n return Math.log(i) / Math.log(10)\r\n },\r\n mod: function (a, b) {\r\n return a % b\r\n },\r\n mul: function (a, b) {\r\n return a * b\r\n },\r\n P: function (n, r) {\r\n var pro = 1\r\n for (var i = Math.floor(n) - Math.floor(r) + 1; i <= Math.floor(n); i++) {\r\n pro *= i\r\n }\r\n return pro\r\n },\r\n Pi: function (low, high, ex) {\r\n var pro = 1\r\n for (var i = low; i <= high; i++) {\r\n pro *= Number(ex.postfixEval({\r\n n: i\r\n }))\r\n }\r\n return pro\r\n },\r\n pow10x: function (e) {\r\n var x = 1\r\n while (e--) {\r\n x *= 10\r\n }\r\n return x\r\n },\r\n sigma: function (low, high, ex) {\r\n var sum = 0\r\n for (var i = low; i <= high; i++) {\r\n sum += Number(ex.postfixEval({\r\n n: i\r\n }))\r\n }\r\n return sum\r\n },\r\n sin: function (x) {\r\n if (Mexp.math.isDegree) x = Mexp.math.toRadian(x)\r\n return Math.sin(x)\r\n },\r\n sinh: function (x) {\r\n return (Math.pow(Math.E, x) - Math.pow(Math.E, -1 * x)) / 2\r\n },\r\n sub: function (a, b) {\r\n return a - b\r\n },\r\n tan: function (x) {\r\n if (Mexp.math.isDegree) x = Mexp.math.toRadian(x)\r\n return Math.tan(x)\r\n },\r\n tanh: function (x) {\r\n return Mexp.sinha(x) / Mexp.cosha(x)\r\n },\r\n toRadian: function (x) {\r\n return x * Math.PI / 180\r\n }\r\n}\r\nMexp.Exception = function (message) {\r\n this.message = message\r\n}\r\nmodule.exports = Mexp\r\n","\r\n var Mexp=require('./lexer.js');\r\n\r\n\tMexp.prototype.toPostfix = function () {\r\n\t\t'use strict';\r\n\t\tvar post=[],elem,popped,prep,pre,ele;\r\n \tvar stack=[{value:\"(\",type:4,pre:0}];\r\n\t\tvar arr=this.value;\r\n\t\tfor (var i=1; i < arr.length; i++) {\r\n\t\t\tif(arr[i].type===1||arr[i].type===3||arr[i].type===13){\t//if token is number,constant,or n(which is also a special constant in our case)\r\n\t\t\t\tif(arr[i].type===1)\r\n\t\t\t\t\tarr[i].value=Number(arr[i].value);\r\n\t\t\t\tpost.push(arr[i]);\r\n\t\t\t}\r\n\t\t\telse if(arr[i].type===4){\r\n\t\t\t\tstack.push(arr[i]);\r\n\t\t\t}\r\n\t\t\telse if(arr[i].type===5){\r\n\t\t\t\twhile((popped=stack.pop()).type!==4){\r\n\t\t\t\t\tpost.push(popped);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if(arr[i].type===11){\r\n\t\t\t\twhile((popped=stack.pop()).type!==4){\r\n\t\t\t\t\tpost.push(popped);\r\n\t\t\t\t}\r\n\t\t\t\tstack.push(popped);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\telem=arr[i];\r\n\t\t\t\tpre=elem.pre;\r\n\t\t\t\tele=stack[stack.length-1];\r\n\t\t\t\tprep=ele.pre;\r\n\t\t\t\tvar flag=ele.value=='Math.pow'&&elem.value=='Math.pow';\r\n\t\t\t\tif(pre>prep)stack.push(elem);\r\n\t\t\t\telse {\r\n\t\t\t\t\twhile(prep>=pre&&!flag||flag&&pre1) {\r\n\t\tthrow(new Mexp.exception(\"Uncaught Syntax error\"));\r\n\t}\r\n\treturn stack[0].value>1000000000000000?\"Infinity\":parseFloat(stack[0].value.toFixed(15));\r\n};\r\nMexp.eval=function(str,tokens,obj){\r\n\tif (typeof tokens===\"undefined\") {\r\n\t\treturn this.lex(str).toPostfix().postfixEval();\r\n\t}\r\n\telse if (typeof obj===\"undefined\") {\r\n\t\tif (typeof tokens.length!==\"undefined\") \r\n\t\t\treturn this.lex(str,tokens).toPostfix().postfixEval();\r\n\t\telse\r\n\t\t\treturn this.lex(str).toPostfix().postfixEval(tokens);\r\n\t}\r\n\telse\r\n\t\treturn this.lex(str,tokens).toPostfix().postfixEval(obj);\r\n};\r\nmodule.exports=Mexp;","'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n var M = ARRAY16\n for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n var a = this._a\n var b = this._b\n var c = this._c\n var d = this._d\n\n a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n this._a = (this._a + a) | 0\n this._b = (this._b + b) | 0\n this._c = (this._c + c) | 0\n this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.allocUnsafe(16)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n","function areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (newInputs[i] !== lastInputs[i]) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n return lastResult;\n }\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n }\n return memoized;\n}\n\nexport default memoizeOne;\n","var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n var len = n.bitLength();\n var min_bytes = Math.ceil(len / 8);\n\n // Generage random bytes until a number less than n is found.\n // This ensures that 0..n-1 have an equal probability of being selected.\n do\n var a = new bn(this.rand.generate(min_bytes));\n while (a.cmp(n) >= 0);\n\n return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n // Generate a random number greater than or equal to start and less than stop.\n var size = stop.sub(start);\n return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n var prime = true;\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n if (cb)\n cb(a);\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return false;\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s)\n return false;\n }\n\n return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n\n var g = n.gcd(a);\n if (g.cmpn(1) !== 0)\n return g;\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return x.fromRed().subn(1).gcd(n);\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s) {\n x = x.redSqr();\n return x.fromRed().subn(1).gcd(n);\n }\n }\n\n return false;\n};\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n Buffer = require('buffer').Buffer;\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this.strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex (str, start, end) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n }\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","import React, { Component } from 'react';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport PropTypes from 'prop-types';\nimport warning from 'tiny-warning';\n\nvar MAX_SIGNED_31_BIT_INT = 1073741823;\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {};\n\nfunction getUniqueId() {\n var key = '__global_unique_id__';\n return commonjsGlobal[key] = (commonjsGlobal[key] || 0) + 1;\n}\n\nfunction objectIs(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\n\nfunction createEventEmitter(value) {\n var handlers = [];\n return {\n on: function on(handler) {\n handlers.push(handler);\n },\n off: function off(handler) {\n handlers = handlers.filter(function (h) {\n return h !== handler;\n });\n },\n get: function get() {\n return value;\n },\n set: function set(newValue, changedBits) {\n value = newValue;\n handlers.forEach(function (handler) {\n return handler(value, changedBits);\n });\n }\n };\n}\n\nfunction onlyChild(children) {\n return Array.isArray(children) ? children[0] : children;\n}\n\nfunction createReactContext(defaultValue, calculateChangedBits) {\n var _Provider$childContex, _Consumer$contextType;\n\n var contextProp = '__create-react-context-' + getUniqueId() + '__';\n\n var Provider = /*#__PURE__*/function (_Component) {\n _inheritsLoose(Provider, _Component);\n\n function Provider() {\n var _this;\n\n _this = _Component.apply(this, arguments) || this;\n _this.emitter = createEventEmitter(_this.props.value);\n return _this;\n }\n\n var _proto = Provider.prototype;\n\n _proto.getChildContext = function getChildContext() {\n var _ref;\n\n return _ref = {}, _ref[contextProp] = this.emitter, _ref;\n };\n\n _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n if (this.props.value !== nextProps.value) {\n var oldValue = this.props.value;\n var newValue = nextProps.value;\n var changedBits;\n\n if (objectIs(oldValue, newValue)) {\n changedBits = 0;\n } else {\n changedBits = typeof calculateChangedBits === 'function' ? calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT;\n\n if (process.env.NODE_ENV !== 'production') {\n warning((changedBits & MAX_SIGNED_31_BIT_INT) === changedBits, 'calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: ' + changedBits);\n }\n\n changedBits |= 0;\n\n if (changedBits !== 0) {\n this.emitter.set(nextProps.value, changedBits);\n }\n }\n }\n };\n\n _proto.render = function render() {\n return this.props.children;\n };\n\n return Provider;\n }(Component);\n\n Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[contextProp] = PropTypes.object.isRequired, _Provider$childContex);\n\n var Consumer = /*#__PURE__*/function (_Component2) {\n _inheritsLoose(Consumer, _Component2);\n\n function Consumer() {\n var _this2;\n\n _this2 = _Component2.apply(this, arguments) || this;\n _this2.state = {\n value: _this2.getValue()\n };\n\n _this2.onUpdate = function (newValue, changedBits) {\n var observedBits = _this2.observedBits | 0;\n\n if ((observedBits & changedBits) !== 0) {\n _this2.setState({\n value: _this2.getValue()\n });\n }\n };\n\n return _this2;\n }\n\n var _proto2 = Consumer.prototype;\n\n _proto2.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n var observedBits = nextProps.observedBits;\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n };\n\n _proto2.componentDidMount = function componentDidMount() {\n if (this.context[contextProp]) {\n this.context[contextProp].on(this.onUpdate);\n }\n\n var observedBits = this.props.observedBits;\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n };\n\n _proto2.componentWillUnmount = function componentWillUnmount() {\n if (this.context[contextProp]) {\n this.context[contextProp].off(this.onUpdate);\n }\n };\n\n _proto2.getValue = function getValue() {\n if (this.context[contextProp]) {\n return this.context[contextProp].get();\n } else {\n return defaultValue;\n }\n };\n\n _proto2.render = function render() {\n return onlyChild(this.props.children)(this.state.value);\n };\n\n return Consumer;\n }(Component);\n\n Consumer.contextTypes = (_Consumer$contextType = {}, _Consumer$contextType[contextProp] = PropTypes.object, _Consumer$contextType);\n return {\n Provider: Provider,\n Consumer: Consumer\n };\n}\n\nvar index = React.createContext || createReactContext;\n\nexport default index;\n","module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n","/**\n * Group profile methods. Learn more: https://help.mixpanel.com/hc/en-us/articles/360025333632\n */\n\nconst {ProfileHelpers} = require('./profile_helpers');\n\nclass MixpanelGroups extends ProfileHelpers() {\n constructor(mp_instance) {\n super();\n this.mixpanel = mp_instance;\n this.endpoint = '/groups';\n }\n\n /** groups.set_once(group_key, group_id, prop, to, modifiers, callback)\n ---\n The same as groups.set, but adds a property value to a group only if it has not been set before.\n */\n set_once(group_key, group_id, prop, to, modifiers, callback) {\n const identifiers = {$group_key: group_key, $group_id: group_id};\n this._set(prop, to, modifiers, callback, {identifiers, set_once: true});\n }\n\n /**\n groups.set(group_key, group_id, prop, to, modifiers, callback)\n ---\n set properties on a group profile\n\n usage:\n\n mixpanel.groups.set('company', 'Acme Inc.', '$name', 'Acme Inc.');\n\n mixpanel.groups.set('company', 'Acme Inc.', {\n 'Industry': 'widgets',\n '$name': 'Acme Inc.',\n });\n */\n set(group_key, group_id, prop, to, modifiers, callback) {\n const identifiers = {$group_key: group_key, $group_id: group_id};\n this._set(prop, to, modifiers, callback, {identifiers});\n }\n\n /**\n groups.delete_group(group_key, group_id, modifiers, callback)\n ---\n delete a group profile permanently\n\n usage:\n\n mixpanel.groups.delete_group('company', 'Acme Inc.');\n */\n delete_group(group_key, group_id, modifiers, callback) {\n const identifiers = {$group_key: group_key, $group_id: group_id};\n this._delete_profile({identifiers, modifiers, callback});\n }\n\n /**\n groups.remove(group_key, group_id, data, modifiers, callback)\n ---\n remove a value from a list-valued group profile property.\n\n usage:\n\n mixpanel.groups.remove('company', 'Acme Inc.', {'products': 'anvil'});\n\n mixpanel.groups.remove('company', 'Acme Inc.', {\n 'products': 'anvil',\n 'customer segments': 'coyotes'\n });\n */\n remove(group_key, group_id, data, modifiers, callback) {\n const identifiers = {$group_key: group_key, $group_id: group_id};\n this._remove({identifiers, data, modifiers, callback});\n }\n\n /**\n groups.union(group_key, group_id, data, modifiers, callback)\n ---\n merge value(s) into a list-valued group profile property.\n\n usage:\n\n mixpanel.groups.union('company', 'Acme Inc.', {'products': 'anvil'});\n\n mixpanel.groups.union('company', 'Acme Inc.', {'products': ['anvil'], 'customer segments': ['coyotes']});\n */\n union(group_key, group_id, data, modifiers, callback) {\n const identifiers = {$group_key: group_key, $group_id: group_id};\n this._union({identifiers, data, modifiers, callback})\n }\n\n /**\n groups.unset(group_key, group_id, prop, modifiers, callback)\n ---\n delete a property on a group profile\n\n usage:\n\n mixpanel.groups.unset('company', 'Acme Inc.', 'products');\n\n mixpanel.groups.unset('company', 'Acme Inc.', ['products', 'customer segments']);\n */\n unset(group_key, group_id, prop, modifiers, callback) {\n const identifiers = {$group_key: group_key, $group_id: group_id};\n this._unset({identifiers, prop, modifiers, callback})\n }\n}\n\nexports.MixpanelGroups = MixpanelGroups;\n","/*\n Heavily inspired by the original js library copyright Mixpanel, Inc.\n (http://mixpanel.com/)\n\n Copyright (c) 2012 Carl Sverre\n\n Released under the MIT license.\n*/\n\nconst querystring = require('querystring');\nconst Buffer = require('buffer').Buffer;\nconst http = require('http');\nconst https = require('https');\nconst HttpsProxyAgent = require('https-proxy-agent');\n\nconst {async_all, ensure_timestamp} = require('./utils');\nconst {MixpanelGroups} = require('./groups');\nconst {MixpanelPeople} = require('./people');\n\nconst DEFAULT_CONFIG = {\n test: false,\n debug: false,\n verbose: false,\n host: 'api.mixpanel.com',\n protocol: 'https',\n path: '',\n};\n\nvar create_client = function(token, config) {\n if (!token) {\n throw new Error(\"The Mixpanel Client needs a Mixpanel token: `init(token)`\");\n }\n\n // mixpanel constants\n const MAX_BATCH_SIZE = 50;\n const TRACK_AGE_LIMIT = 60 * 60 * 24 * 5;\n const REQUEST_LIBS = {http, https};\n const proxyPath = process.env.HTTPS_PROXY || process.env.HTTP_PROXY;\n const proxyAgent = proxyPath ? new HttpsProxyAgent(proxyPath) : null;\n\n const metrics = {\n token,\n config: {...DEFAULT_CONFIG},\n };\n\n /**\n * sends an async GET or POST request to mixpanel\n * for batch processes data must be send in the body of a POST\n * @param {object} options\n * @param {string} options.endpoint\n * @param {object} options.data the data to send in the request\n * @param {string} [options.method] e.g. `get` or `post`, defaults to `get`\n * @param {function} callback called on request completion or error\n */\n metrics.send_request = function(options, callback) {\n callback = callback || function() {};\n\n let content = Buffer.from(JSON.stringify(options.data)).toString('base64');\n const endpoint = options.endpoint;\n const method = (options.method || 'GET').toUpperCase();\n let query_params = {\n 'ip': 0,\n 'verbose': metrics.config.verbose ? 1 : 0\n };\n const key = metrics.config.key;\n const request_lib = REQUEST_LIBS[metrics.config.protocol];\n let request_options = {\n host: metrics.config.host,\n port: metrics.config.port,\n headers: {},\n method: method\n };\n let request;\n\n if (!request_lib) {\n throw new Error(\n \"Mixpanel Initialization Error: Unsupported protocol \" + metrics.config.protocol + \". \" +\n \"Supported protocols are: \" + Object.keys(REQUEST_LIBS)\n );\n }\n\n\n if (method === 'POST') {\n content = 'data=' + content;\n request_options.headers['Content-Type'] = 'application/x-www-form-urlencoded';\n request_options.headers['Content-Length'] = Buffer.byteLength(content);\n } else if (method === 'GET') {\n query_params.data = content;\n }\n\n\n // add `key` query params\n if (key) {\n query_params.api_key = key;\n } else if (endpoint === '/import') {\n throw new Error(\"The Mixpanel Client needs a Mixpanel api key when importing old events: `init(token, { key: ... })`\");\n }\n\n if (proxyAgent) {\n request_options.agent = proxyAgent;\n }\n\n if (metrics.config.test) {\n query_params.test = 1;\n }\n\n request_options.path = metrics.config.path + endpoint + \"?\" + querystring.stringify(query_params);\n\n request = request_lib.request(request_options, function(res) {\n var data = \"\";\n res.on('data', function(chunk) {\n data += chunk;\n });\n\n res.on('end', function() {\n var e;\n if (metrics.config.verbose) {\n try {\n var result = JSON.parse(data);\n if(result.status != 1) {\n e = new Error(\"Mixpanel Server Error: \" + result.error);\n }\n }\n catch(ex) {\n e = new Error(\"Could not parse response from Mixpanel\");\n }\n }\n else {\n e = (data !== '1') ? new Error(\"Mixpanel Server Error: \" + data) : undefined;\n }\n\n callback(e);\n });\n });\n\n request.on('error', function(e) {\n if (metrics.config.debug) {\n console.log(\"Got Error: \" + e.message);\n }\n callback(e);\n });\n\n if (method === 'POST') {\n request.write(content);\n }\n request.end();\n };\n\n /**\n * Send an event to Mixpanel, using the specified endpoint (e.g., track/import)\n * @param {string} endpoint - API endpoint name\n * @param {string} event - event name\n * @param {object} properties - event properties\n * @param {Function} [callback] - callback for request completion/error\n */\n metrics.send_event_request = function(endpoint, event, properties, callback) {\n properties.token = metrics.token;\n properties.mp_lib = \"node\";\n\n var data = {\n event: event,\n properties: properties\n };\n\n if (metrics.config.debug) {\n console.log(\"Sending the following event to Mixpanel:\\n\", data);\n }\n\n metrics.send_request({ method: \"GET\", endpoint: endpoint, data: data }, callback);\n };\n\n /**\n * breaks array into equal-sized chunks, with the last chunk being the remainder\n * @param {Array} arr\n * @param {number} size\n * @returns {Array}\n */\n var chunk = function(arr, size) {\n var chunks = [],\n i = 0,\n total = arr.length;\n\n while (i < total) {\n chunks.push(arr.slice(i, i += size));\n }\n return chunks;\n };\n\n /**\n * sends events in batches\n * @param {object} options\n * @param {[{}]} options.event_list array of event objects\n * @param {string} options.endpoint e.g. `/track` or `/import`\n * @param {number} [options.max_concurrent_requests] limits concurrent async requests over the network\n * @param {number} [options.max_batch_size] limits number of events sent to mixpanel per request\n * @param {Function} [callback] callback receives array of errors if any\n *\n */\n var send_batch_requests = function(options, callback) {\n var event_list = options.event_list,\n endpoint = options.endpoint,\n max_batch_size = options.max_batch_size ? Math.min(MAX_BATCH_SIZE, options.max_batch_size) : MAX_BATCH_SIZE,\n // to maintain original intention of max_batch_size; if max_batch_size is greater than 50, we assume the user is trying to set max_concurrent_requests\n max_concurrent_requests = options.max_concurrent_requests || (options.max_batch_size > MAX_BATCH_SIZE && Math.ceil(options.max_batch_size / MAX_BATCH_SIZE)),\n event_batches = chunk(event_list, max_batch_size),\n request_batches = max_concurrent_requests ? chunk(event_batches, max_concurrent_requests) : [event_batches],\n total_event_batches = event_batches.length,\n total_request_batches = request_batches.length;\n\n /**\n * sends a batch of events to mixpanel through http api\n * @param {Array} batch\n * @param {Function} cb\n */\n function send_event_batch(batch, cb) {\n if (batch.length > 0) {\n batch = batch.map(function (event) {\n var properties = event.properties;\n\n if (endpoint === '/import' || event.properties.time) {\n // usually there will be a time property, but not required for `/track` endpoint\n event.properties.time = ensure_timestamp(event.properties.time);\n }\n event.properties.token = event.properties.token || metrics.token;\n return event;\n });\n\n // must be a POST\n metrics.send_request({ method: \"POST\", endpoint: endpoint, data: batch }, cb);\n }\n }\n\n /**\n * Asynchronously sends batches of requests\n * @param {number} index\n */\n function send_next_request_batch(index) {\n var request_batch = request_batches[index],\n cb = function (errors, results) {\n index += 1;\n if (index === total_request_batches) {\n callback && callback(errors, results);\n } else {\n send_next_request_batch(index);\n }\n };\n\n async_all(request_batch, send_event_batch, cb);\n }\n\n // init recursive function\n send_next_request_batch(0);\n\n if (metrics.config.debug) {\n console.log(\n \"Sending \" + event_list.length + \" events to Mixpanel in \" +\n total_event_batches + \" batches of events and \" +\n total_request_batches + \" batches of requests\"\n );\n }\n };\n\n /**\n track(event, properties, callback)\n ---\n this function sends an event to mixpanel.\n\n event:string the event name\n properties:object additional event properties to send\n callback:function(err:Error) callback is called when the request is\n finished or an error occurs\n */\n metrics.track = function(event, properties, callback) {\n if (!properties || typeof properties === \"function\") {\n callback = properties;\n properties = {};\n }\n\n // time is optional for `track` but must be less than 5 days old if set\n if (properties.time) {\n properties.time = ensure_timestamp(properties.time);\n if (properties.time < Date.now() / 1000 - TRACK_AGE_LIMIT) {\n throw new Error(\"`track` not allowed for event more than 5 days old; use `mixpanel.import()`\");\n }\n }\n\n metrics.send_event_request(\"/track\", event, properties, callback);\n };\n\n /**\n * send a batch of events to mixpanel `track` endpoint: this should only be used if events are less than 5 days old\n * @param {Array} event_list array of event objects to track\n * @param {object} [options]\n * @param {number} [options.max_concurrent_requests] number of concurrent http requests that can be made to mixpanel\n * @param {number} [options.max_batch_size] number of events that can be sent to mixpanel per request\n * @param {Function} [callback] callback receives array of errors if any\n */\n metrics.track_batch = function(event_list, options, callback) {\n options = options || {};\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n var batch_options = {\n event_list: event_list,\n endpoint: \"/track\",\n max_concurrent_requests: options.max_concurrent_requests,\n max_batch_size: options.max_batch_size\n };\n\n send_batch_requests(batch_options, callback);\n };\n\n /**\n import(event, time, properties, callback)\n ---\n This function sends an event to mixpanel using the import\n endpoint. The time argument should be either a Date or Number,\n and should signify the time the event occurred.\n\n It is highly recommended that you specify the distinct_id\n property for each event you import, otherwise the events will be\n tied to the IP address of the sending machine.\n\n For more information look at:\n https://mixpanel.com/docs/api-documentation/importing-events-older-than-31-days\n\n event:string the event name\n time:date|number the time of the event\n properties:object additional event properties to send\n callback:function(err:Error) callback is called when the request is\n finished or an error occurs\n */\n metrics.import = function(event, time, properties, callback) {\n if (!properties || typeof properties === \"function\") {\n callback = properties;\n properties = {};\n }\n\n properties.time = ensure_timestamp(time);\n\n metrics.send_event_request(\"/import\", event, properties, callback);\n };\n\n /**\n import_batch(event_list, options, callback)\n ---\n This function sends a list of events to mixpanel using the import\n endpoint. The format of the event array should be:\n\n [\n {\n \"event\": \"event name\",\n \"properties\": {\n \"time\": new Date(), // Number or Date; required for each event\n \"key\": \"val\",\n ...\n }\n },\n {\n \"event\": \"event name\",\n \"properties\": {\n \"time\": new Date() // Number or Date; required for each event\n }\n },\n ...\n ]\n\n See import() for further information about the import endpoint.\n\n Options:\n max_batch_size: the maximum number of events to be transmitted over\n the network simultaneously. useful for capping bandwidth\n usage.\n max_concurrent_requests: the maximum number of concurrent http requests that\n can be made to mixpanel; also useful for capping bandwidth.\n\n N.B.: the Mixpanel API only accepts 50 events per request, so regardless\n of max_batch_size, larger lists of events will be chunked further into\n groups of 50.\n\n event_list:array list of event names and properties\n options:object optional batch configuration\n callback:function(error_list:array) callback is called when the request is\n finished or an error occurs\n */\n metrics.import_batch = function(event_list, options, callback) {\n var batch_options;\n\n if (typeof(options) === \"function\" || !options) {\n callback = options;\n options = {};\n }\n batch_options = {\n event_list: event_list,\n endpoint: \"/import\",\n max_concurrent_requests: options.max_concurrent_requests,\n max_batch_size: options.max_batch_size\n };\n send_batch_requests(batch_options, callback);\n };\n\n /**\n alias(distinct_id, alias)\n ---\n This function creates an alias for distinct_id\n\n For more information look at:\n https://mixpanel.com/docs/integration-libraries/using-mixpanel-alias\n\n distinct_id:string the current identifier\n alias:string the future alias\n */\n metrics.alias = function(distinct_id, alias, callback) {\n var properties = {\n distinct_id: distinct_id,\n alias: alias\n };\n\n metrics.track('$create_alias', properties, callback);\n };\n\n metrics.groups = new MixpanelGroups(metrics);\n metrics.people = new MixpanelPeople(metrics);\n\n /**\n set_config(config)\n ---\n Modifies the mixpanel config\n\n config:object an object with properties to override in the\n mixpanel client config\n */\n metrics.set_config = function(config) {\n Object.assign(metrics.config, config);\n if (config.host) {\n // Split host into host and port\n const [host, port] = config.host.split(':');\n metrics.config.host = host;\n if (port) {\n metrics.config.port = Number(port);\n }\n }\n };\n\n if (config) {\n metrics.set_config(config);\n }\n\n return metrics;\n};\n\n// module exporting\nmodule.exports = {\n Client: function(token) {\n console.warn(\"The function `Client(token)` is deprecated. It is now called `init(token)`.\");\n return create_client(token);\n },\n init: create_client\n};\n","const {merge_modifiers, ProfileHelpers} = require('./profile_helpers');\n\nclass MixpanelPeople extends ProfileHelpers() {\n constructor(mp_instance) {\n super();\n this.mixpanel = mp_instance;\n this.endpoint = '/engage';\n }\n\n /** people.set_once(distinct_id, prop, to, modifiers, callback)\n ---\n The same as people.set but in the words of mixpanel:\n mixpanel.people.set_once\n\n \" This method allows you to set a user attribute, only if\n it is not currently set. It can be called multiple times\n safely, so is perfect for storing things like the first date\n you saw a user, or the referrer that brought them to your\n website for the first time. \"\n\n */\n set_once(distinct_id, prop, to, modifiers, callback) {\n const identifiers = {$distinct_id: distinct_id};\n this._set(prop, to, modifiers, callback, {identifiers, set_once: true});\n }\n\n /**\n people.set(distinct_id, prop, to, modifiers, callback)\n ---\n set properties on an user record in engage\n\n usage:\n\n mixpanel.people.set('bob', 'gender', 'm');\n\n mixpanel.people.set('joe', {\n 'company': 'acme',\n 'plan': 'premium'\n });\n */\n set(distinct_id, prop, to, modifiers, callback) {\n const identifiers = {$distinct_id: distinct_id};\n this._set(prop, to, modifiers, callback, {identifiers});\n }\n\n /**\n people.increment(distinct_id, prop, by, modifiers, callback)\n ---\n increment/decrement properties on an user record in engage\n\n usage:\n\n mixpanel.people.increment('bob', 'page_views', 1);\n\n // or, for convenience, if you're just incrementing a counter by 1, you can\n // simply do\n mixpanel.people.increment('bob', 'page_views');\n\n // to decrement a counter, pass a negative number\n mixpanel.people.increment('bob', 'credits_left', -1);\n\n // like mixpanel.people.set(), you can increment multiple properties at once:\n mixpanel.people.increment('bob', {\n counter1: 1,\n counter2: 3,\n counter3: -2\n });\n */\n increment(distinct_id, prop, by, modifiers, callback) {\n // TODO extract to ProfileHelpers\n\n var $add = {};\n\n if (typeof(prop) === 'object') {\n if (typeof(by) === 'object') {\n callback = modifiers;\n modifiers = by;\n } else {\n callback = by;\n }\n for (const [key, val] of Object.entries(prop)) {\n if (isNaN(parseFloat(val))) {\n if (this.mixpanel.config.debug) {\n console.error(\"Invalid increment value passed to mixpanel.people.increment - must be a number\");\n console.error(\"Passed \" + key + \":\" + val);\n }\n } else {\n $add[key] = val;\n }\n };\n } else {\n if (typeof(by) === 'number' || !by) {\n by = by || 1;\n $add[prop] = by;\n if (typeof(modifiers) === 'function') {\n callback = modifiers;\n }\n } else if (typeof(by) === 'function') {\n callback = by;\n $add[prop] = 1;\n } else {\n callback = modifiers;\n modifiers = (typeof(by) === 'object') ? by : {};\n $add[prop] = 1;\n }\n }\n\n var data = {\n '$add': $add,\n '$token': this.mixpanel.token,\n '$distinct_id': distinct_id\n };\n\n data = merge_modifiers(data, modifiers);\n\n if (this.mixpanel.config.debug) {\n console.log(\"Sending the following data to Mixpanel (Engage):\");\n console.log(data);\n }\n\n this.mixpanel.send_request({ method: \"GET\", endpoint: \"/engage\", data: data }, callback);\n }\n\n /**\n people.append(distinct_id, prop, value, modifiers, callback)\n ---\n Append a value to a list-valued people analytics property.\n\n usage:\n\n // append a value to a list, creating it if needed\n mixpanel.people.append('bob', 'pages_visited', 'homepage');\n\n // like mixpanel.people.set(), you can append multiple properties at once:\n mixpanel.people.append('bob', {\n list1: 'bob',\n list2: 123\n });\n */\n append(distinct_id, prop, value, modifiers, callback) {\n // TODO extract to ProfileHelpers\n\n var $append = {};\n\n if (typeof(prop) === 'object') {\n if (typeof(value) === 'object') {\n callback = modifiers;\n modifiers = value;\n } else {\n callback = value;\n }\n Object.keys(prop).forEach(function(key) {\n $append[key] = prop[key];\n });\n } else {\n $append[prop] = value;\n if (typeof(modifiers) === 'function') {\n callback = modifiers;\n }\n }\n\n var data = {\n '$append': $append,\n '$token': this.mixpanel.token,\n '$distinct_id': distinct_id\n };\n\n data = merge_modifiers(data, modifiers);\n\n if (this.mixpanel.config.debug) {\n console.log(\"Sending the following data to Mixpanel (Engage):\");\n console.log(data);\n }\n\n this.mixpanel.send_request({ method: \"GET\", endpoint: \"/engage\", data: data }, callback);\n }\n\n /**\n people.track_charge(distinct_id, amount, properties, modifiers, callback)\n ---\n Record that you have charged the current user a certain\n amount of money.\n\n usage:\n\n // charge a user $29.99\n mixpanel.people.track_charge('bob', 29.99);\n\n // charge a user $19 on the 1st of february\n mixpanel.people.track_charge('bob', 19, { '$time': new Date('feb 1 2012') });\n */\n track_charge(distinct_id, amount, properties, modifiers, callback) {\n if (typeof(properties) === 'function' || !properties) {\n callback = properties || function() {};\n properties = {};\n } else {\n if (typeof(modifiers) === 'function' || !modifiers) {\n callback = modifiers || function() {};\n if (properties.$ignore_time || properties.hasOwnProperty(\"$ip\")) {\n modifiers = {};\n Object.keys(properties).forEach(function(key) {\n modifiers[key] = properties[key];\n delete properties[key];\n });\n }\n }\n }\n\n if (typeof(amount) !== 'number') {\n amount = parseFloat(amount);\n if (isNaN(amount)) {\n console.error(\"Invalid value passed to mixpanel.people.track_charge - must be a number\");\n return;\n }\n }\n\n properties.$amount = amount;\n\n if (properties.hasOwnProperty('$time')) {\n var time = properties.$time;\n if (Object.prototype.toString.call(time) === '[object Date]') {\n properties.$time = time.toISOString();\n }\n }\n\n var data = {\n '$append': { '$transactions': properties },\n '$token': this.mixpanel.token,\n '$distinct_id': distinct_id\n };\n\n data = merge_modifiers(data, modifiers);\n\n if (this.mixpanel.config.debug) {\n console.log(\"Sending the following data to Mixpanel (Engage):\");\n console.log(data);\n }\n\n this.mixpanel.send_request({ method: \"GET\", endpoint: \"/engage\", data: data }, callback);\n }\n\n /**\n people.clear_charges(distinct_id, modifiers, callback)\n ---\n Clear all the current user's transactions.\n\n usage:\n\n mixpanel.people.clear_charges('bob');\n */\n clear_charges(distinct_id, modifiers, callback) {\n var data = {\n '$set': { '$transactions': [] },\n '$token': this.mixpanel.token,\n '$distinct_id': distinct_id\n };\n\n if (typeof(modifiers) === 'function') { callback = modifiers; }\n\n data = merge_modifiers(data, modifiers);\n\n if (this.mixpanel.config.debug) {\n console.log(\"Clearing this user's charges:\", distinct_id);\n }\n\n this.mixpanel.send_request({ method: \"GET\", endpoint: \"/engage\", data: data }, callback);\n }\n\n /**\n people.delete_user(distinct_id, modifiers, callback)\n ---\n delete an user record in engage\n\n usage:\n\n mixpanel.people.delete_user('bob');\n */\n delete_user(distinct_id, modifiers, callback) {\n const identifiers = {$distinct_id: distinct_id};\n this._delete_profile({identifiers, modifiers, callback});\n }\n\n /**\n people.remove(distinct_id, data, modifiers, callback)\n ---\n remove a value from a list-valued user profile property.\n\n usage:\n\n mixpanel.people.remove('bob', {'browsers': 'firefox'});\n\n mixpanel.people.remove('bob', {'browsers': 'chrome', 'os': 'linux'});\n */\n remove(distinct_id, data, modifiers, callback) {\n const identifiers = {'$distinct_id': distinct_id};\n this._remove({identifiers, data, modifiers, callback})\n }\n\n /**\n people.union(distinct_id, data, modifiers, callback)\n ---\n merge value(s) into a list-valued people analytics property.\n\n usage:\n\n mixpanel.people.union('bob', {'browsers': 'firefox'});\n\n mixpanel.people.union('bob', {'browsers': ['chrome'], os: ['linux']});\n */\n union(distinct_id, data, modifiers, callback) {\n const identifiers = {$distinct_id: distinct_id};\n this._union({identifiers, data, modifiers, callback});\n }\n\n /**\n people.unset(distinct_id, prop, modifiers, callback)\n ---\n delete a property on an user record in engage\n\n usage:\n\n mixpanel.people.unset('bob', 'page_views');\n\n mixpanel.people.unset('bob', ['page_views', 'last_login']);\n */\n unset(distinct_id, prop, modifiers, callback) {\n const identifiers = {$distinct_id: distinct_id};\n this._unset({identifiers, prop, modifiers, callback});\n }\n};\n\nexports.MixpanelPeople = MixpanelPeople;\n","/**\n * Mixin with profile-related helpers (for people and groups)\n */\n\nconst util = require('util');\nconst {ensure_timestamp} = require('./utils');\n\nfunction merge_modifiers(data, modifiers) {\n if (modifiers) {\n if (modifiers.$ignore_alias) {\n data.$ignore_alias = modifiers.$ignore_alias;\n }\n if (modifiers.$ignore_time) {\n data.$ignore_time = modifiers.$ignore_time;\n }\n if (modifiers.hasOwnProperty(\"$ip\")) {\n data.$ip = modifiers.$ip;\n }\n if (modifiers.hasOwnProperty(\"$time\")) {\n data.$time = ensure_timestamp(modifiers.$time);\n }\n }\n return data;\n};\nexports.merge_modifiers = merge_modifiers;\n\nexports.ProfileHelpers = (Base = Object) => class extends Base {\n get token() {\n return this.mixpanel.token;\n }\n\n get config() {\n return this.mixpanel.config;\n }\n\n _set(prop, to, modifiers, callback, {identifiers, set_once = false}) {\n let $set = {};\n\n if (typeof(prop) === 'object') {\n if (typeof(to) === 'object') {\n callback = modifiers;\n modifiers = to;\n } else {\n callback = to;\n }\n $set = prop;\n } else {\n $set[prop] = to;\n if (typeof(modifiers) === 'function' || !modifiers) {\n callback = modifiers;\n }\n }\n\n let data = {\n '$token': this.token,\n ...identifiers,\n };\n\n const set_key = set_once ? \"$set_once\" : \"$set\";\n data[set_key] = $set;\n\n if ('ip' in $set) {\n data.$ip = $set.ip;\n delete $set.ip;\n }\n\n if ($set.$ignore_time) {\n data.$ignore_time = $set.$ignore_time;\n delete $set.$ignore_time;\n }\n\n data = merge_modifiers(data, modifiers);\n\n if (this.config.debug) {\n console.log(`Sending the following data to Mixpanel (${this.endpoint}):`);\n console.log(data);\n }\n\n this.mixpanel.send_request({ method: \"GET\", endpoint: this.endpoint, data }, callback);\n }\n\n _delete_profile({identifiers, modifiers, callback}){\n let data = {\n '$delete': '',\n '$token': this.token,\n ...identifiers,\n };\n\n if (typeof(modifiers) === 'function') { callback = modifiers; }\n\n data = merge_modifiers(data, modifiers);\n\n if (this.config.debug) {\n console.log(`Deleting profile ${JSON.stringify(identifiers)}`);\n }\n\n this.mixpanel.send_request({ method: \"GET\", endpoint: this.endpoint, data }, callback);\n }\n\n _remove({identifiers, data, modifiers, callback}) {\n let $remove = {};\n\n if (typeof(data) !== 'object' || util.isArray(data)) {\n if (this.config.debug) {\n console.error(\"Invalid value passed to #remove - data must be an object with scalar values\");\n }\n return;\n }\n\n for (const [key, val] of Object.entries(data)) {\n if (typeof(val) === 'string' || typeof(val) === 'number') {\n $remove[key] = val;\n } else {\n if (this.config.debug) {\n console.error(\"Invalid argument passed to #remove - values must be scalar\");\n console.error(\"Passed \" + key + ':', val);\n }\n return;\n }\n }\n\n if (Object.keys($remove).length === 0) {\n return;\n }\n\n data = {\n '$remove': $remove,\n '$token': this.token,\n ...identifiers\n };\n\n if (typeof(modifiers) === 'function') {\n callback = modifiers;\n }\n\n data = merge_modifiers(data, modifiers);\n\n if (this.config.debug) {\n console.log(`Sending the following data to Mixpanel (${this.endpoint}):`);\n console.log(data);\n }\n\n this.mixpanel.send_request({ method: \"GET\", endpoint: this.endpoint, data }, callback);\n }\n\n _union({identifiers, data, modifiers, callback}) {\n let $union = {};\n\n if (typeof(data) !== 'object' || util.isArray(data)) {\n if (this.config.debug) {\n console.error(\"Invalid value passed to #union - data must be an object with scalar or array values\");\n }\n return;\n }\n\n for (const [key, val] of Object.entries(data)) {\n if (util.isArray(val)) {\n var merge_values = val.filter(function(v) {\n return typeof(v) === 'string' || typeof(v) === 'number';\n });\n if (merge_values.length > 0) {\n $union[key] = merge_values;\n }\n } else if (typeof(val) === 'string' || typeof(val) === 'number') {\n $union[key] = [val];\n } else {\n if (this.config.debug) {\n console.error(\"Invalid argument passed to #union - values must be a scalar value or array\");\n console.error(\"Passed \" + key + ':', val);\n }\n }\n }\n\n if (Object.keys($union).length === 0) {\n return;\n }\n\n data = {\n '$union': $union,\n '$token': this.token,\n ...identifiers,\n };\n\n if (typeof(modifiers) === 'function') {\n callback = modifiers;\n }\n\n data = merge_modifiers(data, modifiers);\n\n if (this.config.debug) {\n console.log(`Sending the following data to Mixpanel (${this.endpoint}):`);\n console.log(data);\n }\n\n this.mixpanel.send_request({ method: \"GET\", endpoint: this.endpoint, data }, callback);\n }\n\n _unset({identifiers, prop, modifiers, callback}){\n let $unset = [];\n\n if (util.isArray(prop)) {\n $unset = prop;\n } else if (typeof(prop) === 'string') {\n $unset = [prop];\n } else {\n if (this.config.debug) {\n console.error(\"Invalid argument passed to #unset - must be a string or array\");\n console.error(\"Passed: \" + prop);\n }\n return;\n }\n\n let data = {\n '$unset': $unset,\n '$token': this.token,\n ...identifiers,\n };\n\n if (typeof(modifiers) === 'function') {\n callback = modifiers;\n }\n\n data = merge_modifiers(data, modifiers);\n\n if (this.config.debug) {\n console.log(`Sending the following data to Mixpanel (${this.endpoint}):`);\n console.log(data);\n }\n\n this.mixpanel.send_request({ method: \"GET\", endpoint: this.endpoint, data }, callback);\n }\n};\n","/**\n * helper to wait for all callbacks to complete; similar to `Promise.all`\n * exposed to metrics object for unit tests\n * @param {Array} requests\n * @param {Function} handler\n * @param {Function} callback\n */\nexports.async_all = function(requests, handler, callback) {\n var total = requests.length,\n errors = null,\n results = [],\n done = function (err, result) {\n if (err) {\n // errors are `null` unless there is an error, which allows for promisification\n errors = errors || [];\n errors.push(err);\n }\n results.push(result);\n if (--total === 0) {\n callback(errors, results)\n }\n };\n\n if (total === 0) {\n callback(errors, results);\n } else {\n for(var i = 0, l = requests.length; i < l; i++) {\n handler(requests[i], done);\n }\n }\n};\n\n/**\n * Validate type of time property, and convert to Unix timestamp if necessary\n * @param {Date|number} time - value to check\n * @returns {number} Unix timestamp\n */\nexports.ensure_timestamp = function(time) {\n if (!(time instanceof Date || typeof time === \"number\")) {\n throw new Error(\"`time` property must be a Date or Unix timestamp and is only required for `import` endpoint\");\n }\n return time instanceof Date ? Math.floor(time.getTime() / 1000) : time;\n};\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see \n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see \n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n'use strict'\n\nvar asn1 = require('asn1.js')\n\nexports.certificate = require('./certificate')\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('modulus').int(),\n this.key('publicExponent').int(),\n this.key('privateExponent').int(),\n this.key('prime1').int(),\n this.key('prime2').int(),\n this.key('exponent1').int(),\n this.key('exponent2').int(),\n this.key('coefficient').int()\n )\n})\nexports.RSAPrivateKey = RSAPrivateKey\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n this.seq().obj(\n this.key('modulus').int(),\n this.key('publicExponent').int()\n )\n})\nexports.RSAPublicKey = RSAPublicKey\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\nexports.PublicKey = PublicKey\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('none').null_().optional(),\n this.key('curve').objid().optional(),\n this.key('params').seq().obj(\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int()\n ).optional()\n )\n})\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPrivateKey').octstr()\n )\n})\nexports.PrivateKey = PrivateKeyInfo\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').seq().obj(\n this.key('id').objid(),\n this.key('decrypt').seq().obj(\n this.key('kde').seq().obj(\n this.key('id').objid(),\n this.key('kdeparams').seq().obj(\n this.key('salt').octstr(),\n this.key('iters').int()\n )\n ),\n this.key('cipher').seq().obj(\n this.key('algo').objid(),\n this.key('iv').octstr()\n )\n )\n ),\n this.key('subjectPrivateKey').octstr()\n )\n})\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int(),\n this.key('pub_key').int(),\n this.key('priv_key').int()\n )\n})\nexports.DSAPrivateKey = DSAPrivateKey\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n this.int()\n})\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('privateKey').octstr(),\n this.key('parameters').optional().explicit(0).use(ECParameters),\n this.key('publicKey').optional().explicit(1).bitstr()\n )\n})\nexports.ECPrivateKey = ECPrivateKey\n\nvar ECParameters = asn1.define('ECParameters', function () {\n this.choice({\n namedCurve: this.objid()\n })\n})\n\nexports.signature = asn1.define('signature', function () {\n this.seq().obj(\n this.key('r').int(),\n this.key('s').int()\n )\n})\n","// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict'\n\nvar asn = require('asn1.js')\n\nvar Time = asn.define('Time', function () {\n this.choice({\n utcTime: this.utctime(),\n generalTime: this.gentime()\n })\n})\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n this.seq().obj(\n this.key('type').objid(),\n this.key('value').any()\n )\n})\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('parameters').optional(),\n this.key('curve').objid().optional()\n )\n})\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n this.setof(AttributeTypeValue)\n})\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n this.seqof(RelativeDistinguishedName)\n})\n\nvar Name = asn.define('Name', function () {\n this.choice({\n rdnSequence: this.use(RDNSequence)\n })\n})\n\nvar Validity = asn.define('Validity', function () {\n this.seq().obj(\n this.key('notBefore').use(Time),\n this.key('notAfter').use(Time)\n )\n})\n\nvar Extension = asn.define('Extension', function () {\n this.seq().obj(\n this.key('extnID').objid(),\n this.key('critical').bool().def(false),\n this.key('extnValue').octstr()\n )\n})\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n this.seq().obj(\n this.key('version').explicit(0).int().optional(),\n this.key('serialNumber').int(),\n this.key('signature').use(AlgorithmIdentifier),\n this.key('issuer').use(Name),\n this.key('validity').use(Validity),\n this.key('subject').use(Name),\n this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n this.key('issuerUniqueID').implicit(1).bitstr().optional(),\n this.key('subjectUniqueID').implicit(2).bitstr().optional(),\n this.key('extensions').explicit(3).seqof(Extension).optional()\n )\n})\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n this.seq().obj(\n this.key('tbsCertificate').use(TBSCertificate),\n this.key('signatureAlgorithm').use(AlgorithmIdentifier),\n this.key('signatureValue').bitstr()\n )\n})\n\nmodule.exports = X509Certificate\n","// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r+/=]+)[\\n\\r]+/m\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r+/=]+)-----END \\1-----$/m\nvar evp = require('evp_bytestokey')\nvar ciphers = require('browserify-aes')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = function (okey, password) {\n var key = okey.toString()\n var match = key.match(findProc)\n var decrypted\n if (!match) {\n var match2 = key.match(fullRegex)\n decrypted = Buffer.from(match2[2].replace(/[\\r\\n]/g, ''), 'base64')\n } else {\n var suite = 'aes' + match[1]\n var iv = Buffer.from(match[2], 'hex')\n var cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64')\n var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key\n var out = []\n var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n decrypted = Buffer.concat(out)\n }\n var tag = key.match(startRegex)[1]\n return {\n tag: tag,\n data: decrypted\n }\n}\n","var asn1 = require('./asn1')\nvar aesid = require('./aesid.json')\nvar fixProc = require('./fixProc')\nvar ciphers = require('browserify-aes')\nvar compat = require('pbkdf2')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = parseKeys\n\nfunction parseKeys (buffer) {\n var password\n if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n password = buffer.passphrase\n buffer = buffer.key\n }\n if (typeof buffer === 'string') {\n buffer = Buffer.from(buffer)\n }\n\n var stripped = fixProc(buffer, password)\n\n var type = stripped.tag\n var data = stripped.data\n var subtype, ndata\n switch (type) {\n case 'CERTIFICATE':\n ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo\n // falls through\n case 'PUBLIC KEY':\n if (!ndata) {\n ndata = asn1.PublicKey.decode(data, 'der')\n }\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')\n case '1.2.840.10045.2.1':\n ndata.subjectPrivateKey = ndata.subjectPublicKey\n return {\n type: 'ec',\n data: ndata\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')\n return {\n type: 'dsa',\n data: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n // throw new Error('unknown key type ' + type)\n case 'ENCRYPTED PRIVATE KEY':\n data = asn1.EncryptedPrivateKey.decode(data, 'der')\n data = decrypt(data, password)\n // falls through\n case 'PRIVATE KEY':\n ndata = asn1.PrivateKey.decode(data, 'der')\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')\n case '1.2.840.10045.2.1':\n return {\n curve: ndata.algorithm.curve,\n privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')\n return {\n type: 'dsa',\n params: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n // throw new Error('unknown key type ' + type)\n case 'RSA PUBLIC KEY':\n return asn1.RSAPublicKey.decode(data, 'der')\n case 'RSA PRIVATE KEY':\n return asn1.RSAPrivateKey.decode(data, 'der')\n case 'DSA PRIVATE KEY':\n return {\n type: 'dsa',\n params: asn1.DSAPrivateKey.decode(data, 'der')\n }\n case 'EC PRIVATE KEY':\n data = asn1.ECPrivateKey.decode(data, 'der')\n return {\n curve: data.parameters.value,\n privateKey: data.privateKey\n }\n default: throw new Error('unknown key type ' + type)\n }\n}\nparseKeys.signature = asn1.signature\nfunction decrypt (data, password) {\n var salt = data.algorithm.decrypt.kde.kdeparams.salt\n var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)\n var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]\n var iv = data.algorithm.decrypt.cipher.iv\n var cipherText = data.subjectPrivateKey\n var keylen = parseInt(algo.split('-')[1], 10) / 8\n var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1')\n var cipher = ciphers.createDecipheriv(algo, key, iv)\n var out = []\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n return Buffer.concat(out)\n}\n","var isarray = require('isarray')\n\n/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = []\n var key = 0\n var index = 0\n var path = ''\n var defaultDelimiter = options && options.delimiter || '/'\n var res\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0]\n var escaped = res[1]\n var offset = res.index\n path += str.slice(index, offset)\n index = offset + m.length\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1]\n continue\n }\n\n var next = str[index]\n var prefix = res[2]\n var name = res[3]\n var capture = res[4]\n var group = res[5]\n var modifier = res[6]\n var asterisk = res[7]\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path)\n path = ''\n }\n\n var partial = prefix != null && next != null && next !== prefix\n var repeat = modifier === '+' || modifier === '*'\n var optional = modifier === '?' || modifier === '*'\n var delimiter = res[2] || defaultDelimiter\n var pattern = capture || group\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n })\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index)\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path)\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length)\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options))\n }\n }\n\n return function (obj, opts) {\n var path = ''\n var data = obj || {}\n var options = opts || {}\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n path += token\n\n continue\n }\n\n var value = data[token.name]\n var segment\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j])\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value)\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g)\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n })\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = []\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source)\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options))\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n var strict = options.strict\n var end = options.end !== false\n var route = ''\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n route += escapeString(token)\n } else {\n var prefix = escapeString(token.prefix)\n var capture = '(?:' + token.pattern + ')'\n\n keys.push(token)\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*'\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?'\n } else {\n capture = prefix + '(' + capture + ')?'\n }\n } else {\n capture = prefix + '(' + capture + ')'\n }\n\n route += capture\n }\n }\n\n var delimiter = escapeString(options.delimiter || '/')\n var endsWithDelimiter = route.slice(-delimiter.length) === delimiter\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'\n }\n\n if (end) {\n route += '$'\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'\n }\n\n return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, /** @type {!Array} */ (keys))\n }\n\n if (isarray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\n","module.exports = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n","var Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar toBuffer = require('./to-buffer')\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n sha: 'SHA-1',\n 'sha-1': 'SHA-1',\n sha1: 'SHA-1',\n sha256: 'SHA-256',\n 'sha-256': 'SHA-256',\n sha384: 'SHA-384',\n 'sha-384': 'SHA-384',\n 'sha-512': 'SHA-512',\n sha512: 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n if (global.process && !global.process.browser) {\n return Promise.resolve(false)\n }\n if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n return Promise.resolve(false)\n }\n if (checks[algo] !== undefined) {\n return checks[algo]\n }\n ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n .then(function () {\n return true\n }).catch(function () {\n return false\n })\n checks[algo] = prom\n return prom\n}\n\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n return subtle.importKey(\n 'raw', password, { name: 'PBKDF2' }, false, ['deriveBits']\n ).then(function (key) {\n return subtle.deriveBits({\n name: 'PBKDF2',\n salt: salt,\n iterations: iterations,\n hash: {\n name: algo\n }\n }, key, length << 3)\n }).then(function (res) {\n return Buffer.from(res)\n })\n}\n\nfunction resolvePromise (promise, callback) {\n promise.then(function (out) {\n process.nextTick(function () {\n callback(null, out)\n })\n }, function (e) {\n process.nextTick(function () {\n callback(e)\n })\n })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n if (typeof digest === 'function') {\n callback = digest\n digest = undefined\n }\n\n digest = digest || 'sha1'\n var algo = toBrowser[digest.toLowerCase()]\n\n if (!algo || typeof global.Promise !== 'function') {\n return process.nextTick(function () {\n var out\n try {\n out = sync(password, salt, iterations, keylen, digest)\n } catch (e) {\n return callback(e)\n }\n callback(null, out)\n })\n }\n\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n\n resolvePromise(checkNative(algo).then(function (resp) {\n if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)\n\n return sync(password, salt, iterations, keylen, digest)\n }), callback)\n}\n","var defaultEncoding\n/* istanbul ignore next */\nif (process.browser) {\n defaultEncoding = 'utf-8'\n} else if (process.version) {\n var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n} else {\n defaultEncoding = 'utf-8'\n}\nmodule.exports = defaultEncoding\n","var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nmodule.exports = function (iterations, keylen) {\n if (typeof iterations !== 'number') {\n throw new TypeError('Iterations not a number')\n }\n\n if (iterations < 0) {\n throw new TypeError('Bad iterations')\n }\n\n if (typeof keylen !== 'number') {\n throw new TypeError('Key length not a number')\n }\n\n if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n throw new TypeError('Bad key length')\n }\n}\n","var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar toBuffer = require('./to-buffer')\n\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n md5: 16,\n sha1: 20,\n sha224: 28,\n sha256: 32,\n sha384: 48,\n sha512: 64,\n rmd160: 20,\n ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n var hash = getDigest(alg)\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n if (key.length > blocksize) {\n key = hash(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n ipad.copy(ipad1, 0, 0, blocksize)\n this.ipad1 = ipad1\n this.ipad2 = ipad\n this.opad = opad\n this.alg = alg\n this.blocksize = blocksize\n this.hash = hash\n this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n data.copy(ipad, this.blocksize)\n var h = this.hash(ipad)\n h.copy(this.opad, this.blocksize)\n return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n function shaFunc (data) {\n return sha(alg).update(data).digest()\n }\n function rmd160Func (data) {\n return new RIPEMD160().update(data).digest()\n }\n\n if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n if (alg === 'md5') return md5\n return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n\n digest = digest || 'sha1'\n\n var hmac = new Hmac(digest, password, salt.length)\n\n var DK = Buffer.allocUnsafe(keylen)\n var block1 = Buffer.allocUnsafe(salt.length + 4)\n salt.copy(block1, 0, 0, salt.length)\n\n var destPos = 0\n var hLen = sizes[digest]\n var l = Math.ceil(keylen / hLen)\n\n for (var i = 1; i <= l; i++) {\n block1.writeUInt32BE(i, salt.length)\n\n var T = hmac.run(block1, hmac.ipad1)\n var U = T\n\n for (var j = 1; j < iterations; j++) {\n U = hmac.run(U, hmac.ipad2)\n for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n }\n\n T.copy(DK, destPos)\n destPos += hLen\n }\n\n return DK\n}\n\nmodule.exports = pbkdf2\n","var Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (thing, encoding, name) {\n if (Buffer.isBuffer(thing)) {\n return thing\n } else if (typeof thing === 'string') {\n return Buffer.from(thing, encoding)\n } else if (ArrayBuffer.isView(thing)) {\n return Buffer.from(thing.buffer)\n } else {\n throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView')\n }\n}\n","'use strict';\n\nif (typeof process === 'undefined' ||\n !process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = { nextTick: nextTick };\n} else {\n module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n var loggedTypeFailures = {};\n var has = Function.call.bind(Object.prototype.hasOwnProperty);\n\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n if (process.env.NODE_ENV !== 'production') {\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error;\n // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error(\n (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.'\n );\n err.name = 'Invariant Violation';\n throw err;\n }\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n } catch (ex) {\n error = ex;\n }\n if (error && !(error instanceof Error)) {\n printWarning(\n (componentName || 'React class') + ': type specification of ' +\n location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n 'You may have forgotten to pass an argument to the type checker ' +\n 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n 'shape all require an argument).'\n );\n }\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var stack = getStack ? getStack() : '';\n\n printWarning(\n 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n );\n }\n }\n }\n }\n}\n\n/**\n * Resets warning cache when testing.\n *\n * @private\n */\ncheckPropTypes.resetWarningCache = function() {\n if (process.env.NODE_ENV !== 'production') {\n loggedTypeFailures = {};\n }\n}\n\nmodule.exports = checkPropTypes;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactIs = require('react-is');\nvar assign = require('object-assign');\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\nvar checkPropTypes = require('./checkPropTypes');\n\nvar has = Function.call.bind(Object.prototype.hasOwnProperty);\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n}\n\nfunction emptyFunctionThatReturnsNull() {\n return null;\n}\n\nmodule.exports = function(isValidElement, throwOnDirectAccess) {\n /* global Symbol */\n var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n /**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n * var iteratorFn = getIteratorFn(myIterable);\n * if (iteratorFn) {\n * var iterator = iteratorFn.call(myIterable);\n * ...\n * }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\n function getIteratorFn(maybeIterable) {\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n }\n\n /**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n * var Props = require('ReactPropTypes');\n * var MyArticle = React.createClass({\n * propTypes: {\n * // An optional string prop named \"description\".\n * description: Props.string,\n *\n * // A required enum prop named \"category\".\n * category: Props.oneOf(['News','Photos']).isRequired,\n *\n * // A prop named \"dialog\" that requires an instance of Dialog.\n * dialog: Props.instanceOf(Dialog).isRequired\n * },\n * render: function() { ... }\n * });\n *\n * A more formal specification of how these methods are used:\n *\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n * decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n * var MyLink = React.createClass({\n * propTypes: {\n * // An optional string or URI prop named \"href\".\n * href: function(props, propName, componentName) {\n * var propValue = props[propName];\n * if (propValue != null && typeof propValue !== 'string' &&\n * !(propValue instanceof URI)) {\n * return new Error(\n * 'Expected a string or an URI for ' + propName + ' in ' +\n * componentName\n * );\n * }\n * }\n * },\n * render: function() {...}\n * });\n *\n * @internal\n */\n\n var ANONYMOUS = '<>';\n\n // Important!\n // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n var ReactPropTypes = {\n array: createPrimitiveTypeChecker('array'),\n bool: createPrimitiveTypeChecker('boolean'),\n func: createPrimitiveTypeChecker('function'),\n number: createPrimitiveTypeChecker('number'),\n object: createPrimitiveTypeChecker('object'),\n string: createPrimitiveTypeChecker('string'),\n symbol: createPrimitiveTypeChecker('symbol'),\n\n any: createAnyTypeChecker(),\n arrayOf: createArrayOfTypeChecker,\n element: createElementTypeChecker(),\n elementType: createElementTypeTypeChecker(),\n instanceOf: createInstanceTypeChecker,\n node: createNodeChecker(),\n objectOf: createObjectOfTypeChecker,\n oneOf: createEnumTypeChecker,\n oneOfType: createUnionTypeChecker,\n shape: createShapeTypeChecker,\n exact: createStrictShapeTypeChecker,\n };\n\n /**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\n /*eslint-disable no-self-compare*/\n function is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n }\n /*eslint-enable no-self-compare*/\n\n /**\n * We use an Error-like object for backward compatibility as people may call\n * PropTypes directly and inspect their output. However, we don't use real\n * Errors anymore. We don't inspect their stack anyway, and creating them\n * is prohibitively expensive if they are created too often, such as what\n * happens in oneOfType() for any type before the one that matched.\n */\n function PropTypeError(message) {\n this.message = message;\n this.stack = '';\n }\n // Make `instanceof Error` still work for returned errors.\n PropTypeError.prototype = Error.prototype;\n\n function createChainableTypeChecker(validate) {\n if (process.env.NODE_ENV !== 'production') {\n var manualPropTypeCallCache = {};\n var manualPropTypeWarningCount = 0;\n }\n function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n componentName = componentName || ANONYMOUS;\n propFullName = propFullName || propName;\n\n if (secret !== ReactPropTypesSecret) {\n if (throwOnDirectAccess) {\n // New behavior only for users of `prop-types` package\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use `PropTypes.checkPropTypes()` to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') {\n // Old behavior for people using React.PropTypes\n var cacheKey = componentName + ':' + propName;\n if (\n !manualPropTypeCallCache[cacheKey] &&\n // Avoid spamming the console because they are often not actionable except for lib authors\n manualPropTypeWarningCount < 3\n ) {\n printWarning(\n 'You are manually calling a React.PropTypes validation ' +\n 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +\n 'and will throw in the standalone `prop-types` package. ' +\n 'You may be seeing this warning due to a third-party PropTypes ' +\n 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'\n );\n manualPropTypeCallCache[cacheKey] = true;\n manualPropTypeWarningCount++;\n }\n }\n }\n if (props[propName] == null) {\n if (isRequired) {\n if (props[propName] === null) {\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n }\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n }\n return null;\n } else {\n return validate(props, propName, componentName, location, propFullName);\n }\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n\n return chainedCheckType;\n }\n\n function createPrimitiveTypeChecker(expectedType) {\n function validate(props, propName, componentName, location, propFullName, secret) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== expectedType) {\n // `propValue` being instance of, say, date/regexp, pass the 'object'\n // check, but we can offer a more precise error message here rather than\n // 'of type `object`'.\n var preciseType = getPreciseType(propValue);\n\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createAnyTypeChecker() {\n return createChainableTypeChecker(emptyFunctionThatReturnsNull);\n }\n\n function createArrayOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n }\n var propValue = props[propName];\n if (!Array.isArray(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n }\n for (var i = 0; i < propValue.length; i++) {\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!isValidElement(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!ReactIs.isValidElementType(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createInstanceTypeChecker(expectedClass) {\n function validate(props, propName, componentName, location, propFullName) {\n if (!(props[propName] instanceof expectedClass)) {\n var expectedClassName = expectedClass.name || ANONYMOUS;\n var actualClassName = getClassName(props[propName]);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createEnumTypeChecker(expectedValues) {\n if (!Array.isArray(expectedValues)) {\n if (process.env.NODE_ENV !== 'production') {\n if (arguments.length > 1) {\n printWarning(\n 'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +\n 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'\n );\n } else {\n printWarning('Invalid argument supplied to oneOf, expected an array.');\n }\n }\n return emptyFunctionThatReturnsNull;\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n for (var i = 0; i < expectedValues.length; i++) {\n if (is(propValue, expectedValues[i])) {\n return null;\n }\n }\n\n var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {\n var type = getPreciseType(value);\n if (type === 'symbol') {\n return String(value);\n }\n return value;\n });\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createObjectOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n }\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n }\n for (var key in propValue) {\n if (has(propValue, key)) {\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createUnionTypeChecker(arrayOfTypeCheckers) {\n if (!Array.isArray(arrayOfTypeCheckers)) {\n process.env.NODE_ENV !== 'production' ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\n return emptyFunctionThatReturnsNull;\n }\n\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (typeof checker !== 'function') {\n printWarning(\n 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'\n );\n return emptyFunctionThatReturnsNull;\n }\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {\n return null;\n }\n }\n\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createNodeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!isNode(props[propName])) {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n for (var key in shapeTypes) {\n var checker = shapeTypes[key];\n if (!checker) {\n continue;\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createStrictShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n // We need to check all keys in case some are required but missing from\n // props.\n var allKeys = assign({}, props[propName], shapeTypes);\n for (var key in allKeys) {\n var checker = shapeTypes[key];\n if (!checker) {\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n '\\nBad object: ' + JSON.stringify(props[propName], null, ' ') +\n '\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')\n );\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function isNode(propValue) {\n switch (typeof propValue) {\n case 'number':\n case 'string':\n case 'undefined':\n return true;\n case 'boolean':\n return !propValue;\n case 'object':\n if (Array.isArray(propValue)) {\n return propValue.every(isNode);\n }\n if (propValue === null || isValidElement(propValue)) {\n return true;\n }\n\n var iteratorFn = getIteratorFn(propValue);\n if (iteratorFn) {\n var iterator = iteratorFn.call(propValue);\n var step;\n if (iteratorFn !== propValue.entries) {\n while (!(step = iterator.next()).done) {\n if (!isNode(step.value)) {\n return false;\n }\n }\n } else {\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n if (!isNode(entry[1])) {\n return false;\n }\n }\n }\n }\n } else {\n return false;\n }\n\n return true;\n default:\n return false;\n }\n }\n\n function isSymbol(propType, propValue) {\n // Native Symbol.\n if (propType === 'symbol') {\n return true;\n }\n\n // falsy value can't be a Symbol\n if (!propValue) {\n return false;\n }\n\n // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n if (propValue['@@toStringTag'] === 'Symbol') {\n return true;\n }\n\n // Fallback for non-spec compliant Symbols which are polyfilled.\n if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n return true;\n }\n\n return false;\n }\n\n // Equivalent of `typeof` but with special handling for array and regexp.\n function getPropType(propValue) {\n var propType = typeof propValue;\n if (Array.isArray(propValue)) {\n return 'array';\n }\n if (propValue instanceof RegExp) {\n // Old webkits (at least until Android 4.0) return 'function' rather than\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n // passes PropTypes.object.\n return 'object';\n }\n if (isSymbol(propType, propValue)) {\n return 'symbol';\n }\n return propType;\n }\n\n // This handles more types than `getPropType`. Only used for error messages.\n // See `createPrimitiveTypeChecker`.\n function getPreciseType(propValue) {\n if (typeof propValue === 'undefined' || propValue === null) {\n return '' + propValue;\n }\n var propType = getPropType(propValue);\n if (propType === 'object') {\n if (propValue instanceof Date) {\n return 'date';\n } else if (propValue instanceof RegExp) {\n return 'regexp';\n }\n }\n return propType;\n }\n\n // Returns a string that is postfixed to a warning about an invalid type.\n // For example, \"undefined\" or \"of type array\"\n function getPostfixForTypeWarning(value) {\n var type = getPreciseType(value);\n switch (type) {\n case 'array':\n case 'object':\n return 'an ' + type;\n case 'boolean':\n case 'date':\n case 'regexp':\n return 'a ' + type;\n default:\n return type;\n }\n }\n\n // Returns class name of the object, if any.\n function getClassName(propValue) {\n if (!propValue.constructor || !propValue.constructor.name) {\n return ANONYMOUS;\n }\n return propValue.constructor.name;\n }\n\n ReactPropTypes.checkPropTypes = checkPropTypes;\n ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","exports.publicEncrypt = require('./publicEncrypt')\nexports.privateDecrypt = require('./privateDecrypt')\n\nexports.privateEncrypt = function privateEncrypt (key, buf) {\n return exports.publicEncrypt(key, buf, true)\n}\n\nexports.publicDecrypt = function publicDecrypt (key, buf) {\n return exports.privateDecrypt(key, buf, true)\n}\n","var createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n var t = Buffer.alloc(0)\n var i = 0\n var c\n while (t.length < len) {\n c = i2ops(i++)\n t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n }\n return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n var out = Buffer.allocUnsafe(4)\n out.writeUInt32BE(c, 0)\n return out\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n Buffer = require('buffer').Buffer;\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this.strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex (str, start, end) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n }\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","var parseKeys = require('parse-asn1')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar crt = require('browserify-rsa')\nvar createHash = require('create-hash')\nvar withPublic = require('./withPublic')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function privateDecrypt (privateKey, enc, reverse) {\n var padding\n if (privateKey.padding) {\n padding = privateKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n\n var key = parseKeys(privateKey)\n var k = key.modulus.byteLength()\n if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {\n throw new Error('decryption error')\n }\n var msg\n if (reverse) {\n msg = withPublic(new BN(enc), key)\n } else {\n msg = crt(enc, key)\n }\n var zBuffer = Buffer.alloc(k - msg.length)\n msg = Buffer.concat([zBuffer, msg], k)\n if (padding === 4) {\n return oaep(key, msg)\n } else if (padding === 1) {\n return pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n return msg\n } else {\n throw new Error('unknown padding')\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n if (msg[0] !== 0) {\n throw new Error('decryption error')\n }\n var maskedSeed = msg.slice(1, hLen + 1)\n var maskedDb = msg.slice(hLen + 1)\n var seed = xor(maskedSeed, mgf(maskedDb, hLen))\n var db = xor(maskedDb, mgf(seed, k - hLen - 1))\n if (compare(iHash, db.slice(0, hLen))) {\n throw new Error('decryption error')\n }\n var i = hLen\n while (db[i] === 0) {\n i++\n }\n if (db[i++] !== 1) {\n throw new Error('decryption error')\n }\n return db.slice(i)\n}\n\nfunction pkcs1 (key, msg, reverse) {\n var p1 = msg.slice(0, 2)\n var i = 2\n var status = 0\n while (msg[i++] !== 0) {\n if (i >= msg.length) {\n status++\n break\n }\n }\n var ps = msg.slice(2, i - 1)\n\n if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {\n status++\n }\n if (ps.length < 8) {\n status++\n }\n if (status) {\n throw new Error('decryption error')\n }\n return msg.slice(i)\n}\nfunction compare (a, b) {\n a = Buffer.from(a)\n b = Buffer.from(b)\n var dif = 0\n var len = a.length\n if (a.length !== b.length) {\n dif++\n len = Math.min(a.length, b.length)\n }\n var i = -1\n while (++i < len) {\n dif += (a[i] ^ b[i])\n }\n return dif\n}\n","var parseKeys = require('parse-asn1')\nvar randomBytes = require('randombytes')\nvar createHash = require('create-hash')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar withPublic = require('./withPublic')\nvar crt = require('browserify-rsa')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function publicEncrypt (publicKey, msg, reverse) {\n var padding\n if (publicKey.padding) {\n padding = publicKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n var key = parseKeys(publicKey)\n var paddedMsg\n if (padding === 4) {\n paddedMsg = oaep(key, msg)\n } else if (padding === 1) {\n paddedMsg = pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n paddedMsg = new BN(msg)\n if (paddedMsg.cmp(key.modulus) >= 0) {\n throw new Error('data too long for modulus')\n }\n } else {\n throw new Error('unknown padding')\n }\n if (reverse) {\n return crt(paddedMsg, key)\n } else {\n return withPublic(paddedMsg, key)\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var mLen = msg.length\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n var hLen2 = 2 * hLen\n if (mLen > k - hLen2 - 2) {\n throw new Error('message too long')\n }\n var ps = Buffer.alloc(k - mLen - hLen2 - 2)\n var dblen = k - hLen - 1\n var seed = randomBytes(hLen)\n var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))\n var maskedSeed = xor(seed, mgf(maskedDb, hLen))\n return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))\n}\nfunction pkcs1 (key, msg, reverse) {\n var mLen = msg.length\n var k = key.modulus.byteLength()\n if (mLen > k - 11) {\n throw new Error('message too long')\n }\n var ps\n if (reverse) {\n ps = Buffer.alloc(k - mLen - 3, 0xff)\n } else {\n ps = nonZero(k - mLen - 3)\n }\n return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))\n}\nfunction nonZero (len) {\n var out = Buffer.allocUnsafe(len)\n var i = 0\n var cache = randomBytes(len * 2)\n var cur = 0\n var num\n while (i < len) {\n if (cur === cache.length) {\n cache = randomBytes(len * 2)\n cur = 0\n }\n num = cache[cur++]\n if (num) {\n out[i++] = num\n }\n }\n return out\n}\n","var BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n return Buffer.from(paddedMsg\n .toRed(BN.mont(key.modulus))\n .redPow(new BN(key.publicExponent))\n .fromRed()\n .toArray())\n}\n\nmodule.exports = withPublic\n","module.exports = function xor (a, b) {\n var len = a.length\n var i = -1\n while (++i < len) {\n a[i] ^= b[i]\n }\n return a\n}\n","function hsl2rgb(hsl) {\n var h = hsl[0] / 360,\n s = hsl[1] / 100,\n l = hsl[2] / 100,\n t1, t2, t3, rgb, val;\n\n if (s == 0) {\n val = l * 255;\n return [val, val, val];\n }\n\n if (l < 0.5)\n t2 = l * (1 + s);\n else\n t2 = l + s - l * s;\n t1 = 2 * l - t2;\n\n rgb = [0, 0, 0];\n for (var i = 0; i < 3; i++) {\n t3 = h + 1 / 3 * - (i - 1);\n t3 < 0 && t3++;\n t3 > 1 && t3--;\n\n if (6 * t3 < 1)\n val = t1 + (t2 - t1) * 6 * t3;\n else if (2 * t3 < 1)\n val = t2;\n else if (3 * t3 < 2)\n val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n else\n val = t1;\n\n rgb[i] = val * 255;\n }\n\n return rgb;\n}\n\nmodule.exports = hsl2rgb;","var clamp = require(\"../util/clamp\");\n\nfunction componentToHex(c) {\n var value = Math.round(clamp(c, 0, 255));\n var hex = value.toString(16);\n\n return hex.length == 1 ? \"0\" + hex : hex;\n}\n\nfunction rgb2hex(rgb) {\n var alpha = rgb.length === 4 ? componentToHex(rgb[3] * 255) : \"\";\n\n return \"#\" + componentToHex(rgb[0]) + componentToHex(rgb[1]) + componentToHex(rgb[2]) + alpha;\n}\n\nmodule.exports = rgb2hex;","var component = /-?\\d+(\\.\\d+)?%?/g;\nfunction extractComponents(color) {\n return color.match(component);\n}\n\nmodule.exports = extractComponents;","function expand(hex) {\n var result = \"#\";\n\n for (var i = 1; i < hex.length; i++) {\n var val = hex.charAt(i);\n result += val + val;\n }\n\n return result;\n}\n\nfunction hex(hex) {\n // #RGB or #RGBA\n if(hex.length === 4 || hex.length === 5) {\n hex = expand(hex);\n }\n\n var rgb = [\n parseInt(hex.substring(1,3), 16),\n parseInt(hex.substring(3,5), 16),\n parseInt(hex.substring(5,7), 16)\n ];\n\n // #RRGGBBAA\n if (hex.length === 9) {\n var alpha = parseFloat((parseInt(hex.substring(7,9), 16) / 255).toFixed(2));\n rgb.push(alpha);\n }\n\n return rgb;\n}\n\nmodule.exports = hex;","var extractComponents = require(\"./extractComponents\");\nvar clamp = require(\"../util/clamp\");\n\nfunction parseHslComponent(component, i) {\n component = parseFloat(component);\n\n switch(i) {\n case 0:\n return clamp(component, 0, 360);\n case 1:\n case 2:\n return clamp(component, 0, 100);\n case 3:\n return clamp(component, 0, 1);\n }\n}\n\nfunction hsl(color) {\n return extractComponents(color).map(parseHslComponent);\n}\n\nmodule.exports = hsl;","var hsl = require(\"./hsl\");\nvar hex = require(\"./hex\");\nvar rgb = require(\"./rgb\");\nvar hsl2rgb = require(\"../convert/hsl2rgb\");\n\nfunction hsl2rgbParse(color) {\n var h = hsl(color);\n var r = hsl2rgb(h);\n\n // handle alpha since hsl2rgb doesn't know (or care!) about it\n if(h.length === 4) {\n r.push(h[3]);\n }\n\n return r;\n}\n\nvar space2parser = {\n \"#\" : hex,\n \"hsl\" : hsl2rgbParse,\n \"rgb\" : rgb\n};\n\nfunction parse(color) {\n for(var scheme in space2parser) {\n if(color.indexOf(scheme) === 0) {\n return space2parser[scheme](color);\n }\n }\n}\n\nparse.rgb = rgb;\nparse.hsl = hsl;\nparse.hex = hex;\n\nmodule.exports = parse;","var extractComponents = require(\"./extractComponents\");\nvar clamp = require(\"../util/clamp\");\n\nfunction parseRgbComponent(component, i) {\n if (i < 3) {\n if (component.indexOf('%') != -1) {\n return Math.round(255 * clamp(parseInt(component, 10), 0, 100)/100);\n } else {\n return clamp(parseInt(component, 10), 0, 255);\n }\n } else {\n return clamp(parseFloat(component), 0, 1);\n } \n}\n\nfunction rgb(color) {\n return extractComponents(color).map(parseRgbComponent);\n}\n\nmodule.exports = rgb;","function clamp(val, min, max) {\n return Math.min(Math.max(val, min), max);\n}\n\nmodule.exports = clamp;","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return map(objectKeys(obj), function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (isArray(obj[k])) {\n return map(obj[k], function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map (xs, f) {\n if (xs.map) return xs.map(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n res.push(f(xs[i], i));\n }\n return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n var res = [];\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n }\n return res;\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n module.exports = randomBytes\n} else {\n module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n // phantomjs needs to throw\n if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n var bytes = Buffer.allocUnsafe(size)\n\n if (size > 0) { // getRandomValues fails on IE if size == 0\n if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n for (var generated = 0; generated < size; generated += MAX_BYTES) {\n // buffer.slice automatically checks if the end is past the end of\n // the buffer so we don't have to here\n crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n }\n } else {\n crypto.getRandomValues(bytes)\n }\n }\n\n if (typeof cb === 'function') {\n return process.nextTick(function () {\n cb(null, bytes)\n })\n }\n\n return bytes\n}\n","'use strict'\n\nfunction oldBrowser () {\n throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\nvar safeBuffer = require('safe-buffer')\nvar randombytes = require('randombytes')\nvar Buffer = safeBuffer.Buffer\nvar kBufferMaxLength = safeBuffer.kMaxLength\nvar crypto = global.crypto || global.msCrypto\nvar kMaxUint32 = Math.pow(2, 32) - 1\nfunction assertOffset (offset, length) {\n if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare\n throw new TypeError('offset must be a number')\n }\n\n if (offset > kMaxUint32 || offset < 0) {\n throw new TypeError('offset must be a uint32')\n }\n\n if (offset > kBufferMaxLength || offset > length) {\n throw new RangeError('offset out of range')\n }\n}\n\nfunction assertSize (size, offset, length) {\n if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare\n throw new TypeError('size must be a number')\n }\n\n if (size > kMaxUint32 || size < 0) {\n throw new TypeError('size must be a uint32')\n }\n\n if (size + offset > length || size > kBufferMaxLength) {\n throw new RangeError('buffer too small')\n }\n}\nif ((crypto && crypto.getRandomValues) || !process.browser) {\n exports.randomFill = randomFill\n exports.randomFillSync = randomFillSync\n} else {\n exports.randomFill = oldBrowser\n exports.randomFillSync = oldBrowser\n}\nfunction randomFill (buf, offset, size, cb) {\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n if (typeof offset === 'function') {\n cb = offset\n offset = 0\n size = buf.length\n } else if (typeof size === 'function') {\n cb = size\n size = buf.length - offset\n } else if (typeof cb !== 'function') {\n throw new TypeError('\"cb\" argument must be a function')\n }\n assertOffset(offset, buf.length)\n assertSize(size, offset, buf.length)\n return actualFill(buf, offset, size, cb)\n}\n\nfunction actualFill (buf, offset, size, cb) {\n if (process.browser) {\n var ourBuf = buf.buffer\n var uint = new Uint8Array(ourBuf, offset, size)\n crypto.getRandomValues(uint)\n if (cb) {\n process.nextTick(function () {\n cb(null, buf)\n })\n return\n }\n return buf\n }\n if (cb) {\n randombytes(size, function (err, bytes) {\n if (err) {\n return cb(err)\n }\n bytes.copy(buf, offset)\n cb(null, buf)\n })\n return\n }\n var bytes = randombytes(size)\n bytes.copy(buf, offset)\n return buf\n}\nfunction randomFillSync (buf, offset, size) {\n if (typeof offset === 'undefined') {\n offset = 0\n }\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n assertOffset(offset, buf.length)\n\n if (size === undefined) size = buf.length - offset\n\n assertSize(size, offset, buf.length)\n\n return actualFill(buf, offset, size)\n}\n","import _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport { alignElement, alignPoint } from 'dom-align';\nimport addEventListener from 'rc-util/es/Dom/addEventListener';\n\nimport { isWindow, buffer, isSamePoint, isSimilarValue, restoreFocus } from './util';\n\nfunction getElement(func) {\n if (typeof func !== 'function' || !func) return null;\n return func();\n}\n\nfunction getPoint(point) {\n if (typeof point !== 'object' || !point) return null;\n return point;\n}\n\nvar Align = function (_Component) {\n _inherits(Align, _Component);\n\n function Align() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Align);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Align.__proto__ || Object.getPrototypeOf(Align)).call.apply(_ref, [this].concat(args))), _this), _this.forceAlign = function () {\n var _this$props = _this.props,\n disabled = _this$props.disabled,\n target = _this$props.target,\n align = _this$props.align,\n onAlign = _this$props.onAlign;\n\n if (!disabled && target) {\n var source = ReactDOM.findDOMNode(_this);\n\n var result = void 0;\n var element = getElement(target);\n var point = getPoint(target);\n\n // IE lose focus after element realign\n // We should record activeElement and restore later\n var activeElement = document.activeElement;\n\n if (element) {\n result = alignElement(source, element, align);\n } else if (point) {\n result = alignPoint(source, point, align);\n }\n\n restoreFocus(activeElement, source);\n\n if (onAlign) {\n onAlign(source, result);\n }\n }\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Align, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n var props = this.props;\n // if parent ref not attached .... use document.getElementById\n this.forceAlign();\n if (!props.disabled && props.monitorWindowResize) {\n this.startMonitorWindowResize();\n }\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate(prevProps) {\n var reAlign = false;\n var props = this.props;\n\n if (!props.disabled) {\n var source = ReactDOM.findDOMNode(this);\n var sourceRect = source ? source.getBoundingClientRect() : null;\n\n if (prevProps.disabled) {\n reAlign = true;\n } else {\n var lastElement = getElement(prevProps.target);\n var currentElement = getElement(props.target);\n var lastPoint = getPoint(prevProps.target);\n var currentPoint = getPoint(props.target);\n\n if (isWindow(lastElement) && isWindow(currentElement)) {\n // Skip if is window\n reAlign = false;\n } else if (lastElement !== currentElement || // Element change\n lastElement && !currentElement && currentPoint || // Change from element to point\n lastPoint && currentPoint && currentElement || // Change from point to element\n currentPoint && !isSamePoint(lastPoint, currentPoint)) {\n reAlign = true;\n }\n\n // If source element size changed\n var preRect = this.sourceRect || {};\n if (!reAlign && source && (!isSimilarValue(preRect.width, sourceRect.width) || !isSimilarValue(preRect.height, sourceRect.height))) {\n reAlign = true;\n }\n }\n\n this.sourceRect = sourceRect;\n }\n\n if (reAlign) {\n this.forceAlign();\n }\n\n if (props.monitorWindowResize && !props.disabled) {\n this.startMonitorWindowResize();\n } else {\n this.stopMonitorWindowResize();\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.stopMonitorWindowResize();\n }\n }, {\n key: 'startMonitorWindowResize',\n value: function startMonitorWindowResize() {\n if (!this.resizeHandler) {\n this.bufferMonitor = buffer(this.forceAlign, this.props.monitorBufferTime);\n this.resizeHandler = addEventListener(window, 'resize', this.bufferMonitor);\n }\n }\n }, {\n key: 'stopMonitorWindowResize',\n value: function stopMonitorWindowResize() {\n if (this.resizeHandler) {\n this.bufferMonitor.clear();\n this.resizeHandler.remove();\n this.resizeHandler = null;\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _this2 = this;\n\n var _props = this.props,\n childrenProps = _props.childrenProps,\n children = _props.children;\n\n var child = React.Children.only(children);\n if (childrenProps) {\n var newProps = {};\n var propList = Object.keys(childrenProps);\n propList.forEach(function (prop) {\n newProps[prop] = _this2.props[childrenProps[prop]];\n });\n\n return React.cloneElement(child, newProps);\n }\n return child;\n }\n }]);\n\n return Align;\n}(Component);\n\nAlign.propTypes = {\n childrenProps: PropTypes.object,\n align: PropTypes.object.isRequired,\n target: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({\n clientX: PropTypes.number,\n clientY: PropTypes.number,\n pageX: PropTypes.number,\n pageY: PropTypes.number\n })]),\n onAlign: PropTypes.func,\n monitorBufferTime: PropTypes.number,\n monitorWindowResize: PropTypes.bool,\n disabled: PropTypes.bool,\n children: PropTypes.any\n};\nAlign.defaultProps = {\n target: function target() {\n return window;\n },\n monitorBufferTime: 50,\n monitorWindowResize: false,\n disabled: false\n};\n\n\nexport default Align;","// export this package's api\nimport Align from './Align';\n\nexport default Align;","import contains from 'rc-util/es/Dom/contains';\n\nexport function buffer(fn, ms) {\n var timer = void 0;\n\n function clear() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n }\n\n function bufferFn() {\n clear();\n timer = setTimeout(fn, ms);\n }\n\n bufferFn.clear = clear;\n\n return bufferFn;\n}\n\nexport function isSamePoint(prev, next) {\n if (prev === next) return true;\n if (!prev || !next) return false;\n\n if ('pageX' in next && 'pageY' in next) {\n return prev.pageX === next.pageX && prev.pageY === next.pageY;\n }\n\n if ('clientX' in next && 'clientY' in next) {\n return prev.clientX === next.clientX && prev.clientY === next.clientY;\n }\n\n return false;\n}\n\nexport function isWindow(obj) {\n return obj && typeof obj === 'object' && obj.window === obj;\n}\n\nexport function isSimilarValue(val1, val2) {\n var int1 = Math.floor(val1);\n var int2 = Math.floor(val2);\n return Math.abs(int1 - int2) <= 1;\n}\n\nexport function restoreFocus(activeElement, container) {\n // Focus back if is in the container\n if (activeElement !== document.activeElement && contains(container, activeElement)) {\n activeElement.focus();\n }\n}","import _extends from 'babel-runtime/helpers/extends';\nimport _defineProperty from 'babel-runtime/helpers/defineProperty';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport unsafeLifecyclesPolyfill from 'rc-util/es/unsafeLifecyclesPolyfill';\nimport { toArrayChildren, mergeChildren, findShownChildInChildrenByKey, findChildInChildrenByKey, isSameChildren } from './ChildrenUtils';\nimport AnimateChild from './AnimateChild';\nimport animUtil from './util/animate';\n\nvar defaultKey = 'rc_animate_' + Date.now();\n\nfunction getChildrenFromProps(props) {\n var children = props.children;\n if (React.isValidElement(children)) {\n if (!children.key) {\n return React.cloneElement(children, {\n key: defaultKey\n });\n }\n }\n return children;\n}\n\nfunction noop() {}\n\nvar Animate = function (_React$Component) {\n _inherits(Animate, _React$Component);\n\n // eslint-disable-line\n\n function Animate(props) {\n _classCallCheck(this, Animate);\n\n var _this = _possibleConstructorReturn(this, (Animate.__proto__ || Object.getPrototypeOf(Animate)).call(this, props));\n\n _initialiseProps.call(_this);\n\n _this.currentlyAnimatingKeys = {};\n _this.keysToEnter = [];\n _this.keysToLeave = [];\n\n _this.state = {\n children: toArrayChildren(getChildrenFromProps(props))\n };\n\n _this.childrenRefs = {};\n return _this;\n }\n\n _createClass(Animate, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n var _this2 = this;\n\n var showProp = this.props.showProp;\n var children = this.state.children;\n if (showProp) {\n children = children.filter(function (child) {\n return !!child.props[showProp];\n });\n }\n children.forEach(function (child) {\n if (child) {\n _this2.performAppear(child.key);\n }\n });\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n var _this3 = this;\n\n this.nextProps = nextProps;\n var nextChildren = toArrayChildren(getChildrenFromProps(nextProps));\n var props = this.props;\n // exclusive needs immediate response\n if (props.exclusive) {\n Object.keys(this.currentlyAnimatingKeys).forEach(function (key) {\n _this3.stop(key);\n });\n }\n var showProp = props.showProp;\n var currentlyAnimatingKeys = this.currentlyAnimatingKeys;\n // last props children if exclusive\n var currentChildren = props.exclusive ? toArrayChildren(getChildrenFromProps(props)) : this.state.children;\n // in case destroy in showProp mode\n var newChildren = [];\n if (showProp) {\n currentChildren.forEach(function (currentChild) {\n var nextChild = currentChild && findChildInChildrenByKey(nextChildren, currentChild.key);\n var newChild = void 0;\n if ((!nextChild || !nextChild.props[showProp]) && currentChild.props[showProp]) {\n newChild = React.cloneElement(nextChild || currentChild, _defineProperty({}, showProp, true));\n } else {\n newChild = nextChild;\n }\n if (newChild) {\n newChildren.push(newChild);\n }\n });\n nextChildren.forEach(function (nextChild) {\n if (!nextChild || !findChildInChildrenByKey(currentChildren, nextChild.key)) {\n newChildren.push(nextChild);\n }\n });\n } else {\n newChildren = mergeChildren(currentChildren, nextChildren);\n }\n\n // need render to avoid update\n this.setState({\n children: newChildren\n });\n\n nextChildren.forEach(function (child) {\n var key = child && child.key;\n if (child && currentlyAnimatingKeys[key]) {\n return;\n }\n var hasPrev = child && findChildInChildrenByKey(currentChildren, key);\n if (showProp) {\n var showInNext = child.props[showProp];\n if (hasPrev) {\n var showInNow = findShownChildInChildrenByKey(currentChildren, key, showProp);\n if (!showInNow && showInNext) {\n _this3.keysToEnter.push(key);\n }\n } else if (showInNext) {\n _this3.keysToEnter.push(key);\n }\n } else if (!hasPrev) {\n _this3.keysToEnter.push(key);\n }\n });\n\n currentChildren.forEach(function (child) {\n var key = child && child.key;\n if (child && currentlyAnimatingKeys[key]) {\n return;\n }\n var hasNext = child && findChildInChildrenByKey(nextChildren, key);\n if (showProp) {\n var showInNow = child.props[showProp];\n if (hasNext) {\n var showInNext = findShownChildInChildrenByKey(nextChildren, key, showProp);\n if (!showInNext && showInNow) {\n _this3.keysToLeave.push(key);\n }\n } else if (showInNow) {\n _this3.keysToLeave.push(key);\n }\n } else if (!hasNext) {\n _this3.keysToLeave.push(key);\n }\n });\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate() {\n var keysToEnter = this.keysToEnter;\n this.keysToEnter = [];\n keysToEnter.forEach(this.performEnter);\n var keysToLeave = this.keysToLeave;\n this.keysToLeave = [];\n keysToLeave.forEach(this.performLeave);\n }\n }, {\n key: 'isValidChildByKey',\n value: function isValidChildByKey(currentChildren, key) {\n var showProp = this.props.showProp;\n if (showProp) {\n return findShownChildInChildrenByKey(currentChildren, key, showProp);\n }\n return findChildInChildrenByKey(currentChildren, key);\n }\n }, {\n key: 'stop',\n value: function stop(key) {\n delete this.currentlyAnimatingKeys[key];\n var component = this.childrenRefs[key];\n if (component) {\n component.stop();\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _this4 = this;\n\n var props = this.props;\n this.nextProps = props;\n var stateChildren = this.state.children;\n var children = null;\n if (stateChildren) {\n children = stateChildren.map(function (child) {\n if (child === null || child === undefined) {\n return child;\n }\n if (!child.key) {\n throw new Error('must set key for children');\n }\n return React.createElement(\n AnimateChild,\n {\n key: child.key,\n ref: function ref(node) {\n _this4.childrenRefs[child.key] = node;\n },\n animation: props.animation,\n transitionName: props.transitionName,\n transitionEnter: props.transitionEnter,\n transitionAppear: props.transitionAppear,\n transitionLeave: props.transitionLeave\n },\n child\n );\n });\n }\n var Component = props.component;\n if (Component) {\n var passedProps = props;\n if (typeof Component === 'string') {\n passedProps = _extends({\n className: props.className,\n style: props.style\n }, props.componentProps);\n }\n return React.createElement(\n Component,\n passedProps,\n children\n );\n }\n return children[0] || null;\n }\n }]);\n\n return Animate;\n}(React.Component);\n\nAnimate.isAnimate = true;\nAnimate.propTypes = {\n className: PropTypes.string,\n style: PropTypes.object,\n component: PropTypes.any,\n componentProps: PropTypes.object,\n animation: PropTypes.object,\n transitionName: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n transitionEnter: PropTypes.bool,\n transitionAppear: PropTypes.bool,\n exclusive: PropTypes.bool,\n transitionLeave: PropTypes.bool,\n onEnd: PropTypes.func,\n onEnter: PropTypes.func,\n onLeave: PropTypes.func,\n onAppear: PropTypes.func,\n showProp: PropTypes.string,\n children: PropTypes.node\n};\nAnimate.defaultProps = {\n animation: {},\n component: 'span',\n componentProps: {},\n transitionEnter: true,\n transitionLeave: true,\n transitionAppear: false,\n onEnd: noop,\n onEnter: noop,\n onLeave: noop,\n onAppear: noop\n};\n\nvar _initialiseProps = function _initialiseProps() {\n var _this5 = this;\n\n this.performEnter = function (key) {\n // may already remove by exclusive\n if (_this5.childrenRefs[key]) {\n _this5.currentlyAnimatingKeys[key] = true;\n _this5.childrenRefs[key].componentWillEnter(_this5.handleDoneAdding.bind(_this5, key, 'enter'));\n }\n };\n\n this.performAppear = function (key) {\n if (_this5.childrenRefs[key]) {\n _this5.currentlyAnimatingKeys[key] = true;\n _this5.childrenRefs[key].componentWillAppear(_this5.handleDoneAdding.bind(_this5, key, 'appear'));\n }\n };\n\n this.handleDoneAdding = function (key, type) {\n var props = _this5.props;\n delete _this5.currentlyAnimatingKeys[key];\n // if update on exclusive mode, skip check\n if (props.exclusive && props !== _this5.nextProps) {\n return;\n }\n var currentChildren = toArrayChildren(getChildrenFromProps(props));\n if (!_this5.isValidChildByKey(currentChildren, key)) {\n // exclusive will not need this\n _this5.performLeave(key);\n } else if (type === 'appear') {\n if (animUtil.allowAppearCallback(props)) {\n props.onAppear(key);\n props.onEnd(key, true);\n }\n } else if (animUtil.allowEnterCallback(props)) {\n props.onEnter(key);\n props.onEnd(key, true);\n }\n };\n\n this.performLeave = function (key) {\n // may already remove by exclusive\n if (_this5.childrenRefs[key]) {\n _this5.currentlyAnimatingKeys[key] = true;\n _this5.childrenRefs[key].componentWillLeave(_this5.handleDoneLeaving.bind(_this5, key));\n }\n };\n\n this.handleDoneLeaving = function (key) {\n var props = _this5.props;\n delete _this5.currentlyAnimatingKeys[key];\n // if update on exclusive mode, skip check\n if (props.exclusive && props !== _this5.nextProps) {\n return;\n }\n var currentChildren = toArrayChildren(getChildrenFromProps(props));\n // in case state change is too fast\n if (_this5.isValidChildByKey(currentChildren, key)) {\n _this5.performEnter(key);\n } else {\n var end = function end() {\n if (animUtil.allowLeaveCallback(props)) {\n props.onLeave(key);\n props.onEnd(key, false);\n }\n };\n if (!isSameChildren(_this5.state.children, currentChildren, props.showProp)) {\n _this5.setState({\n children: currentChildren\n }, end);\n } else {\n end();\n }\n }\n };\n};\n\nexport default unsafeLifecyclesPolyfill(Animate);","import _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport cssAnimate, { isCssAnimationSupported } from 'css-animation';\nimport animUtil from './util/animate';\n\nvar transitionMap = {\n enter: 'transitionEnter',\n appear: 'transitionAppear',\n leave: 'transitionLeave'\n};\n\nvar AnimateChild = function (_React$Component) {\n _inherits(AnimateChild, _React$Component);\n\n function AnimateChild() {\n _classCallCheck(this, AnimateChild);\n\n return _possibleConstructorReturn(this, (AnimateChild.__proto__ || Object.getPrototypeOf(AnimateChild)).apply(this, arguments));\n }\n\n _createClass(AnimateChild, [{\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.stop();\n }\n }, {\n key: 'componentWillEnter',\n value: function componentWillEnter(done) {\n if (animUtil.isEnterSupported(this.props)) {\n this.transition('enter', done);\n } else {\n done();\n }\n }\n }, {\n key: 'componentWillAppear',\n value: function componentWillAppear(done) {\n if (animUtil.isAppearSupported(this.props)) {\n this.transition('appear', done);\n } else {\n done();\n }\n }\n }, {\n key: 'componentWillLeave',\n value: function componentWillLeave(done) {\n if (animUtil.isLeaveSupported(this.props)) {\n this.transition('leave', done);\n } else {\n // always sync, do not interupt with react component life cycle\n // update hidden -> animate hidden ->\n // didUpdate -> animate leave -> unmount (if animate is none)\n done();\n }\n }\n }, {\n key: 'transition',\n value: function transition(animationType, finishCallback) {\n var _this2 = this;\n\n var node = ReactDOM.findDOMNode(this);\n var props = this.props;\n var transitionName = props.transitionName;\n var nameIsObj = typeof transitionName === 'object';\n this.stop();\n var end = function end() {\n _this2.stopper = null;\n finishCallback();\n };\n if ((isCssAnimationSupported || !props.animation[animationType]) && transitionName && props[transitionMap[animationType]]) {\n var name = nameIsObj ? transitionName[animationType] : transitionName + '-' + animationType;\n var activeName = name + '-active';\n if (nameIsObj && transitionName[animationType + 'Active']) {\n activeName = transitionName[animationType + 'Active'];\n }\n this.stopper = cssAnimate(node, {\n name: name,\n active: activeName\n }, end);\n } else {\n this.stopper = props.animation[animationType](node, end);\n }\n }\n }, {\n key: 'stop',\n value: function stop() {\n var stopper = this.stopper;\n if (stopper) {\n this.stopper = null;\n stopper.stop();\n }\n }\n }, {\n key: 'render',\n value: function render() {\n return this.props.children;\n }\n }]);\n\n return AnimateChild;\n}(React.Component);\n\nAnimateChild.propTypes = {\n children: PropTypes.any,\n animation: PropTypes.any,\n transitionName: PropTypes.any\n};\nexport default AnimateChild;","import React from 'react';\n\nexport function toArrayChildren(children) {\n var ret = [];\n React.Children.forEach(children, function (child) {\n ret.push(child);\n });\n return ret;\n}\n\nexport function findChildInChildrenByKey(children, key) {\n var ret = null;\n if (children) {\n children.forEach(function (child) {\n if (ret) {\n return;\n }\n if (child && child.key === key) {\n ret = child;\n }\n });\n }\n return ret;\n}\n\nexport function findShownChildInChildrenByKey(children, key, showProp) {\n var ret = null;\n if (children) {\n children.forEach(function (child) {\n if (child && child.key === key && child.props[showProp]) {\n if (ret) {\n throw new Error('two child with same key for children');\n }\n ret = child;\n }\n });\n }\n return ret;\n}\n\nexport function findHiddenChildInChildrenByKey(children, key, showProp) {\n var found = 0;\n if (children) {\n children.forEach(function (child) {\n if (found) {\n return;\n }\n found = child && child.key === key && !child.props[showProp];\n });\n }\n return found;\n}\n\nexport function isSameChildren(c1, c2, showProp) {\n var same = c1.length === c2.length;\n if (same) {\n c1.forEach(function (child, index) {\n var child2 = c2[index];\n if (child && child2) {\n if (child && !child2 || !child && child2) {\n same = false;\n } else if (child.key !== child2.key) {\n same = false;\n } else if (showProp && child.props[showProp] !== child2.props[showProp]) {\n same = false;\n }\n }\n });\n }\n return same;\n}\n\nexport function mergeChildren(prev, next) {\n var ret = [];\n\n // For each key of `next`, the list of keys to insert before that key in\n // the combined list\n var nextChildrenPending = {};\n var pendingChildren = [];\n prev.forEach(function (child) {\n if (child && findChildInChildrenByKey(next, child.key)) {\n if (pendingChildren.length) {\n nextChildrenPending[child.key] = pendingChildren;\n pendingChildren = [];\n }\n } else {\n pendingChildren.push(child);\n }\n });\n\n next.forEach(function (child) {\n if (child && Object.prototype.hasOwnProperty.call(nextChildrenPending, child.key)) {\n ret = ret.concat(nextChildrenPending[child.key]);\n }\n ret.push(child);\n });\n\n ret = ret.concat(pendingChildren);\n\n return ret;\n}","var util = {\n isAppearSupported: function isAppearSupported(props) {\n return props.transitionName && props.transitionAppear || props.animation.appear;\n },\n isEnterSupported: function isEnterSupported(props) {\n return props.transitionName && props.transitionEnter || props.animation.enter;\n },\n isLeaveSupported: function isLeaveSupported(props) {\n return props.transitionName && props.transitionLeave || props.animation.leave;\n },\n allowAppearCallback: function allowAppearCallback(props) {\n return props.transitionAppear || props.animation.appear;\n },\n allowEnterCallback: function allowEnterCallback(props) {\n return props.transitionEnter || props.animation.enter;\n },\n allowLeaveCallback: function allowLeaveCallback(props) {\n return props.transitionLeave || props.animation.leave;\n }\n};\nexport default util;","import _extends from 'babel-runtime/helpers/extends';\nimport _defineProperty from 'babel-runtime/helpers/defineProperty';\nimport _objectWithoutProperties from 'babel-runtime/helpers/objectWithoutProperties';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport addEventListener from 'rc-util/es/Dom/addEventListener';\n\nvar Handle = function (_React$Component) {\n _inherits(Handle, _React$Component);\n\n function Handle() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Handle);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Handle.__proto__ || Object.getPrototypeOf(Handle)).call.apply(_ref, [this].concat(args))), _this), _this.state = {\n clickFocused: false\n }, _this.setHandleRef = function (node) {\n _this.handle = node;\n }, _this.handleMouseUp = function () {\n if (document.activeElement === _this.handle) {\n _this.setClickFocus(true);\n }\n }, _this.handleMouseDown = function () {\n // fix https://github.com/ant-design/ant-design/issues/15324\n _this.focus();\n }, _this.handleBlur = function () {\n _this.setClickFocus(false);\n }, _this.handleKeyDown = function () {\n _this.setClickFocus(false);\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Handle, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n // mouseup won't trigger if mouse moved out of handle,\n // so we listen on document here.\n this.onMouseUpListener = addEventListener(document, 'mouseup', this.handleMouseUp);\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n if (this.onMouseUpListener) {\n this.onMouseUpListener.remove();\n }\n }\n }, {\n key: 'setClickFocus',\n value: function setClickFocus(focused) {\n this.setState({ clickFocused: focused });\n }\n }, {\n key: 'clickFocus',\n value: function clickFocus() {\n this.setClickFocus(true);\n this.focus();\n }\n }, {\n key: 'focus',\n value: function focus() {\n this.handle.focus();\n }\n }, {\n key: 'blur',\n value: function blur() {\n this.handle.blur();\n }\n }, {\n key: 'render',\n value: function render() {\n var _ref2, _ref3;\n\n var _props = this.props,\n prefixCls = _props.prefixCls,\n vertical = _props.vertical,\n reverse = _props.reverse,\n offset = _props.offset,\n style = _props.style,\n disabled = _props.disabled,\n min = _props.min,\n max = _props.max,\n value = _props.value,\n tabIndex = _props.tabIndex,\n restProps = _objectWithoutProperties(_props, ['prefixCls', 'vertical', 'reverse', 'offset', 'style', 'disabled', 'min', 'max', 'value', 'tabIndex']);\n\n var className = classNames(this.props.className, _defineProperty({}, prefixCls + '-handle-click-focused', this.state.clickFocused));\n var positionStyle = vertical ? (_ref2 = {}, _defineProperty(_ref2, reverse ? 'top' : 'bottom', offset + '%'), _defineProperty(_ref2, reverse ? 'bottom' : 'top', 'auto'), _defineProperty(_ref2, 'transform', 'translateY(+50%)'), _ref2) : (_ref3 = {}, _defineProperty(_ref3, reverse ? 'right' : 'left', offset + '%'), _defineProperty(_ref3, reverse ? 'left' : 'right', 'auto'), _defineProperty(_ref3, 'transform', 'translateX(' + (reverse ? '+' : '-') + '50%)'), _ref3);\n var elStyle = _extends({}, style, positionStyle);\n\n var _tabIndex = tabIndex || 0;\n if (disabled || tabIndex === null) {\n _tabIndex = null;\n }\n\n return React.createElement('div', _extends({\n ref: this.setHandleRef,\n tabIndex: _tabIndex\n }, restProps, {\n className: className,\n style: elStyle,\n onBlur: this.handleBlur,\n onKeyDown: this.handleKeyDown,\n onMouseDown: this.handleMouseDown\n\n // aria attribute\n , role: 'slider',\n 'aria-valuemin': min,\n 'aria-valuemax': max,\n 'aria-valuenow': value,\n 'aria-disabled': !!disabled\n }));\n }\n }]);\n\n return Handle;\n}(React.Component);\n\nexport default Handle;\n\n\nHandle.propTypes = {\n prefixCls: PropTypes.string,\n className: PropTypes.string,\n vertical: PropTypes.bool,\n offset: PropTypes.number,\n style: PropTypes.object,\n disabled: PropTypes.bool,\n min: PropTypes.number,\n max: PropTypes.number,\n value: PropTypes.number,\n tabIndex: PropTypes.number,\n reverse: PropTypes.bool\n};","import _defineProperty from 'babel-runtime/helpers/defineProperty';\nimport _extends from 'babel-runtime/helpers/extends';\nimport _toConsumableArray from 'babel-runtime/helpers/toConsumableArray';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\n/* eslint-disable react/prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { polyfill } from 'react-lifecycles-compat';\nimport shallowEqual from 'shallowequal';\nimport Track from './common/Track';\nimport createSlider from './common/createSlider';\nimport * as utils from './utils';\n\nvar _trimAlignValue = function _trimAlignValue(_ref) {\n var value = _ref.value,\n handle = _ref.handle,\n bounds = _ref.bounds,\n props = _ref.props;\n var allowCross = props.allowCross,\n pushable = props.pushable;\n\n var thershold = Number(pushable);\n var valInRange = utils.ensureValueInRange(value, props);\n var valNotConflict = valInRange;\n if (!allowCross && handle != null && bounds !== undefined) {\n if (handle > 0 && valInRange <= bounds[handle - 1] + thershold) {\n valNotConflict = bounds[handle - 1] + thershold;\n }\n if (handle < bounds.length - 1 && valInRange >= bounds[handle + 1] - thershold) {\n valNotConflict = bounds[handle + 1] - thershold;\n }\n }\n return utils.ensureValuePrecision(valNotConflict, props);\n};\n\nvar Range = function (_React$Component) {\n _inherits(Range, _React$Component);\n\n function Range(props) {\n _classCallCheck(this, Range);\n\n var _this = _possibleConstructorReturn(this, (Range.__proto__ || Object.getPrototypeOf(Range)).call(this, props));\n\n _this.onEnd = function (force) {\n var handle = _this.state.handle;\n\n _this.removeDocumentEvents();\n\n if (handle !== null || force) {\n _this.props.onAfterChange(_this.getValue());\n }\n\n _this.setState({\n handle: null\n });\n };\n\n var count = props.count,\n min = props.min,\n max = props.max;\n\n var initialValue = Array.apply(undefined, _toConsumableArray(Array(count + 1))).map(function () {\n return min;\n });\n var defaultValue = 'defaultValue' in props ? props.defaultValue : initialValue;\n var value = props.value !== undefined ? props.value : defaultValue;\n var bounds = value.map(function (v, i) {\n return _trimAlignValue({\n value: v,\n handle: i,\n props: props\n });\n });\n var recent = bounds[0] === max ? 0 : bounds.length - 1;\n\n _this.state = {\n handle: null,\n recent: recent,\n bounds: bounds\n };\n return _this;\n }\n\n _createClass(Range, [{\n key: 'componentDidUpdate',\n value: function componentDidUpdate(prevProps, prevState) {\n var _this2 = this;\n\n if (!('value' in this.props || 'min' in this.props || 'max' in this.props)) {\n return;\n }\n if (this.props.min === prevProps.min && this.props.max === prevProps.max && shallowEqual(this.props.value, prevProps.value)) {\n return;\n }\n var _props = this.props,\n onChange = _props.onChange,\n value = _props.value;\n\n var currentValue = value || prevState.bounds;\n if (currentValue.some(function (v) {\n return utils.isValueOutOfRange(v, _this2.props);\n })) {\n var newValues = currentValue.map(function (v) {\n return utils.ensureValueInRange(v, _this2.props);\n });\n onChange(newValues);\n }\n }\n }, {\n key: 'onChange',\n value: function onChange(state) {\n var props = this.props;\n var isNotControlled = !('value' in props);\n if (isNotControlled) {\n this.setState(state);\n } else {\n var controlledState = {};\n\n ['handle', 'recent'].forEach(function (item) {\n if (state[item] !== undefined) {\n controlledState[item] = state[item];\n }\n });\n\n if (Object.keys(controlledState).length) {\n this.setState(controlledState);\n }\n }\n\n var data = _extends({}, this.state, state);\n var changedValue = data.bounds;\n props.onChange(changedValue);\n }\n }, {\n key: 'onStart',\n value: function onStart(position) {\n var props = this.props;\n var state = this.state;\n var bounds = this.getValue();\n props.onBeforeChange(bounds);\n\n var value = this.calcValueByPos(position);\n this.startValue = value;\n this.startPosition = position;\n\n var closestBound = this.getClosestBound(value);\n this.prevMovedHandleIndex = this.getBoundNeedMoving(value, closestBound);\n\n this.setState({\n handle: this.prevMovedHandleIndex,\n recent: this.prevMovedHandleIndex\n });\n\n var prevValue = bounds[this.prevMovedHandleIndex];\n if (value === prevValue) return;\n\n var nextBounds = [].concat(_toConsumableArray(state.bounds));\n nextBounds[this.prevMovedHandleIndex] = value;\n this.onChange({ bounds: nextBounds });\n }\n }, {\n key: 'onMove',\n value: function onMove(e, position) {\n utils.pauseEvent(e);\n var state = this.state;\n\n var value = this.calcValueByPos(position);\n var oldValue = state.bounds[state.handle];\n if (value === oldValue) return;\n\n this.moveTo(value);\n }\n }, {\n key: 'onKeyboard',\n value: function onKeyboard(e) {\n var _props2 = this.props,\n reverse = _props2.reverse,\n vertical = _props2.vertical;\n\n var valueMutator = utils.getKeyboardValueMutator(e, vertical, reverse);\n\n if (valueMutator) {\n utils.pauseEvent(e);\n var state = this.state,\n props = this.props;\n var bounds = state.bounds,\n handle = state.handle;\n\n var oldValue = bounds[handle === null ? state.recent : handle];\n var mutatedValue = valueMutator(oldValue, props);\n var value = _trimAlignValue({\n value: mutatedValue,\n handle: handle,\n bounds: state.bounds,\n props: props\n });\n if (value === oldValue) return;\n var isFromKeyboardEvent = true;\n this.moveTo(value, isFromKeyboardEvent);\n }\n }\n }, {\n key: 'getValue',\n value: function getValue() {\n return this.state.bounds;\n }\n }, {\n key: 'getClosestBound',\n value: function getClosestBound(value) {\n var bounds = this.state.bounds;\n\n var closestBound = 0;\n for (var i = 1; i < bounds.length - 1; ++i) {\n if (value >= bounds[i]) {\n closestBound = i;\n }\n }\n if (Math.abs(bounds[closestBound + 1] - value) < Math.abs(bounds[closestBound] - value)) {\n closestBound += 1;\n }\n return closestBound;\n }\n }, {\n key: 'getBoundNeedMoving',\n value: function getBoundNeedMoving(value, closestBound) {\n var _state = this.state,\n bounds = _state.bounds,\n recent = _state.recent;\n\n var boundNeedMoving = closestBound;\n var isAtTheSamePoint = bounds[closestBound + 1] === bounds[closestBound];\n\n if (isAtTheSamePoint && bounds[recent] === bounds[closestBound]) {\n boundNeedMoving = recent;\n }\n\n if (isAtTheSamePoint && value !== bounds[closestBound + 1]) {\n boundNeedMoving = value < bounds[closestBound + 1] ? closestBound : closestBound + 1;\n }\n return boundNeedMoving;\n }\n }, {\n key: 'getLowerBound',\n value: function getLowerBound() {\n return this.state.bounds[0];\n }\n }, {\n key: 'getUpperBound',\n value: function getUpperBound() {\n var bounds = this.state.bounds;\n\n return bounds[bounds.length - 1];\n }\n\n /**\n * Returns an array of possible slider points, taking into account both\n * `marks` and `step`. The result is cached.\n */\n\n }, {\n key: 'getPoints',\n value: function getPoints() {\n var _props3 = this.props,\n marks = _props3.marks,\n step = _props3.step,\n min = _props3.min,\n max = _props3.max;\n\n var cache = this._getPointsCache;\n if (!cache || cache.marks !== marks || cache.step !== step) {\n var pointsObject = _extends({}, marks);\n if (step !== null) {\n for (var point = min; point <= max; point += step) {\n pointsObject[point] = point;\n }\n }\n var points = Object.keys(pointsObject).map(parseFloat);\n points.sort(function (a, b) {\n return a - b;\n });\n this._getPointsCache = { marks: marks, step: step, points: points };\n }\n return this._getPointsCache.points;\n }\n }, {\n key: 'moveTo',\n value: function moveTo(value, isFromKeyboardEvent) {\n var _this3 = this;\n\n var state = this.state,\n props = this.props;\n\n var nextBounds = [].concat(_toConsumableArray(state.bounds));\n var handle = state.handle === null ? state.recent : state.handle;\n nextBounds[handle] = value;\n var nextHandle = handle;\n if (props.pushable !== false) {\n this.pushSurroundingHandles(nextBounds, nextHandle);\n } else if (props.allowCross) {\n nextBounds.sort(function (a, b) {\n return a - b;\n });\n nextHandle = nextBounds.indexOf(value);\n }\n this.onChange({\n recent: nextHandle,\n handle: nextHandle,\n bounds: nextBounds\n });\n if (isFromKeyboardEvent) {\n // known problem: because setState is async,\n // so trigger focus will invoke handler's onEnd and another handler's onStart too early,\n // cause onBeforeChange and onAfterChange receive wrong value.\n // here use setState callback to hack,but not elegant\n this.props.onAfterChange(nextBounds);\n this.setState({}, function () {\n _this3.handlesRefs[nextHandle].focus();\n });\n this.onEnd();\n }\n }\n }, {\n key: 'pushSurroundingHandles',\n value: function pushSurroundingHandles(bounds, handle) {\n var value = bounds[handle];\n var threshold = this.props.pushable;\n\n threshold = Number(threshold);\n\n var direction = 0;\n if (bounds[handle + 1] - value < threshold) {\n direction = +1; // push to right\n }\n if (value - bounds[handle - 1] < threshold) {\n direction = -1; // push to left\n }\n\n if (direction === 0) {\n return;\n }\n\n var nextHandle = handle + direction;\n var diffToNext = direction * (bounds[nextHandle] - value);\n if (!this.pushHandle(bounds, nextHandle, direction, threshold - diffToNext)) {\n // revert to original value if pushing is impossible\n bounds[handle] = bounds[nextHandle] - direction * threshold;\n }\n }\n }, {\n key: 'pushHandle',\n value: function pushHandle(bounds, handle, direction, amount) {\n var originalValue = bounds[handle];\n var currentValue = bounds[handle];\n while (direction * (currentValue - originalValue) < amount) {\n if (!this.pushHandleOnePoint(bounds, handle, direction)) {\n // can't push handle enough to create the needed `amount` gap, so we\n // revert its position to the original value\n bounds[handle] = originalValue;\n return false;\n }\n currentValue = bounds[handle];\n }\n // the handle was pushed enough to create the needed `amount` gap\n return true;\n }\n }, {\n key: 'pushHandleOnePoint',\n value: function pushHandleOnePoint(bounds, handle, direction) {\n var points = this.getPoints();\n var pointIndex = points.indexOf(bounds[handle]);\n var nextPointIndex = pointIndex + direction;\n if (nextPointIndex >= points.length || nextPointIndex < 0) {\n // reached the minimum or maximum available point, can't push anymore\n return false;\n }\n var nextHandle = handle + direction;\n var nextValue = points[nextPointIndex];\n var threshold = this.props.pushable;\n\n var diffToNext = direction * (bounds[nextHandle] - nextValue);\n if (!this.pushHandle(bounds, nextHandle, direction, threshold - diffToNext)) {\n // couldn't push next handle, so we won't push this one either\n return false;\n }\n // push the handle\n bounds[handle] = nextValue;\n return true;\n }\n }, {\n key: 'trimAlignValue',\n value: function trimAlignValue(value) {\n var _state2 = this.state,\n handle = _state2.handle,\n bounds = _state2.bounds;\n\n return _trimAlignValue({\n value: value,\n handle: handle,\n bounds: bounds,\n props: this.props\n });\n }\n }, {\n key: 'render',\n value: function render() {\n var _this4 = this;\n\n var _state3 = this.state,\n handle = _state3.handle,\n bounds = _state3.bounds;\n var _props4 = this.props,\n prefixCls = _props4.prefixCls,\n vertical = _props4.vertical,\n included = _props4.included,\n disabled = _props4.disabled,\n min = _props4.min,\n max = _props4.max,\n reverse = _props4.reverse,\n handleGenerator = _props4.handle,\n trackStyle = _props4.trackStyle,\n handleStyle = _props4.handleStyle,\n tabIndex = _props4.tabIndex;\n\n\n var offsets = bounds.map(function (v) {\n return _this4.calcOffset(v);\n });\n\n var handleClassName = prefixCls + '-handle';\n var handles = bounds.map(function (v, i) {\n var _classNames;\n\n var _tabIndex = tabIndex[i] || 0;\n if (disabled || tabIndex[i] === null) {\n _tabIndex = null;\n }\n return handleGenerator({\n className: classNames((_classNames = {}, _defineProperty(_classNames, handleClassName, true), _defineProperty(_classNames, handleClassName + '-' + (i + 1), true), _classNames)),\n prefixCls: prefixCls,\n vertical: vertical,\n offset: offsets[i],\n value: v,\n dragging: handle === i,\n index: i,\n tabIndex: _tabIndex,\n min: min,\n max: max,\n reverse: reverse,\n disabled: disabled,\n style: handleStyle[i],\n ref: function ref(h) {\n return _this4.saveHandle(i, h);\n }\n });\n });\n\n var tracks = bounds.slice(0, -1).map(function (_, index) {\n var _classNames2;\n\n var i = index + 1;\n var trackClassName = classNames((_classNames2 = {}, _defineProperty(_classNames2, prefixCls + '-track', true), _defineProperty(_classNames2, prefixCls + '-track-' + i, true), _classNames2));\n return React.createElement(Track, {\n className: trackClassName,\n vertical: vertical,\n reverse: reverse,\n included: included,\n offset: offsets[i - 1],\n length: offsets[i] - offsets[i - 1],\n style: trackStyle[index],\n key: i\n });\n });\n\n return { tracks: tracks, handles: handles };\n }\n }], [{\n key: 'getDerivedStateFromProps',\n value: function getDerivedStateFromProps(props, state) {\n if ('value' in props || 'min' in props || 'max' in props) {\n var value = props.value || state.bounds;\n var nextBounds = value.map(function (v, i) {\n return _trimAlignValue({\n value: v,\n handle: i,\n bounds: state.bounds,\n props: props\n });\n });\n if (nextBounds.length === state.bounds.length && nextBounds.every(function (v, i) {\n return v === state.bounds[i];\n })) {\n return null;\n }\n return _extends({}, state, {\n bounds: nextBounds\n });\n }\n return null;\n }\n }]);\n\n return Range;\n}(React.Component);\n\nRange.displayName = 'Range';\nRange.propTypes = {\n autoFocus: PropTypes.bool,\n defaultValue: PropTypes.arrayOf(PropTypes.number),\n value: PropTypes.arrayOf(PropTypes.number),\n count: PropTypes.number,\n pushable: PropTypes.oneOfType([PropTypes.bool, PropTypes.number]),\n allowCross: PropTypes.bool,\n disabled: PropTypes.bool,\n reverse: PropTypes.bool,\n tabIndex: PropTypes.arrayOf(PropTypes.number),\n min: PropTypes.number,\n max: PropTypes.number\n};\nRange.defaultProps = {\n count: 1,\n allowCross: true,\n pushable: false,\n tabIndex: []\n};\n\n\npolyfill(Range);\n\nexport default createSlider(Range);","import _extends from 'babel-runtime/helpers/extends';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\n/* eslint-disable react/prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport warning from 'warning';\nimport Track from './common/Track';\nimport createSlider from './common/createSlider';\nimport * as utils from './utils';\n\nvar Slider = function (_React$Component) {\n _inherits(Slider, _React$Component);\n\n function Slider(props) {\n _classCallCheck(this, Slider);\n\n var _this = _possibleConstructorReturn(this, (Slider.__proto__ || Object.getPrototypeOf(Slider)).call(this, props));\n\n _this.onEnd = function (force) {\n var dragging = _this.state.dragging;\n\n _this.removeDocumentEvents();\n if (dragging || force) {\n _this.props.onAfterChange(_this.getValue());\n }\n _this.setState({ dragging: false });\n };\n\n var defaultValue = props.defaultValue !== undefined ? props.defaultValue : props.min;\n var value = props.value !== undefined ? props.value : defaultValue;\n\n _this.state = {\n value: _this.trimAlignValue(value),\n dragging: false\n };\n\n warning(!('minimumTrackStyle' in props), 'minimumTrackStyle will be deprecated, please use trackStyle instead.');\n warning(!('maximumTrackStyle' in props), 'maximumTrackStyle will be deprecated, please use railStyle instead.');\n return _this;\n }\n\n _createClass(Slider, [{\n key: 'componentDidUpdate',\n value: function componentDidUpdate(prevProps, prevState) {\n if (!('value' in this.props || 'min' in this.props || 'max' in this.props)) {\n return;\n }\n var _props = this.props,\n value = _props.value,\n onChange = _props.onChange;\n\n var theValue = value !== undefined ? value : prevState.value;\n var nextValue = this.trimAlignValue(theValue, this.props);\n if (nextValue !== prevState.value) {\n // eslint-disable-next-line\n this.setState({ value: nextValue });\n if (utils.isValueOutOfRange(theValue, this.props)) {\n onChange(nextValue);\n }\n }\n }\n }, {\n key: 'onChange',\n value: function onChange(state) {\n var props = this.props;\n var isNotControlled = !('value' in props);\n var nextState = state.value > this.props.max ? _extends({}, state, { value: this.props.max }) : state;\n if (isNotControlled) {\n this.setState(nextState);\n }\n\n var changedValue = nextState.value;\n props.onChange(changedValue);\n }\n }, {\n key: 'onStart',\n value: function onStart(position) {\n this.setState({ dragging: true });\n var props = this.props;\n var prevValue = this.getValue();\n props.onBeforeChange(prevValue);\n\n var value = this.calcValueByPos(position);\n this.startValue = value;\n this.startPosition = position;\n\n if (value === prevValue) return;\n\n this.prevMovedHandleIndex = 0;\n\n this.onChange({ value: value });\n }\n }, {\n key: 'onMove',\n value: function onMove(e, position) {\n utils.pauseEvent(e);\n var oldValue = this.state.value;\n\n var value = this.calcValueByPos(position);\n if (value === oldValue) return;\n\n this.onChange({ value: value });\n }\n }, {\n key: 'onKeyboard',\n value: function onKeyboard(e) {\n var _props2 = this.props,\n reverse = _props2.reverse,\n vertical = _props2.vertical;\n\n var valueMutator = utils.getKeyboardValueMutator(e, vertical, reverse);\n if (valueMutator) {\n utils.pauseEvent(e);\n var state = this.state;\n var oldValue = state.value;\n var mutatedValue = valueMutator(oldValue, this.props);\n var value = this.trimAlignValue(mutatedValue);\n if (value === oldValue) return;\n\n this.onChange({ value: value });\n this.props.onAfterChange(value);\n this.onEnd();\n }\n }\n }, {\n key: 'getValue',\n value: function getValue() {\n return this.state.value;\n }\n }, {\n key: 'getLowerBound',\n value: function getLowerBound() {\n return this.props.min;\n }\n }, {\n key: 'getUpperBound',\n value: function getUpperBound() {\n return this.state.value;\n }\n }, {\n key: 'trimAlignValue',\n value: function trimAlignValue(v) {\n var nextProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (v === null) {\n return null;\n }\n\n var mergedProps = _extends({}, this.props, nextProps);\n var val = utils.ensureValueInRange(v, mergedProps);\n return utils.ensureValuePrecision(val, mergedProps);\n }\n }, {\n key: 'render',\n value: function render() {\n var _this2 = this;\n\n var _props3 = this.props,\n prefixCls = _props3.prefixCls,\n vertical = _props3.vertical,\n included = _props3.included,\n disabled = _props3.disabled,\n minimumTrackStyle = _props3.minimumTrackStyle,\n trackStyle = _props3.trackStyle,\n handleStyle = _props3.handleStyle,\n tabIndex = _props3.tabIndex,\n min = _props3.min,\n max = _props3.max,\n reverse = _props3.reverse,\n handleGenerator = _props3.handle;\n var _state = this.state,\n value = _state.value,\n dragging = _state.dragging;\n\n var offset = this.calcOffset(value);\n var handle = handleGenerator({\n className: prefixCls + '-handle',\n prefixCls: prefixCls,\n vertical: vertical,\n offset: offset,\n value: value,\n dragging: dragging,\n disabled: disabled,\n min: min,\n max: max,\n reverse: reverse,\n index: 0,\n tabIndex: tabIndex,\n style: handleStyle[0] || handleStyle,\n ref: function ref(h) {\n return _this2.saveHandle(0, h);\n }\n });\n\n var _trackStyle = trackStyle[0] || trackStyle;\n var track = React.createElement(Track, {\n className: prefixCls + '-track',\n vertical: vertical,\n included: included,\n offset: 0,\n reverse: reverse,\n length: offset,\n style: _extends({}, minimumTrackStyle, _trackStyle)\n });\n\n return { tracks: track, handles: handle };\n }\n }]);\n\n return Slider;\n}(React.Component);\n\nSlider.propTypes = {\n defaultValue: PropTypes.number,\n value: PropTypes.number,\n disabled: PropTypes.bool,\n autoFocus: PropTypes.bool,\n tabIndex: PropTypes.number,\n reverse: PropTypes.bool,\n min: PropTypes.number,\n max: PropTypes.number\n};\n\n\nexport default createSlider(Slider);","import _extends from 'babel-runtime/helpers/extends';\nimport _defineProperty from 'babel-runtime/helpers/defineProperty';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nvar Marks = function Marks(_ref) {\n var className = _ref.className,\n vertical = _ref.vertical,\n reverse = _ref.reverse,\n marks = _ref.marks,\n included = _ref.included,\n upperBound = _ref.upperBound,\n lowerBound = _ref.lowerBound,\n max = _ref.max,\n min = _ref.min,\n onClickLabel = _ref.onClickLabel;\n\n var marksKeys = Object.keys(marks);\n\n var range = max - min;\n var elements = marksKeys.map(parseFloat).sort(function (a, b) {\n return a - b;\n }).map(function (point) {\n var _classNames;\n\n var markPoint = marks[point];\n var markPointIsObject = typeof markPoint === 'object' && !React.isValidElement(markPoint);\n var markLabel = markPointIsObject ? markPoint.label : markPoint;\n if (!markLabel && markLabel !== 0) {\n return null;\n }\n\n var isActive = !included && point === upperBound || included && point <= upperBound && point >= lowerBound;\n var markClassName = classNames((_classNames = {}, _defineProperty(_classNames, className + '-text', true), _defineProperty(_classNames, className + '-text-active', isActive), _classNames));\n\n var bottomStyle = _defineProperty({\n marginBottom: '-50%'\n }, reverse ? 'top' : 'bottom', (point - min) / range * 100 + '%');\n\n var leftStyle = _defineProperty({\n transform: 'translateX(-50%)',\n msTransform: 'translateX(-50%)'\n }, reverse ? 'right' : 'left', reverse ? (point - min / 4) / range * 100 + '%' : (point - min) / range * 100 + '%');\n\n var style = vertical ? bottomStyle : leftStyle;\n var markStyle = markPointIsObject ? _extends({}, style, markPoint.style) : style;\n return React.createElement(\n 'span',\n {\n className: markClassName,\n style: markStyle,\n key: point,\n onMouseDown: function onMouseDown(e) {\n return onClickLabel(e, point);\n },\n onTouchStart: function onTouchStart(e) {\n return onClickLabel(e, point);\n }\n },\n markLabel\n );\n });\n\n return React.createElement(\n 'div',\n { className: className },\n elements\n );\n};\n\nMarks.propTypes = {\n className: PropTypes.string,\n vertical: PropTypes.bool,\n reverse: PropTypes.bool,\n marks: PropTypes.object,\n included: PropTypes.bool,\n upperBound: PropTypes.number,\n lowerBound: PropTypes.number,\n max: PropTypes.number,\n min: PropTypes.number,\n onClickLabel: PropTypes.func\n};\n\nexport default Marks;","import _defineProperty from 'babel-runtime/helpers/defineProperty';\nimport _extends from 'babel-runtime/helpers/extends';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport warning from 'warning';\n\nvar calcPoints = function calcPoints(vertical, marks, dots, step, min, max) {\n warning(dots ? step > 0 : true, '`Slider[step]` should be a positive number in order to make Slider[dots] work.');\n var points = Object.keys(marks).map(parseFloat).sort(function (a, b) {\n return a - b;\n });\n if (dots && step) {\n for (var i = min; i <= max; i += step) {\n if (points.indexOf(i) === -1) {\n points.push(i);\n }\n }\n }\n return points;\n};\n\nvar Steps = function Steps(_ref) {\n var prefixCls = _ref.prefixCls,\n vertical = _ref.vertical,\n reverse = _ref.reverse,\n marks = _ref.marks,\n dots = _ref.dots,\n step = _ref.step,\n included = _ref.included,\n lowerBound = _ref.lowerBound,\n upperBound = _ref.upperBound,\n max = _ref.max,\n min = _ref.min,\n dotStyle = _ref.dotStyle,\n activeDotStyle = _ref.activeDotStyle;\n\n var range = max - min;\n var elements = calcPoints(vertical, marks, dots, step, min, max).map(function (point) {\n var _classNames;\n\n var offset = Math.abs(point - min) / range * 100 + '%';\n\n var isActived = !included && point === upperBound || included && point <= upperBound && point >= lowerBound;\n var style = vertical ? _extends({}, dotStyle, _defineProperty({}, reverse ? 'top' : 'bottom', offset)) : _extends({}, dotStyle, _defineProperty({}, reverse ? 'right' : 'left', offset));\n if (isActived) {\n style = _extends({}, style, activeDotStyle);\n }\n\n var pointClassName = classNames((_classNames = {}, _defineProperty(_classNames, prefixCls + '-dot', true), _defineProperty(_classNames, prefixCls + '-dot-active', isActived), _defineProperty(_classNames, prefixCls + '-dot-reverse', reverse), _classNames));\n\n return React.createElement('span', { className: pointClassName, style: style, key: point });\n });\n\n return React.createElement(\n 'div',\n { className: prefixCls + '-step' },\n elements\n );\n};\n\nSteps.propTypes = {\n prefixCls: PropTypes.string,\n activeDotStyle: PropTypes.object,\n dotStyle: PropTypes.object,\n min: PropTypes.number,\n max: PropTypes.number,\n upperBound: PropTypes.number,\n lowerBound: PropTypes.number,\n included: PropTypes.bool,\n dots: PropTypes.bool,\n step: PropTypes.number,\n marks: PropTypes.object,\n vertical: PropTypes.bool,\n reverse: PropTypes.bool\n};\n\nexport default Steps;","import _extends from 'babel-runtime/helpers/extends';\nimport _defineProperty from 'babel-runtime/helpers/defineProperty';\n/* eslint-disable react/prop-types */\nimport React from 'react';\n\nvar Track = function Track(props) {\n var _ref, _ref2;\n\n var className = props.className,\n included = props.included,\n vertical = props.vertical,\n offset = props.offset,\n length = props.length,\n style = props.style,\n reverse = props.reverse;\n\n var positonStyle = vertical ? (_ref = {}, _defineProperty(_ref, reverse ? 'top' : 'bottom', offset + '%'), _defineProperty(_ref, reverse ? 'bottom' : 'top', 'auto'), _defineProperty(_ref, 'height', length + '%'), _ref) : (_ref2 = {}, _defineProperty(_ref2, reverse ? 'right' : 'left', offset + '%'), _defineProperty(_ref2, reverse ? 'left' : 'right', 'auto'), _defineProperty(_ref2, 'width', length + '%'), _ref2);\n\n var elStyle = _extends({}, style, positonStyle);\n return included ? React.createElement('div', { className: className, style: elStyle }) : null;\n};\n\nexport default Track;","import _objectWithoutProperties from 'babel-runtime/helpers/objectWithoutProperties';\nimport _extends from 'babel-runtime/helpers/extends';\nimport _defineProperty from 'babel-runtime/helpers/defineProperty';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _get from 'babel-runtime/helpers/get';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport addEventListener from 'rc-util/es/Dom/addEventListener';\nimport classNames from 'classnames';\nimport warning from 'warning';\nimport Steps from './Steps';\nimport Marks from './Marks';\nimport Handle from '../Handle';\nimport * as utils from '../utils';\n\nfunction noop() {}\n\nexport default function createSlider(Component) {\n var _class, _temp;\n\n return _temp = _class = function (_Component) {\n _inherits(ComponentEnhancer, _Component);\n\n function ComponentEnhancer(props) {\n _classCallCheck(this, ComponentEnhancer);\n\n var _this = _possibleConstructorReturn(this, (ComponentEnhancer.__proto__ || Object.getPrototypeOf(ComponentEnhancer)).call(this, props));\n\n _this.onMouseDown = function (e) {\n if (e.button !== 0) {\n return;\n }\n\n var isVertical = _this.props.vertical;\n var position = utils.getMousePosition(isVertical, e);\n if (!utils.isEventFromHandle(e, _this.handlesRefs)) {\n _this.dragOffset = 0;\n } else {\n var handlePosition = utils.getHandleCenterPosition(isVertical, e.target);\n _this.dragOffset = position - handlePosition;\n position = handlePosition;\n }\n _this.removeDocumentEvents();\n _this.onStart(position);\n _this.addDocumentMouseEvents();\n };\n\n _this.onTouchStart = function (e) {\n if (utils.isNotTouchEvent(e)) return;\n\n var isVertical = _this.props.vertical;\n var position = utils.getTouchPosition(isVertical, e);\n if (!utils.isEventFromHandle(e, _this.handlesRefs)) {\n _this.dragOffset = 0;\n } else {\n var handlePosition = utils.getHandleCenterPosition(isVertical, e.target);\n _this.dragOffset = position - handlePosition;\n position = handlePosition;\n }\n _this.onStart(position);\n _this.addDocumentTouchEvents();\n utils.pauseEvent(e);\n };\n\n _this.onFocus = function (e) {\n var _this$props = _this.props,\n onFocus = _this$props.onFocus,\n vertical = _this$props.vertical;\n\n if (utils.isEventFromHandle(e, _this.handlesRefs)) {\n var handlePosition = utils.getHandleCenterPosition(vertical, e.target);\n _this.dragOffset = 0;\n _this.onStart(handlePosition);\n utils.pauseEvent(e);\n if (onFocus) {\n onFocus(e);\n }\n }\n };\n\n _this.onBlur = function (e) {\n var onBlur = _this.props.onBlur;\n\n _this.onEnd();\n if (onBlur) {\n onBlur(e);\n }\n };\n\n _this.onMouseUp = function () {\n if (_this.handlesRefs[_this.prevMovedHandleIndex]) {\n _this.handlesRefs[_this.prevMovedHandleIndex].clickFocus();\n }\n };\n\n _this.onMouseMove = function (e) {\n if (!_this.sliderRef) {\n _this.onEnd();\n return;\n }\n var position = utils.getMousePosition(_this.props.vertical, e);\n _this.onMove(e, position - _this.dragOffset);\n };\n\n _this.onTouchMove = function (e) {\n if (utils.isNotTouchEvent(e) || !_this.sliderRef) {\n _this.onEnd();\n return;\n }\n\n var position = utils.getTouchPosition(_this.props.vertical, e);\n _this.onMove(e, position - _this.dragOffset);\n };\n\n _this.onKeyDown = function (e) {\n if (_this.sliderRef && utils.isEventFromHandle(e, _this.handlesRefs)) {\n _this.onKeyboard(e);\n }\n };\n\n _this.onClickMarkLabel = function (e, value) {\n e.stopPropagation();\n _this.onChange({ value: value });\n _this.setState({ value: value }, function () {\n return _this.onEnd(true);\n });\n };\n\n _this.saveSlider = function (slider) {\n _this.sliderRef = slider;\n };\n\n var step = props.step,\n max = props.max,\n min = props.min;\n\n var isPointDiffEven = isFinite(max - min) ? (max - min) % step === 0 : true; // eslint-disable-line\n warning(step && Math.floor(step) === step ? isPointDiffEven : true, 'Slider[max] - Slider[min] (%s) should be a multiple of Slider[step] (%s)', max - min, step);\n _this.handlesRefs = {};\n return _this;\n }\n\n _createClass(ComponentEnhancer, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n // Snapshot testing cannot handle refs, so be sure to null-check this.\n this.document = this.sliderRef && this.sliderRef.ownerDocument;\n\n var _props = this.props,\n autoFocus = _props.autoFocus,\n disabled = _props.disabled;\n\n if (autoFocus && !disabled) {\n this.focus();\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n if (_get(ComponentEnhancer.prototype.__proto__ || Object.getPrototypeOf(ComponentEnhancer.prototype), 'componentWillUnmount', this)) _get(ComponentEnhancer.prototype.__proto__ || Object.getPrototypeOf(ComponentEnhancer.prototype), 'componentWillUnmount', this).call(this);\n this.removeDocumentEvents();\n }\n }, {\n key: 'getSliderStart',\n value: function getSliderStart() {\n var slider = this.sliderRef;\n var _props2 = this.props,\n vertical = _props2.vertical,\n reverse = _props2.reverse;\n\n var rect = slider.getBoundingClientRect();\n if (vertical) {\n return reverse ? rect.bottom : rect.top;\n }\n return window.pageXOffset + (reverse ? rect.right : rect.left);\n }\n }, {\n key: 'getSliderLength',\n value: function getSliderLength() {\n var slider = this.sliderRef;\n if (!slider) {\n return 0;\n }\n\n var coords = slider.getBoundingClientRect();\n return this.props.vertical ? coords.height : coords.width;\n }\n }, {\n key: 'addDocumentTouchEvents',\n value: function addDocumentTouchEvents() {\n // just work for Chrome iOS Safari and Android Browser\n this.onTouchMoveListener = addEventListener(this.document, 'touchmove', this.onTouchMove);\n this.onTouchUpListener = addEventListener(this.document, 'touchend', this.onEnd);\n }\n }, {\n key: 'addDocumentMouseEvents',\n value: function addDocumentMouseEvents() {\n this.onMouseMoveListener = addEventListener(this.document, 'mousemove', this.onMouseMove);\n this.onMouseUpListener = addEventListener(this.document, 'mouseup', this.onEnd);\n }\n }, {\n key: 'removeDocumentEvents',\n value: function removeDocumentEvents() {\n /* eslint-disable no-unused-expressions */\n this.onTouchMoveListener && this.onTouchMoveListener.remove();\n this.onTouchUpListener && this.onTouchUpListener.remove();\n\n this.onMouseMoveListener && this.onMouseMoveListener.remove();\n this.onMouseUpListener && this.onMouseUpListener.remove();\n /* eslint-enable no-unused-expressions */\n }\n }, {\n key: 'focus',\n value: function focus() {\n if (!this.props.disabled) {\n this.handlesRefs[0].focus();\n }\n }\n }, {\n key: 'blur',\n value: function blur() {\n var _this2 = this;\n\n if (!this.props.disabled) {\n Object.keys(this.handlesRefs).forEach(function (key) {\n if (_this2.handlesRefs[key] && _this2.handlesRefs[key].blur) {\n _this2.handlesRefs[key].blur();\n }\n });\n }\n }\n }, {\n key: 'calcValue',\n value: function calcValue(offset) {\n var _props3 = this.props,\n vertical = _props3.vertical,\n min = _props3.min,\n max = _props3.max;\n\n var ratio = Math.abs(Math.max(offset, 0) / this.getSliderLength());\n var value = vertical ? (1 - ratio) * (max - min) + min : ratio * (max - min) + min;\n return value;\n }\n }, {\n key: 'calcValueByPos',\n value: function calcValueByPos(position) {\n var sign = this.props.reverse ? -1 : +1;\n var pixelOffset = sign * (position - this.getSliderStart());\n var nextValue = this.trimAlignValue(this.calcValue(pixelOffset));\n return nextValue;\n }\n }, {\n key: 'calcOffset',\n value: function calcOffset(value) {\n var _props4 = this.props,\n min = _props4.min,\n max = _props4.max;\n\n var ratio = (value - min) / (max - min);\n return ratio * 100;\n }\n }, {\n key: 'saveHandle',\n value: function saveHandle(index, handle) {\n this.handlesRefs[index] = handle;\n }\n }, {\n key: 'render',\n value: function render() {\n var _classNames;\n\n var _props5 = this.props,\n prefixCls = _props5.prefixCls,\n className = _props5.className,\n marks = _props5.marks,\n dots = _props5.dots,\n step = _props5.step,\n included = _props5.included,\n disabled = _props5.disabled,\n vertical = _props5.vertical,\n reverse = _props5.reverse,\n min = _props5.min,\n max = _props5.max,\n children = _props5.children,\n maximumTrackStyle = _props5.maximumTrackStyle,\n style = _props5.style,\n railStyle = _props5.railStyle,\n dotStyle = _props5.dotStyle,\n activeDotStyle = _props5.activeDotStyle;\n\n var _get$call = _get(ComponentEnhancer.prototype.__proto__ || Object.getPrototypeOf(ComponentEnhancer.prototype), 'render', this).call(this),\n tracks = _get$call.tracks,\n handles = _get$call.handles;\n\n var sliderClassName = classNames(prefixCls, (_classNames = {}, _defineProperty(_classNames, prefixCls + '-with-marks', Object.keys(marks).length), _defineProperty(_classNames, prefixCls + '-disabled', disabled), _defineProperty(_classNames, prefixCls + '-vertical', vertical), _defineProperty(_classNames, className, className), _classNames));\n return React.createElement(\n 'div',\n {\n ref: this.saveSlider,\n className: sliderClassName,\n onTouchStart: disabled ? noop : this.onTouchStart,\n onMouseDown: disabled ? noop : this.onMouseDown,\n onMouseUp: disabled ? noop : this.onMouseUp,\n onKeyDown: disabled ? noop : this.onKeyDown,\n onFocus: disabled ? noop : this.onFocus,\n onBlur: disabled ? noop : this.onBlur,\n style: style\n },\n React.createElement('div', {\n className: prefixCls + '-rail',\n style: _extends({}, maximumTrackStyle, railStyle)\n }),\n tracks,\n React.createElement(Steps, {\n prefixCls: prefixCls,\n vertical: vertical,\n reverse: reverse,\n marks: marks,\n dots: dots,\n step: step,\n included: included,\n lowerBound: this.getLowerBound(),\n upperBound: this.getUpperBound(),\n max: max,\n min: min,\n dotStyle: dotStyle,\n activeDotStyle: activeDotStyle\n }),\n handles,\n React.createElement(Marks, {\n className: prefixCls + '-mark',\n onClickLabel: disabled ? noop : this.onClickMarkLabel,\n vertical: vertical,\n marks: marks,\n included: included,\n lowerBound: this.getLowerBound(),\n upperBound: this.getUpperBound(),\n max: max,\n min: min,\n reverse: reverse\n }),\n children\n );\n }\n }]);\n\n return ComponentEnhancer;\n }(Component), _class.displayName = 'ComponentEnhancer(' + Component.displayName + ')', _class.propTypes = _extends({}, Component.propTypes, {\n min: PropTypes.number,\n max: PropTypes.number,\n step: PropTypes.number,\n marks: PropTypes.object,\n included: PropTypes.bool,\n className: PropTypes.string,\n prefixCls: PropTypes.string,\n disabled: PropTypes.bool,\n children: PropTypes.any,\n onBeforeChange: PropTypes.func,\n onChange: PropTypes.func,\n onAfterChange: PropTypes.func,\n handle: PropTypes.func,\n dots: PropTypes.bool,\n vertical: PropTypes.bool,\n style: PropTypes.object,\n reverse: PropTypes.bool,\n minimumTrackStyle: PropTypes.object, // just for compatibility, will be deperecate\n maximumTrackStyle: PropTypes.object, // just for compatibility, will be deperecate\n handleStyle: PropTypes.oneOfType([PropTypes.object, PropTypes.arrayOf(PropTypes.object)]),\n trackStyle: PropTypes.oneOfType([PropTypes.object, PropTypes.arrayOf(PropTypes.object)]),\n railStyle: PropTypes.object,\n dotStyle: PropTypes.object,\n activeDotStyle: PropTypes.object,\n autoFocus: PropTypes.bool,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func\n }), _class.defaultProps = _extends({}, Component.defaultProps, {\n prefixCls: 'rc-slider',\n className: '',\n min: 0,\n max: 100,\n step: 1,\n marks: {},\n handle: function handle(_ref) {\n var index = _ref.index,\n restProps = _objectWithoutProperties(_ref, ['index']);\n\n delete restProps.dragging;\n if (restProps.value === null) {\n return null;\n }\n\n return React.createElement(Handle, _extends({}, restProps, { key: index }));\n },\n\n onBeforeChange: noop,\n onChange: noop,\n onAfterChange: noop,\n included: true,\n disabled: false,\n dots: false,\n vertical: false,\n reverse: false,\n trackStyle: [{}],\n handleStyle: [{}],\n railStyle: {},\n dotStyle: {},\n activeDotStyle: {}\n }), _temp;\n}","import _objectWithoutProperties from 'babel-runtime/helpers/objectWithoutProperties';\nimport _defineProperty from 'babel-runtime/helpers/defineProperty';\nimport _extends from 'babel-runtime/helpers/extends';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Tooltip from 'rc-tooltip';\nimport Handle from './Handle';\n\nexport default function createSliderWithTooltip(Component) {\n var _class, _temp2;\n\n return _temp2 = _class = function (_React$Component) {\n _inherits(ComponentWrapper, _React$Component);\n\n function ComponentWrapper() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, ComponentWrapper);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = ComponentWrapper.__proto__ || Object.getPrototypeOf(ComponentWrapper)).call.apply(_ref, [this].concat(args))), _this), _this.state = {\n visibles: {}\n }, _this.handleTooltipVisibleChange = function (index, visible) {\n _this.setState(function (prevState) {\n return {\n visibles: _extends({}, prevState.visibles, _defineProperty({}, index, visible))\n };\n });\n }, _this.handleWithTooltip = function (_ref2) {\n var value = _ref2.value,\n dragging = _ref2.dragging,\n index = _ref2.index,\n disabled = _ref2.disabled,\n restProps = _objectWithoutProperties(_ref2, ['value', 'dragging', 'index', 'disabled']);\n\n var _this$props = _this.props,\n tipFormatter = _this$props.tipFormatter,\n tipProps = _this$props.tipProps,\n handleStyle = _this$props.handleStyle;\n\n var _tipProps$prefixCls = tipProps.prefixCls,\n prefixCls = _tipProps$prefixCls === undefined ? 'rc-slider-tooltip' : _tipProps$prefixCls,\n _tipProps$overlay = tipProps.overlay,\n overlay = _tipProps$overlay === undefined ? tipFormatter(value) : _tipProps$overlay,\n _tipProps$placement = tipProps.placement,\n placement = _tipProps$placement === undefined ? 'top' : _tipProps$placement,\n _tipProps$visible = tipProps.visible,\n visible = _tipProps$visible === undefined ? false : _tipProps$visible,\n restTooltipProps = _objectWithoutProperties(tipProps, ['prefixCls', 'overlay', 'placement', 'visible']);\n\n var handleStyleWithIndex = void 0;\n if (Array.isArray(handleStyle)) {\n handleStyleWithIndex = handleStyle[index] || handleStyle[0];\n } else {\n handleStyleWithIndex = handleStyle;\n }\n\n return React.createElement(\n Tooltip,\n _extends({}, restTooltipProps, {\n prefixCls: prefixCls,\n overlay: overlay,\n placement: placement,\n visible: !disabled && (_this.state.visibles[index] || dragging) || visible,\n key: index\n }),\n React.createElement(Handle, _extends({}, restProps, {\n style: _extends({}, handleStyleWithIndex),\n value: value,\n onMouseEnter: function onMouseEnter() {\n return _this.handleTooltipVisibleChange(index, true);\n },\n onMouseLeave: function onMouseLeave() {\n return _this.handleTooltipVisibleChange(index, false);\n }\n }))\n );\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(ComponentWrapper, [{\n key: 'render',\n value: function render() {\n return React.createElement(Component, _extends({}, this.props, { handle: this.handleWithTooltip }));\n }\n }]);\n\n return ComponentWrapper;\n }(React.Component), _class.propTypes = {\n tipFormatter: PropTypes.func,\n handleStyle: PropTypes.oneOfType([PropTypes.object, PropTypes.arrayOf(PropTypes.object)]),\n tipProps: PropTypes.object\n }, _class.defaultProps = {\n tipFormatter: function tipFormatter(value) {\n return value;\n },\n\n handleStyle: [{}],\n tipProps: {}\n }, _temp2;\n}","import Slider from './Slider';\nimport Range from './Range';\nimport Handle from './Handle';\nimport createSliderWithTooltip from './createSliderWithTooltip';\n\nSlider.Range = Range;\nSlider.Handle = Handle;\nSlider.createSliderWithTooltip = createSliderWithTooltip;\nexport default Slider;\nexport { Range, Handle, createSliderWithTooltip };","import _toConsumableArray from 'babel-runtime/helpers/toConsumableArray';\nimport { findDOMNode } from 'react-dom';\nimport keyCode from 'rc-util/es/KeyCode';\n\nexport function isEventFromHandle(e, handles) {\n try {\n return Object.keys(handles).some(function (key) {\n return e.target === findDOMNode(handles[key]);\n });\n } catch (error) {\n return false;\n }\n}\n\nexport function isValueOutOfRange(value, _ref) {\n var min = _ref.min,\n max = _ref.max;\n\n return value < min || value > max;\n}\n\nexport function isNotTouchEvent(e) {\n return e.touches.length > 1 || e.type.toLowerCase() === 'touchend' && e.touches.length > 0;\n}\n\nexport function getClosestPoint(val, _ref2) {\n var marks = _ref2.marks,\n step = _ref2.step,\n min = _ref2.min,\n max = _ref2.max;\n\n var points = Object.keys(marks).map(parseFloat);\n if (step !== null) {\n var maxSteps = Math.floor((max - min) / step);\n var steps = Math.min((val - min) / step, maxSteps);\n var closestStep = Math.round(steps) * step + min;\n points.push(closestStep);\n }\n var diffs = points.map(function (point) {\n return Math.abs(val - point);\n });\n return points[diffs.indexOf(Math.min.apply(Math, _toConsumableArray(diffs)))];\n}\n\nexport function getPrecision(step) {\n var stepString = step.toString();\n var precision = 0;\n if (stepString.indexOf('.') >= 0) {\n precision = stepString.length - stepString.indexOf('.') - 1;\n }\n return precision;\n}\n\nexport function getMousePosition(vertical, e) {\n return vertical ? e.clientY : e.pageX;\n}\n\nexport function getTouchPosition(vertical, e) {\n return vertical ? e.touches[0].clientY : e.touches[0].pageX;\n}\n\nexport function getHandleCenterPosition(vertical, handle) {\n var coords = handle.getBoundingClientRect();\n return vertical ? coords.top + coords.height * 0.5 : window.pageXOffset + coords.left + coords.width * 0.5;\n}\n\nexport function ensureValueInRange(val, _ref3) {\n var max = _ref3.max,\n min = _ref3.min;\n\n if (val <= min) {\n return min;\n }\n if (val >= max) {\n return max;\n }\n return val;\n}\n\nexport function ensureValuePrecision(val, props) {\n var step = props.step;\n\n var closestPoint = isFinite(getClosestPoint(val, props)) ? getClosestPoint(val, props) : 0; // eslint-disable-line\n return step === null ? closestPoint : parseFloat(closestPoint.toFixed(getPrecision(step)));\n}\n\nexport function pauseEvent(e) {\n e.stopPropagation();\n e.preventDefault();\n}\n\nexport function calculateNextValue(func, value, props) {\n var operations = {\n increase: function increase(a, b) {\n return a + b;\n },\n decrease: function decrease(a, b) {\n return a - b;\n }\n };\n\n var indexToGet = operations[func](Object.keys(props.marks).indexOf(JSON.stringify(value)), 1);\n var keyToGet = Object.keys(props.marks)[indexToGet];\n\n if (props.step) {\n return operations[func](value, props.step);\n } else if (!!Object.keys(props.marks).length && !!props.marks[keyToGet]) {\n return props.marks[keyToGet];\n }\n return value;\n}\n\nexport function getKeyboardValueMutator(e, vertical, reverse) {\n var increase = 'increase';\n var decrease = 'decrease';\n var method = increase;\n switch (e.keyCode) {\n case keyCode.UP:\n method = vertical && reverse ? decrease : increase;break;\n case keyCode.RIGHT:\n method = !vertical && reverse ? decrease : increase;break;\n case keyCode.DOWN:\n method = vertical && reverse ? increase : decrease;break;\n case keyCode.LEFT:\n method = !vertical && reverse ? increase : decrease;break;\n\n case keyCode.END:\n return function (value, props) {\n return props.max;\n };\n case keyCode.HOME:\n return function (value, props) {\n return props.min;\n };\n case keyCode.PAGE_UP:\n return function (value, props) {\n return value + props.step * 2;\n };\n case keyCode.PAGE_DOWN:\n return function (value, props) {\n return value - props.step * 2;\n };\n\n default:\n return undefined;\n }\n return function (value, props) {\n return calculateNextValue(method, value, props);\n };\n}","import _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nvar Content = function (_React$Component) {\n _inherits(Content, _React$Component);\n\n function Content() {\n _classCallCheck(this, Content);\n\n return _possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n }\n\n Content.prototype.componentDidUpdate = function componentDidUpdate() {\n var trigger = this.props.trigger;\n\n if (trigger) {\n trigger.forcePopupAlign();\n }\n };\n\n Content.prototype.render = function render() {\n var _props = this.props,\n overlay = _props.overlay,\n prefixCls = _props.prefixCls,\n id = _props.id;\n\n return React.createElement(\n 'div',\n { className: prefixCls + '-inner', id: id, role: 'tooltip' },\n typeof overlay === 'function' ? overlay() : overlay\n );\n };\n\n return Content;\n}(React.Component);\n\nContent.propTypes = {\n prefixCls: PropTypes.string,\n overlay: PropTypes.oneOfType([PropTypes.node, PropTypes.func]).isRequired,\n id: PropTypes.string,\n trigger: PropTypes.any\n};\nexport default Content;","import _extends from 'babel-runtime/helpers/extends';\nimport _objectWithoutProperties from 'babel-runtime/helpers/objectWithoutProperties';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Trigger from 'rc-trigger';\nimport { placements } from './placements';\nimport Content from './Content';\n\nvar Tooltip = function (_Component) {\n _inherits(Tooltip, _Component);\n\n function Tooltip() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, Tooltip);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.getPopupElement = function () {\n var _this$props = _this.props,\n arrowContent = _this$props.arrowContent,\n overlay = _this$props.overlay,\n prefixCls = _this$props.prefixCls,\n id = _this$props.id;\n\n return [React.createElement(\n 'div',\n { className: prefixCls + '-arrow', key: 'arrow' },\n arrowContent\n ), React.createElement(Content, {\n key: 'content',\n trigger: _this.trigger,\n prefixCls: prefixCls,\n id: id,\n overlay: overlay\n })];\n }, _this.saveTrigger = function (node) {\n _this.trigger = node;\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n Tooltip.prototype.getPopupDomNode = function getPopupDomNode() {\n return this.trigger.getPopupDomNode();\n };\n\n Tooltip.prototype.render = function render() {\n var _props = this.props,\n overlayClassName = _props.overlayClassName,\n trigger = _props.trigger,\n mouseEnterDelay = _props.mouseEnterDelay,\n mouseLeaveDelay = _props.mouseLeaveDelay,\n overlayStyle = _props.overlayStyle,\n prefixCls = _props.prefixCls,\n children = _props.children,\n onVisibleChange = _props.onVisibleChange,\n afterVisibleChange = _props.afterVisibleChange,\n transitionName = _props.transitionName,\n animation = _props.animation,\n placement = _props.placement,\n align = _props.align,\n destroyTooltipOnHide = _props.destroyTooltipOnHide,\n defaultVisible = _props.defaultVisible,\n getTooltipContainer = _props.getTooltipContainer,\n restProps = _objectWithoutProperties(_props, ['overlayClassName', 'trigger', 'mouseEnterDelay', 'mouseLeaveDelay', 'overlayStyle', 'prefixCls', 'children', 'onVisibleChange', 'afterVisibleChange', 'transitionName', 'animation', 'placement', 'align', 'destroyTooltipOnHide', 'defaultVisible', 'getTooltipContainer']);\n\n var extraProps = _extends({}, restProps);\n if ('visible' in this.props) {\n extraProps.popupVisible = this.props.visible;\n }\n return React.createElement(\n Trigger,\n _extends({\n popupClassName: overlayClassName,\n ref: this.saveTrigger,\n prefixCls: prefixCls,\n popup: this.getPopupElement,\n action: trigger,\n builtinPlacements: placements,\n popupPlacement: placement,\n popupAlign: align,\n getPopupContainer: getTooltipContainer,\n onPopupVisibleChange: onVisibleChange,\n afterPopupVisibleChange: afterVisibleChange,\n popupTransitionName: transitionName,\n popupAnimation: animation,\n defaultPopupVisible: defaultVisible,\n destroyPopupOnHide: destroyTooltipOnHide,\n mouseLeaveDelay: mouseLeaveDelay,\n popupStyle: overlayStyle,\n mouseEnterDelay: mouseEnterDelay\n }, extraProps),\n children\n );\n };\n\n return Tooltip;\n}(Component);\n\nTooltip.propTypes = {\n trigger: PropTypes.any,\n children: PropTypes.any,\n defaultVisible: PropTypes.bool,\n visible: PropTypes.bool,\n placement: PropTypes.string,\n transitionName: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n animation: PropTypes.any,\n onVisibleChange: PropTypes.func,\n afterVisibleChange: PropTypes.func,\n overlay: PropTypes.oneOfType([PropTypes.node, PropTypes.func]).isRequired,\n overlayStyle: PropTypes.object,\n overlayClassName: PropTypes.string,\n prefixCls: PropTypes.string,\n mouseEnterDelay: PropTypes.number,\n mouseLeaveDelay: PropTypes.number,\n getTooltipContainer: PropTypes.func,\n destroyTooltipOnHide: PropTypes.bool,\n align: PropTypes.object,\n arrowContent: PropTypes.any,\n id: PropTypes.string\n};\nTooltip.defaultProps = {\n prefixCls: 'rc-tooltip',\n mouseEnterDelay: 0,\n destroyTooltipOnHide: false,\n mouseLeaveDelay: 0.1,\n align: {},\n placement: 'right',\n trigger: ['hover'],\n arrowContent: null\n};\n\n\nexport default Tooltip;","import Tooltip from './Tooltip';\n\nexport default Tooltip;","var autoAdjustOverflow = {\n adjustX: 1,\n adjustY: 1\n};\n\nvar targetOffset = [0, 0];\n\nexport var placements = {\n left: {\n points: ['cr', 'cl'],\n overflow: autoAdjustOverflow,\n offset: [-4, 0],\n targetOffset: targetOffset\n },\n right: {\n points: ['cl', 'cr'],\n overflow: autoAdjustOverflow,\n offset: [4, 0],\n targetOffset: targetOffset\n },\n top: {\n points: ['bc', 'tc'],\n overflow: autoAdjustOverflow,\n offset: [0, -4],\n targetOffset: targetOffset\n },\n bottom: {\n points: ['tc', 'bc'],\n overflow: autoAdjustOverflow,\n offset: [0, 4],\n targetOffset: targetOffset\n },\n topLeft: {\n points: ['bl', 'tl'],\n overflow: autoAdjustOverflow,\n offset: [0, -4],\n targetOffset: targetOffset\n },\n leftTop: {\n points: ['tr', 'tl'],\n overflow: autoAdjustOverflow,\n offset: [-4, 0],\n targetOffset: targetOffset\n },\n topRight: {\n points: ['br', 'tr'],\n overflow: autoAdjustOverflow,\n offset: [0, -4],\n targetOffset: targetOffset\n },\n rightTop: {\n points: ['tl', 'tr'],\n overflow: autoAdjustOverflow,\n offset: [4, 0],\n targetOffset: targetOffset\n },\n bottomRight: {\n points: ['tr', 'br'],\n overflow: autoAdjustOverflow,\n offset: [0, 4],\n targetOffset: targetOffset\n },\n rightBottom: {\n points: ['bl', 'br'],\n overflow: autoAdjustOverflow,\n offset: [4, 0],\n targetOffset: targetOffset\n },\n bottomLeft: {\n points: ['tl', 'bl'],\n overflow: autoAdjustOverflow,\n offset: [0, 4],\n targetOffset: targetOffset\n },\n leftBottom: {\n points: ['br', 'bl'],\n overflow: autoAdjustOverflow,\n offset: [-4, 0],\n targetOffset: targetOffset\n }\n};\n\nexport default placements;","import _objectWithoutProperties from 'babel-runtime/helpers/objectWithoutProperties';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nvar LazyRenderBox = function (_Component) {\n _inherits(LazyRenderBox, _Component);\n\n function LazyRenderBox() {\n _classCallCheck(this, LazyRenderBox);\n\n return _possibleConstructorReturn(this, _Component.apply(this, arguments));\n }\n\n LazyRenderBox.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n return nextProps.hiddenClassName || nextProps.visible;\n };\n\n LazyRenderBox.prototype.render = function render() {\n var _props = this.props,\n hiddenClassName = _props.hiddenClassName,\n visible = _props.visible,\n props = _objectWithoutProperties(_props, ['hiddenClassName', 'visible']);\n\n if (hiddenClassName || React.Children.count(props.children) > 1) {\n if (!visible && hiddenClassName) {\n props.className += ' ' + hiddenClassName;\n }\n return React.createElement('div', props);\n }\n\n return React.Children.only(props.children);\n };\n\n return LazyRenderBox;\n}(Component);\n\nLazyRenderBox.propTypes = {\n children: PropTypes.any,\n className: PropTypes.string,\n visible: PropTypes.bool,\n hiddenClassName: PropTypes.string\n};\n\n\nexport default LazyRenderBox;","import _extends from 'babel-runtime/helpers/extends';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport Align from 'rc-align';\nimport Animate from 'rc-animate';\nimport PopupInner from './PopupInner';\nimport LazyRenderBox from './LazyRenderBox';\nimport { saveRef } from './utils';\n\nvar Popup = function (_Component) {\n _inherits(Popup, _Component);\n\n function Popup(props) {\n _classCallCheck(this, Popup);\n\n var _this = _possibleConstructorReturn(this, _Component.call(this, props));\n\n _initialiseProps.call(_this);\n\n _this.state = {\n // Used for stretch\n stretchChecked: false,\n targetWidth: undefined,\n targetHeight: undefined\n };\n\n _this.savePopupRef = saveRef.bind(_this, 'popupInstance');\n _this.saveAlignRef = saveRef.bind(_this, 'alignInstance');\n return _this;\n }\n\n Popup.prototype.componentDidMount = function componentDidMount() {\n this.rootNode = this.getPopupDomNode();\n this.setStretchSize();\n };\n\n Popup.prototype.componentDidUpdate = function componentDidUpdate() {\n this.setStretchSize();\n };\n\n // Record size if stretch needed\n\n\n Popup.prototype.getPopupDomNode = function getPopupDomNode() {\n return ReactDOM.findDOMNode(this.popupInstance);\n };\n\n // `target` on `rc-align` can accept as a function to get the bind element or a point.\n // ref: https://www.npmjs.com/package/rc-align\n\n\n Popup.prototype.getMaskTransitionName = function getMaskTransitionName() {\n var props = this.props;\n var transitionName = props.maskTransitionName;\n var animation = props.maskAnimation;\n if (!transitionName && animation) {\n transitionName = props.prefixCls + '-' + animation;\n }\n return transitionName;\n };\n\n Popup.prototype.getTransitionName = function getTransitionName() {\n var props = this.props;\n var transitionName = props.transitionName;\n if (!transitionName && props.animation) {\n transitionName = props.prefixCls + '-' + props.animation;\n }\n return transitionName;\n };\n\n Popup.prototype.getClassName = function getClassName(currentAlignClassName) {\n return this.props.prefixCls + ' ' + this.props.className + ' ' + currentAlignClassName;\n };\n\n Popup.prototype.getPopupElement = function getPopupElement() {\n var _this2 = this;\n\n var savePopupRef = this.savePopupRef;\n var _state = this.state,\n stretchChecked = _state.stretchChecked,\n targetHeight = _state.targetHeight,\n targetWidth = _state.targetWidth;\n var _props = this.props,\n align = _props.align,\n visible = _props.visible,\n prefixCls = _props.prefixCls,\n style = _props.style,\n getClassNameFromAlign = _props.getClassNameFromAlign,\n destroyPopupOnHide = _props.destroyPopupOnHide,\n stretch = _props.stretch,\n children = _props.children,\n onMouseEnter = _props.onMouseEnter,\n onMouseLeave = _props.onMouseLeave,\n onMouseDown = _props.onMouseDown,\n onTouchStart = _props.onTouchStart;\n\n var className = this.getClassName(this.currentAlignClassName || getClassNameFromAlign(align));\n var hiddenClassName = prefixCls + '-hidden';\n\n if (!visible) {\n this.currentAlignClassName = null;\n }\n\n var sizeStyle = {};\n if (stretch) {\n // Stretch with target\n if (stretch.indexOf('height') !== -1) {\n sizeStyle.height = targetHeight;\n } else if (stretch.indexOf('minHeight') !== -1) {\n sizeStyle.minHeight = targetHeight;\n }\n if (stretch.indexOf('width') !== -1) {\n sizeStyle.width = targetWidth;\n } else if (stretch.indexOf('minWidth') !== -1) {\n sizeStyle.minWidth = targetWidth;\n }\n\n // Delay force align to makes ui smooth\n if (!stretchChecked) {\n sizeStyle.visibility = 'hidden';\n setTimeout(function () {\n if (_this2.alignInstance) {\n _this2.alignInstance.forceAlign();\n }\n }, 0);\n }\n }\n\n var newStyle = _extends({}, sizeStyle, style, this.getZIndexStyle());\n\n var popupInnerProps = {\n className: className,\n prefixCls: prefixCls,\n ref: savePopupRef,\n onMouseEnter: onMouseEnter,\n onMouseLeave: onMouseLeave,\n onMouseDown: onMouseDown,\n onTouchStart: onTouchStart,\n style: newStyle\n };\n if (destroyPopupOnHide) {\n return React.createElement(\n Animate,\n {\n component: '',\n exclusive: true,\n transitionAppear: true,\n transitionName: this.getTransitionName()\n },\n visible ? React.createElement(\n Align,\n {\n target: this.getAlignTarget(),\n key: 'popup',\n ref: this.saveAlignRef,\n monitorWindowResize: true,\n align: align,\n onAlign: this.onAlign\n },\n React.createElement(\n PopupInner,\n _extends({\n visible: true\n }, popupInnerProps),\n children\n )\n ) : null\n );\n }\n\n return React.createElement(\n Animate,\n {\n component: '',\n exclusive: true,\n transitionAppear: true,\n transitionName: this.getTransitionName(),\n showProp: 'xVisible'\n },\n React.createElement(\n Align,\n {\n target: this.getAlignTarget(),\n key: 'popup',\n ref: this.saveAlignRef,\n monitorWindowResize: true,\n xVisible: visible,\n childrenProps: { visible: 'xVisible' },\n disabled: !visible,\n align: align,\n onAlign: this.onAlign\n },\n React.createElement(\n PopupInner,\n _extends({\n hiddenClassName: hiddenClassName\n }, popupInnerProps),\n children\n )\n )\n );\n };\n\n Popup.prototype.getZIndexStyle = function getZIndexStyle() {\n var style = {};\n var props = this.props;\n if (props.zIndex !== undefined) {\n style.zIndex = props.zIndex;\n }\n return style;\n };\n\n Popup.prototype.getMaskElement = function getMaskElement() {\n var props = this.props;\n var maskElement = void 0;\n if (props.mask) {\n var maskTransition = this.getMaskTransitionName();\n maskElement = React.createElement(LazyRenderBox, {\n style: this.getZIndexStyle(),\n key: 'mask',\n className: props.prefixCls + '-mask',\n hiddenClassName: props.prefixCls + '-mask-hidden',\n visible: props.visible\n });\n if (maskTransition) {\n maskElement = React.createElement(\n Animate,\n {\n key: 'mask',\n showProp: 'visible',\n transitionAppear: true,\n component: '',\n transitionName: maskTransition\n },\n maskElement\n );\n }\n }\n return maskElement;\n };\n\n Popup.prototype.render = function render() {\n return React.createElement(\n 'div',\n null,\n this.getMaskElement(),\n this.getPopupElement()\n );\n };\n\n return Popup;\n}(Component);\n\nPopup.propTypes = {\n visible: PropTypes.bool,\n style: PropTypes.object,\n getClassNameFromAlign: PropTypes.func,\n onAlign: PropTypes.func,\n getRootDomNode: PropTypes.func,\n align: PropTypes.any,\n destroyPopupOnHide: PropTypes.bool,\n className: PropTypes.string,\n prefixCls: PropTypes.string,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseDown: PropTypes.func,\n onTouchStart: PropTypes.func,\n stretch: PropTypes.string,\n children: PropTypes.node,\n point: PropTypes.shape({\n pageX: PropTypes.number,\n pageY: PropTypes.number\n })\n};\n\nvar _initialiseProps = function _initialiseProps() {\n var _this3 = this;\n\n this.onAlign = function (popupDomNode, align) {\n var props = _this3.props;\n var currentAlignClassName = props.getClassNameFromAlign(align);\n // FIX: https://github.com/react-component/trigger/issues/56\n // FIX: https://github.com/react-component/tooltip/issues/79\n if (_this3.currentAlignClassName !== currentAlignClassName) {\n _this3.currentAlignClassName = currentAlignClassName;\n popupDomNode.className = _this3.getClassName(currentAlignClassName);\n }\n props.onAlign(popupDomNode, align);\n };\n\n this.setStretchSize = function () {\n var _props2 = _this3.props,\n stretch = _props2.stretch,\n getRootDomNode = _props2.getRootDomNode,\n visible = _props2.visible;\n var _state2 = _this3.state,\n stretchChecked = _state2.stretchChecked,\n targetHeight = _state2.targetHeight,\n targetWidth = _state2.targetWidth;\n\n\n if (!stretch || !visible) {\n if (stretchChecked) {\n _this3.setState({ stretchChecked: false });\n }\n return;\n }\n\n var $ele = getRootDomNode();\n if (!$ele) return;\n\n var height = $ele.offsetHeight;\n var width = $ele.offsetWidth;\n\n if (targetHeight !== height || targetWidth !== width || !stretchChecked) {\n _this3.setState({\n stretchChecked: true,\n targetHeight: height,\n targetWidth: width\n });\n }\n };\n\n this.getTargetElement = function () {\n return _this3.props.getRootDomNode();\n };\n\n this.getAlignTarget = function () {\n var point = _this3.props.point;\n\n if (point) {\n return point;\n }\n return _this3.getTargetElement;\n };\n};\n\nexport default Popup;","import _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport LazyRenderBox from './LazyRenderBox';\n\nvar PopupInner = function (_Component) {\n _inherits(PopupInner, _Component);\n\n function PopupInner() {\n _classCallCheck(this, PopupInner);\n\n return _possibleConstructorReturn(this, _Component.apply(this, arguments));\n }\n\n PopupInner.prototype.render = function render() {\n var props = this.props;\n var className = props.className;\n if (!props.visible) {\n className += ' ' + props.hiddenClassName;\n }\n return React.createElement(\n 'div',\n {\n className: className,\n onMouseEnter: props.onMouseEnter,\n onMouseLeave: props.onMouseLeave,\n onMouseDown: props.onMouseDown,\n onTouchStart: props.onTouchStart,\n style: props.style\n },\n React.createElement(\n LazyRenderBox,\n { className: props.prefixCls + '-content', visible: props.visible },\n props.children\n )\n );\n };\n\n return PopupInner;\n}(Component);\n\nPopupInner.propTypes = {\n hiddenClassName: PropTypes.string,\n className: PropTypes.string,\n prefixCls: PropTypes.string,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseDown: PropTypes.func,\n onTouchStart: PropTypes.func,\n children: PropTypes.any\n};\n\n\nexport default PopupInner;","import _extends from 'babel-runtime/helpers/extends';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { findDOMNode, createPortal } from 'react-dom';\nimport { polyfill } from 'react-lifecycles-compat';\nimport contains from 'rc-util/es/Dom/contains';\nimport addEventListener from 'rc-util/es/Dom/addEventListener';\nimport ContainerRender from 'rc-util/es/ContainerRender';\nimport Portal from 'rc-util/es/Portal';\nimport classNames from 'classnames';\n\nimport { getAlignFromPlacement, getAlignPopupClassName } from './utils';\nimport Popup from './Popup';\n\nfunction noop() {}\n\nfunction returnEmptyString() {\n return '';\n}\n\nfunction returnDocument() {\n return window.document;\n}\n\nvar ALL_HANDLERS = ['onClick', 'onMouseDown', 'onTouchStart', 'onMouseEnter', 'onMouseLeave', 'onFocus', 'onBlur', 'onContextMenu'];\n\nvar IS_REACT_16 = !!createPortal;\n\nvar contextTypes = {\n rcTrigger: PropTypes.shape({\n onPopupMouseDown: PropTypes.func\n })\n};\n\nvar Trigger = function (_React$Component) {\n _inherits(Trigger, _React$Component);\n\n function Trigger(props) {\n _classCallCheck(this, Trigger);\n\n var _this = _possibleConstructorReturn(this, _React$Component.call(this, props));\n\n _initialiseProps.call(_this);\n\n var popupVisible = void 0;\n if ('popupVisible' in props) {\n popupVisible = !!props.popupVisible;\n } else {\n popupVisible = !!props.defaultPopupVisible;\n }\n\n _this.state = {\n prevPopupVisible: popupVisible,\n popupVisible: popupVisible\n };\n\n ALL_HANDLERS.forEach(function (h) {\n _this['fire' + h] = function (e) {\n _this.fireEvents(h, e);\n };\n });\n return _this;\n }\n\n Trigger.prototype.getChildContext = function getChildContext() {\n return {\n rcTrigger: {\n onPopupMouseDown: this.onPopupMouseDown\n }\n };\n };\n\n Trigger.prototype.componentDidMount = function componentDidMount() {\n this.componentDidUpdate({}, {\n popupVisible: this.state.popupVisible\n });\n };\n\n Trigger.prototype.componentDidUpdate = function componentDidUpdate(_, prevState) {\n var props = this.props;\n var state = this.state;\n var triggerAfterPopupVisibleChange = function triggerAfterPopupVisibleChange() {\n if (prevState.popupVisible !== state.popupVisible) {\n props.afterPopupVisibleChange(state.popupVisible);\n }\n };\n if (!IS_REACT_16) {\n this.renderComponent(null, triggerAfterPopupVisibleChange);\n }\n\n // We must listen to `mousedown` or `touchstart`, edge case:\n // https://github.com/ant-design/ant-design/issues/5804\n // https://github.com/react-component/calendar/issues/250\n // https://github.com/react-component/trigger/issues/50\n if (state.popupVisible) {\n var currentDocument = void 0;\n if (!this.clickOutsideHandler && (this.isClickToHide() || this.isContextMenuToShow())) {\n currentDocument = props.getDocument();\n this.clickOutsideHandler = addEventListener(currentDocument, 'mousedown', this.onDocumentClick);\n }\n // always hide on mobile\n if (!this.touchOutsideHandler) {\n currentDocument = currentDocument || props.getDocument();\n this.touchOutsideHandler = addEventListener(currentDocument, 'touchstart', this.onDocumentClick);\n }\n // close popup when trigger type contains 'onContextMenu' and document is scrolling.\n if (!this.contextMenuOutsideHandler1 && this.isContextMenuToShow()) {\n currentDocument = currentDocument || props.getDocument();\n this.contextMenuOutsideHandler1 = addEventListener(currentDocument, 'scroll', this.onContextMenuClose);\n }\n // close popup when trigger type contains 'onContextMenu' and window is blur.\n if (!this.contextMenuOutsideHandler2 && this.isContextMenuToShow()) {\n this.contextMenuOutsideHandler2 = addEventListener(window, 'blur', this.onContextMenuClose);\n }\n return;\n }\n\n this.clearOutsideHandler();\n };\n\n Trigger.prototype.componentWillUnmount = function componentWillUnmount() {\n this.clearDelayTimer();\n this.clearOutsideHandler();\n clearTimeout(this.mouseDownTimeout);\n };\n\n Trigger.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n var popupVisible = _ref.popupVisible;\n\n var newState = {};\n\n if (popupVisible !== undefined && prevState.popupVisible !== popupVisible) {\n newState.popupVisible = popupVisible;\n newState.prevPopupVisible = prevState.popupVisible;\n }\n\n return newState;\n };\n\n Trigger.prototype.getPopupDomNode = function getPopupDomNode() {\n // for test\n if (this._component && this._component.getPopupDomNode) {\n return this._component.getPopupDomNode();\n }\n return null;\n };\n\n Trigger.prototype.getPopupAlign = function getPopupAlign() {\n var props = this.props;\n var popupPlacement = props.popupPlacement,\n popupAlign = props.popupAlign,\n builtinPlacements = props.builtinPlacements;\n\n if (popupPlacement && builtinPlacements) {\n return getAlignFromPlacement(builtinPlacements, popupPlacement, popupAlign);\n }\n return popupAlign;\n };\n\n /**\n * @param popupVisible Show or not the popup element\n * @param event SyntheticEvent, used for `pointAlign`\n */\n Trigger.prototype.setPopupVisible = function setPopupVisible(popupVisible, event) {\n var alignPoint = this.props.alignPoint;\n var prevPopupVisible = this.state.popupVisible;\n\n\n this.clearDelayTimer();\n\n if (prevPopupVisible !== popupVisible) {\n if (!('popupVisible' in this.props)) {\n this.setState({ popupVisible: popupVisible, prevPopupVisible: prevPopupVisible });\n }\n this.props.onPopupVisibleChange(popupVisible);\n }\n\n // Always record the point position since mouseEnterDelay will delay the show\n if (alignPoint && event) {\n this.setPoint(event);\n }\n };\n\n Trigger.prototype.delaySetPopupVisible = function delaySetPopupVisible(visible, delayS, event) {\n var _this2 = this;\n\n var delay = delayS * 1000;\n this.clearDelayTimer();\n if (delay) {\n var point = event ? { pageX: event.pageX, pageY: event.pageY } : null;\n this.delayTimer = setTimeout(function () {\n _this2.setPopupVisible(visible, point);\n _this2.clearDelayTimer();\n }, delay);\n } else {\n this.setPopupVisible(visible, event);\n }\n };\n\n Trigger.prototype.clearDelayTimer = function clearDelayTimer() {\n if (this.delayTimer) {\n clearTimeout(this.delayTimer);\n this.delayTimer = null;\n }\n };\n\n Trigger.prototype.clearOutsideHandler = function clearOutsideHandler() {\n if (this.clickOutsideHandler) {\n this.clickOutsideHandler.remove();\n this.clickOutsideHandler = null;\n }\n\n if (this.contextMenuOutsideHandler1) {\n this.contextMenuOutsideHandler1.remove();\n this.contextMenuOutsideHandler1 = null;\n }\n\n if (this.contextMenuOutsideHandler2) {\n this.contextMenuOutsideHandler2.remove();\n this.contextMenuOutsideHandler2 = null;\n }\n\n if (this.touchOutsideHandler) {\n this.touchOutsideHandler.remove();\n this.touchOutsideHandler = null;\n }\n };\n\n Trigger.prototype.createTwoChains = function createTwoChains(event) {\n var childPros = this.props.children.props;\n var props = this.props;\n if (childPros[event] && props[event]) {\n return this['fire' + event];\n }\n return childPros[event] || props[event];\n };\n\n Trigger.prototype.isClickToShow = function isClickToShow() {\n var _props = this.props,\n action = _props.action,\n showAction = _props.showAction;\n\n return action.indexOf('click') !== -1 || showAction.indexOf('click') !== -1;\n };\n\n Trigger.prototype.isContextMenuToShow = function isContextMenuToShow() {\n var _props2 = this.props,\n action = _props2.action,\n showAction = _props2.showAction;\n\n return action.indexOf('contextMenu') !== -1 || showAction.indexOf('contextMenu') !== -1;\n };\n\n Trigger.prototype.isClickToHide = function isClickToHide() {\n var _props3 = this.props,\n action = _props3.action,\n hideAction = _props3.hideAction;\n\n return action.indexOf('click') !== -1 || hideAction.indexOf('click') !== -1;\n };\n\n Trigger.prototype.isMouseEnterToShow = function isMouseEnterToShow() {\n var _props4 = this.props,\n action = _props4.action,\n showAction = _props4.showAction;\n\n return action.indexOf('hover') !== -1 || showAction.indexOf('mouseEnter') !== -1;\n };\n\n Trigger.prototype.isMouseLeaveToHide = function isMouseLeaveToHide() {\n var _props5 = this.props,\n action = _props5.action,\n hideAction = _props5.hideAction;\n\n return action.indexOf('hover') !== -1 || hideAction.indexOf('mouseLeave') !== -1;\n };\n\n Trigger.prototype.isFocusToShow = function isFocusToShow() {\n var _props6 = this.props,\n action = _props6.action,\n showAction = _props6.showAction;\n\n return action.indexOf('focus') !== -1 || showAction.indexOf('focus') !== -1;\n };\n\n Trigger.prototype.isBlurToHide = function isBlurToHide() {\n var _props7 = this.props,\n action = _props7.action,\n hideAction = _props7.hideAction;\n\n return action.indexOf('focus') !== -1 || hideAction.indexOf('blur') !== -1;\n };\n\n Trigger.prototype.forcePopupAlign = function forcePopupAlign() {\n if (this.state.popupVisible && this._component && this._component.alignInstance) {\n this._component.alignInstance.forceAlign();\n }\n };\n\n Trigger.prototype.fireEvents = function fireEvents(type, e) {\n var childCallback = this.props.children.props[type];\n if (childCallback) {\n childCallback(e);\n }\n var callback = this.props[type];\n if (callback) {\n callback(e);\n }\n };\n\n Trigger.prototype.close = function close() {\n this.setPopupVisible(false);\n };\n\n Trigger.prototype.render = function render() {\n var _this3 = this;\n\n var popupVisible = this.state.popupVisible;\n var _props8 = this.props,\n children = _props8.children,\n forceRender = _props8.forceRender,\n alignPoint = _props8.alignPoint,\n className = _props8.className;\n\n var child = React.Children.only(children);\n var newChildProps = { key: 'trigger' };\n\n if (this.isContextMenuToShow()) {\n newChildProps.onContextMenu = this.onContextMenu;\n } else {\n newChildProps.onContextMenu = this.createTwoChains('onContextMenu');\n }\n\n if (this.isClickToHide() || this.isClickToShow()) {\n newChildProps.onClick = this.onClick;\n newChildProps.onMouseDown = this.onMouseDown;\n newChildProps.onTouchStart = this.onTouchStart;\n } else {\n newChildProps.onClick = this.createTwoChains('onClick');\n newChildProps.onMouseDown = this.createTwoChains('onMouseDown');\n newChildProps.onTouchStart = this.createTwoChains('onTouchStart');\n }\n if (this.isMouseEnterToShow()) {\n newChildProps.onMouseEnter = this.onMouseEnter;\n if (alignPoint) {\n newChildProps.onMouseMove = this.onMouseMove;\n }\n } else {\n newChildProps.onMouseEnter = this.createTwoChains('onMouseEnter');\n }\n if (this.isMouseLeaveToHide()) {\n newChildProps.onMouseLeave = this.onMouseLeave;\n } else {\n newChildProps.onMouseLeave = this.createTwoChains('onMouseLeave');\n }\n if (this.isFocusToShow() || this.isBlurToHide()) {\n newChildProps.onFocus = this.onFocus;\n newChildProps.onBlur = this.onBlur;\n } else {\n newChildProps.onFocus = this.createTwoChains('onFocus');\n newChildProps.onBlur = this.createTwoChains('onBlur');\n }\n\n var childrenClassName = classNames(child && child.props && child.props.className, className);\n if (childrenClassName) {\n newChildProps.className = childrenClassName;\n }\n var trigger = React.cloneElement(child, newChildProps);\n\n if (!IS_REACT_16) {\n return React.createElement(\n ContainerRender,\n {\n parent: this,\n visible: popupVisible,\n autoMount: false,\n forceRender: forceRender,\n getComponent: this.getComponent,\n getContainer: this.getContainer\n },\n function (_ref2) {\n var renderComponent = _ref2.renderComponent;\n\n _this3.renderComponent = renderComponent;\n return trigger;\n }\n );\n }\n\n var portal = void 0;\n // prevent unmounting after it's rendered\n if (popupVisible || this._component || forceRender) {\n portal = React.createElement(\n Portal,\n { key: 'portal', getContainer: this.getContainer, didUpdate: this.handlePortalUpdate },\n this.getComponent()\n );\n }\n\n return [trigger, portal];\n };\n\n return Trigger;\n}(React.Component);\n\nTrigger.propTypes = {\n children: PropTypes.any,\n action: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]),\n showAction: PropTypes.any,\n hideAction: PropTypes.any,\n getPopupClassNameFromAlign: PropTypes.any,\n onPopupVisibleChange: PropTypes.func,\n afterPopupVisibleChange: PropTypes.func,\n popup: PropTypes.oneOfType([PropTypes.node, PropTypes.func]).isRequired,\n popupStyle: PropTypes.object,\n prefixCls: PropTypes.string,\n popupClassName: PropTypes.string,\n className: PropTypes.string,\n popupPlacement: PropTypes.string,\n builtinPlacements: PropTypes.object,\n popupTransitionName: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n popupAnimation: PropTypes.any,\n mouseEnterDelay: PropTypes.number,\n mouseLeaveDelay: PropTypes.number,\n zIndex: PropTypes.number,\n focusDelay: PropTypes.number,\n blurDelay: PropTypes.number,\n getPopupContainer: PropTypes.func,\n getDocument: PropTypes.func,\n forceRender: PropTypes.bool,\n destroyPopupOnHide: PropTypes.bool,\n mask: PropTypes.bool,\n maskClosable: PropTypes.bool,\n onPopupAlign: PropTypes.func,\n popupAlign: PropTypes.object,\n popupVisible: PropTypes.bool,\n defaultPopupVisible: PropTypes.bool,\n maskTransitionName: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n maskAnimation: PropTypes.string,\n stretch: PropTypes.string,\n alignPoint: PropTypes.bool // Maybe we can support user pass position in the future\n};\nTrigger.contextTypes = contextTypes;\nTrigger.childContextTypes = contextTypes;\nTrigger.defaultProps = {\n prefixCls: 'rc-trigger-popup',\n getPopupClassNameFromAlign: returnEmptyString,\n getDocument: returnDocument,\n onPopupVisibleChange: noop,\n afterPopupVisibleChange: noop,\n onPopupAlign: noop,\n popupClassName: '',\n mouseEnterDelay: 0,\n mouseLeaveDelay: 0.1,\n focusDelay: 0,\n blurDelay: 0.15,\n popupStyle: {},\n destroyPopupOnHide: false,\n popupAlign: {},\n defaultPopupVisible: false,\n mask: false,\n maskClosable: true,\n action: [],\n showAction: [],\n hideAction: []\n};\n\nvar _initialiseProps = function _initialiseProps() {\n var _this4 = this;\n\n this.onMouseEnter = function (e) {\n var mouseEnterDelay = _this4.props.mouseEnterDelay;\n\n _this4.fireEvents('onMouseEnter', e);\n _this4.delaySetPopupVisible(true, mouseEnterDelay, mouseEnterDelay ? null : e);\n };\n\n this.onMouseMove = function (e) {\n _this4.fireEvents('onMouseMove', e);\n _this4.setPoint(e);\n };\n\n this.onMouseLeave = function (e) {\n _this4.fireEvents('onMouseLeave', e);\n _this4.delaySetPopupVisible(false, _this4.props.mouseLeaveDelay);\n };\n\n this.onPopupMouseEnter = function () {\n _this4.clearDelayTimer();\n };\n\n this.onPopupMouseLeave = function (e) {\n // https://github.com/react-component/trigger/pull/13\n // react bug?\n if (e.relatedTarget && !e.relatedTarget.setTimeout && _this4._component && _this4._component.getPopupDomNode && contains(_this4._component.getPopupDomNode(), e.relatedTarget)) {\n return;\n }\n _this4.delaySetPopupVisible(false, _this4.props.mouseLeaveDelay);\n };\n\n this.onFocus = function (e) {\n _this4.fireEvents('onFocus', e);\n // incase focusin and focusout\n _this4.clearDelayTimer();\n if (_this4.isFocusToShow()) {\n _this4.focusTime = Date.now();\n _this4.delaySetPopupVisible(true, _this4.props.focusDelay);\n }\n };\n\n this.onMouseDown = function (e) {\n _this4.fireEvents('onMouseDown', e);\n _this4.preClickTime = Date.now();\n };\n\n this.onTouchStart = function (e) {\n _this4.fireEvents('onTouchStart', e);\n _this4.preTouchTime = Date.now();\n };\n\n this.onBlur = function (e) {\n _this4.fireEvents('onBlur', e);\n _this4.clearDelayTimer();\n if (_this4.isBlurToHide()) {\n _this4.delaySetPopupVisible(false, _this4.props.blurDelay);\n }\n };\n\n this.onContextMenu = function (e) {\n e.preventDefault();\n _this4.fireEvents('onContextMenu', e);\n _this4.setPopupVisible(true, e);\n };\n\n this.onContextMenuClose = function () {\n if (_this4.isContextMenuToShow()) {\n _this4.close();\n }\n };\n\n this.onClick = function (event) {\n _this4.fireEvents('onClick', event);\n // focus will trigger click\n if (_this4.focusTime) {\n var preTime = void 0;\n if (_this4.preClickTime && _this4.preTouchTime) {\n preTime = Math.min(_this4.preClickTime, _this4.preTouchTime);\n } else if (_this4.preClickTime) {\n preTime = _this4.preClickTime;\n } else if (_this4.preTouchTime) {\n preTime = _this4.preTouchTime;\n }\n if (Math.abs(preTime - _this4.focusTime) < 20) {\n return;\n }\n _this4.focusTime = 0;\n }\n _this4.preClickTime = 0;\n _this4.preTouchTime = 0;\n\n // Only prevent default when all the action is click.\n // https://github.com/ant-design/ant-design/issues/17043\n // https://github.com/ant-design/ant-design/issues/17291\n if (_this4.isClickToShow() && (_this4.isClickToHide() || _this4.isBlurToHide()) && event && event.preventDefault) {\n event.preventDefault();\n }\n var nextVisible = !_this4.state.popupVisible;\n if (_this4.isClickToHide() && !nextVisible || nextVisible && _this4.isClickToShow()) {\n _this4.setPopupVisible(!_this4.state.popupVisible, event);\n }\n };\n\n this.onPopupMouseDown = function () {\n var _context$rcTrigger = _this4.context.rcTrigger,\n rcTrigger = _context$rcTrigger === undefined ? {} : _context$rcTrigger;\n\n _this4.hasPopupMouseDown = true;\n\n clearTimeout(_this4.mouseDownTimeout);\n _this4.mouseDownTimeout = setTimeout(function () {\n _this4.hasPopupMouseDown = false;\n }, 0);\n\n if (rcTrigger.onPopupMouseDown) {\n rcTrigger.onPopupMouseDown.apply(rcTrigger, arguments);\n }\n };\n\n this.onDocumentClick = function (event) {\n if (_this4.props.mask && !_this4.props.maskClosable) {\n return;\n }\n\n var target = event.target;\n var root = findDOMNode(_this4);\n if (!contains(root, target) && !_this4.hasPopupMouseDown) {\n _this4.close();\n }\n };\n\n this.getRootDomNode = function () {\n return findDOMNode(_this4);\n };\n\n this.getPopupClassNameFromAlign = function (align) {\n var className = [];\n var _props9 = _this4.props,\n popupPlacement = _props9.popupPlacement,\n builtinPlacements = _props9.builtinPlacements,\n prefixCls = _props9.prefixCls,\n alignPoint = _props9.alignPoint,\n getPopupClassNameFromAlign = _props9.getPopupClassNameFromAlign;\n\n if (popupPlacement && builtinPlacements) {\n className.push(getAlignPopupClassName(builtinPlacements, prefixCls, align, alignPoint));\n }\n if (getPopupClassNameFromAlign) {\n className.push(getPopupClassNameFromAlign(align));\n }\n return className.join(' ');\n };\n\n this.getComponent = function () {\n var _props10 = _this4.props,\n prefixCls = _props10.prefixCls,\n destroyPopupOnHide = _props10.destroyPopupOnHide,\n popupClassName = _props10.popupClassName,\n action = _props10.action,\n onPopupAlign = _props10.onPopupAlign,\n popupAnimation = _props10.popupAnimation,\n popupTransitionName = _props10.popupTransitionName,\n popupStyle = _props10.popupStyle,\n mask = _props10.mask,\n maskAnimation = _props10.maskAnimation,\n maskTransitionName = _props10.maskTransitionName,\n zIndex = _props10.zIndex,\n popup = _props10.popup,\n stretch = _props10.stretch,\n alignPoint = _props10.alignPoint;\n var _state = _this4.state,\n popupVisible = _state.popupVisible,\n point = _state.point;\n\n\n var align = _this4.getPopupAlign();\n\n var mouseProps = {};\n if (_this4.isMouseEnterToShow()) {\n mouseProps.onMouseEnter = _this4.onPopupMouseEnter;\n }\n if (_this4.isMouseLeaveToHide()) {\n mouseProps.onMouseLeave = _this4.onPopupMouseLeave;\n }\n\n mouseProps.onMouseDown = _this4.onPopupMouseDown;\n mouseProps.onTouchStart = _this4.onPopupMouseDown;\n\n return React.createElement(\n Popup,\n _extends({\n prefixCls: prefixCls,\n destroyPopupOnHide: destroyPopupOnHide,\n visible: popupVisible,\n point: alignPoint && point,\n className: popupClassName,\n action: action,\n align: align,\n onAlign: onPopupAlign,\n animation: popupAnimation,\n getClassNameFromAlign: _this4.getPopupClassNameFromAlign\n }, mouseProps, {\n stretch: stretch,\n getRootDomNode: _this4.getRootDomNode,\n style: popupStyle,\n mask: mask,\n zIndex: zIndex,\n transitionName: popupTransitionName,\n maskAnimation: maskAnimation,\n maskTransitionName: maskTransitionName,\n ref: _this4.savePopup\n }),\n typeof popup === 'function' ? popup() : popup\n );\n };\n\n this.getContainer = function () {\n var props = _this4.props;\n\n var popupContainer = document.createElement('div');\n // Make sure default popup container will never cause scrollbar appearing\n // https://github.com/react-component/trigger/issues/41\n popupContainer.style.position = 'absolute';\n popupContainer.style.top = '0';\n popupContainer.style.left = '0';\n popupContainer.style.width = '100%';\n var mountNode = props.getPopupContainer ? props.getPopupContainer(findDOMNode(_this4)) : props.getDocument().body;\n mountNode.appendChild(popupContainer);\n return popupContainer;\n };\n\n this.setPoint = function (point) {\n var alignPoint = _this4.props.alignPoint;\n\n if (!alignPoint || !point) return;\n\n _this4.setState({\n point: {\n pageX: point.pageX,\n pageY: point.pageY\n }\n });\n };\n\n this.handlePortalUpdate = function () {\n if (_this4.state.prevPopupVisible !== _this4.state.popupVisible) {\n _this4.props.afterPopupVisibleChange(_this4.state.popupVisible);\n }\n };\n\n this.savePopup = function (node) {\n _this4._component = node;\n };\n};\n\npolyfill(Trigger);\n\nexport default Trigger;","import _extends from 'babel-runtime/helpers/extends';\nfunction isPointsEq(a1, a2, isAlignPoint) {\n if (isAlignPoint) {\n return a1[0] === a2[0];\n }\n return a1[0] === a2[0] && a1[1] === a2[1];\n}\n\nexport function getAlignFromPlacement(builtinPlacements, placementStr, align) {\n var baseAlign = builtinPlacements[placementStr] || {};\n return _extends({}, baseAlign, align);\n}\n\nexport function getAlignPopupClassName(builtinPlacements, prefixCls, align, isAlignPoint) {\n var points = align.points;\n for (var placement in builtinPlacements) {\n if (builtinPlacements.hasOwnProperty(placement)) {\n if (isPointsEq(builtinPlacements[placement].points, points, isAlignPoint)) {\n return prefixCls + '-placement-' + placement;\n }\n }\n }\n return '';\n}\n\nexport function saveRef(name, component) {\n this[name] = component;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\n\nvar ContainerRender = /*#__PURE__*/function (_React$Component) {\n _inherits(ContainerRender, _React$Component);\n\n var _super = _createSuper(ContainerRender);\n\n function ContainerRender() {\n var _this;\n\n _classCallCheck(this, ContainerRender);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _this.removeContainer = function () {\n if (_this.container) {\n ReactDOM.unmountComponentAtNode(_this.container);\n\n _this.container.parentNode.removeChild(_this.container);\n\n _this.container = null;\n }\n };\n\n _this.renderComponent = function (props, ready) {\n var _this$props = _this.props,\n visible = _this$props.visible,\n getComponent = _this$props.getComponent,\n forceRender = _this$props.forceRender,\n getContainer = _this$props.getContainer,\n parent = _this$props.parent;\n\n if (visible || parent._component || forceRender) {\n if (!_this.container) {\n _this.container = getContainer();\n }\n\n ReactDOM.unstable_renderSubtreeIntoContainer(parent, getComponent(props), _this.container, function callback() {\n if (ready) {\n ready.call(this);\n }\n });\n }\n };\n\n return _this;\n }\n\n _createClass(ContainerRender, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (this.props.autoMount) {\n this.renderComponent();\n }\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n if (this.props.autoMount) {\n this.renderComponent();\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (this.props.autoDestroy) {\n this.removeContainer();\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n return this.props.children({\n renderComponent: this.renderComponent,\n removeContainer: this.removeContainer\n });\n }\n }]);\n\n return ContainerRender;\n}(React.Component);\n\nContainerRender.propTypes = {\n autoMount: PropTypes.bool,\n autoDestroy: PropTypes.bool,\n visible: PropTypes.bool,\n forceRender: PropTypes.bool,\n parent: PropTypes.any,\n getComponent: PropTypes.func.isRequired,\n getContainer: PropTypes.func.isRequired,\n children: PropTypes.func.isRequired\n};\nContainerRender.defaultProps = {\n autoMount: true,\n autoDestroy: true,\n forceRender: false\n};\nexport { ContainerRender as default };","import addDOMEventListener from 'add-dom-event-listener';\nimport ReactDOM from 'react-dom';\nexport default function addEventListenerWrap(target, eventType, cb, option) {\n /* eslint camelcase: 2 */\n var callback = ReactDOM.unstable_batchedUpdates ? function run(e) {\n ReactDOM.unstable_batchedUpdates(cb, e);\n } : cb;\n return addDOMEventListener(target, eventType, callback, option);\n}","export default function contains(root, n) {\n var node = n;\n\n while (node) {\n if (node === root) {\n return true;\n }\n\n node = node.parentNode;\n }\n\n return false;\n}","/**\n * @ignore\n * some key-codes definition and utils from closure-library\n * @author yiminghe@gmail.com\n */\nvar KeyCode = {\n /**\n * MAC_ENTER\n */\n MAC_ENTER: 3,\n\n /**\n * BACKSPACE\n */\n BACKSPACE: 8,\n\n /**\n * TAB\n */\n TAB: 9,\n\n /**\n * NUMLOCK on FF/Safari Mac\n */\n NUM_CENTER: 12,\n\n /**\n * ENTER\n */\n ENTER: 13,\n\n /**\n * SHIFT\n */\n SHIFT: 16,\n\n /**\n * CTRL\n */\n CTRL: 17,\n\n /**\n * ALT\n */\n ALT: 18,\n\n /**\n * PAUSE\n */\n PAUSE: 19,\n\n /**\n * CAPS_LOCK\n */\n CAPS_LOCK: 20,\n\n /**\n * ESC\n */\n ESC: 27,\n\n /**\n * SPACE\n */\n SPACE: 32,\n\n /**\n * PAGE_UP\n */\n PAGE_UP: 33,\n\n /**\n * PAGE_DOWN\n */\n PAGE_DOWN: 34,\n\n /**\n * END\n */\n END: 35,\n\n /**\n * HOME\n */\n HOME: 36,\n\n /**\n * LEFT\n */\n LEFT: 37,\n\n /**\n * UP\n */\n UP: 38,\n\n /**\n * RIGHT\n */\n RIGHT: 39,\n\n /**\n * DOWN\n */\n DOWN: 40,\n\n /**\n * PRINT_SCREEN\n */\n PRINT_SCREEN: 44,\n\n /**\n * INSERT\n */\n INSERT: 45,\n\n /**\n * DELETE\n */\n DELETE: 46,\n\n /**\n * ZERO\n */\n ZERO: 48,\n\n /**\n * ONE\n */\n ONE: 49,\n\n /**\n * TWO\n */\n TWO: 50,\n\n /**\n * THREE\n */\n THREE: 51,\n\n /**\n * FOUR\n */\n FOUR: 52,\n\n /**\n * FIVE\n */\n FIVE: 53,\n\n /**\n * SIX\n */\n SIX: 54,\n\n /**\n * SEVEN\n */\n SEVEN: 55,\n\n /**\n * EIGHT\n */\n EIGHT: 56,\n\n /**\n * NINE\n */\n NINE: 57,\n\n /**\n * QUESTION_MARK\n */\n QUESTION_MARK: 63,\n\n /**\n * A\n */\n A: 65,\n\n /**\n * B\n */\n B: 66,\n\n /**\n * C\n */\n C: 67,\n\n /**\n * D\n */\n D: 68,\n\n /**\n * E\n */\n E: 69,\n\n /**\n * F\n */\n F: 70,\n\n /**\n * G\n */\n G: 71,\n\n /**\n * H\n */\n H: 72,\n\n /**\n * I\n */\n I: 73,\n\n /**\n * J\n */\n J: 74,\n\n /**\n * K\n */\n K: 75,\n\n /**\n * L\n */\n L: 76,\n\n /**\n * M\n */\n M: 77,\n\n /**\n * N\n */\n N: 78,\n\n /**\n * O\n */\n O: 79,\n\n /**\n * P\n */\n P: 80,\n\n /**\n * Q\n */\n Q: 81,\n\n /**\n * R\n */\n R: 82,\n\n /**\n * S\n */\n S: 83,\n\n /**\n * T\n */\n T: 84,\n\n /**\n * U\n */\n U: 85,\n\n /**\n * V\n */\n V: 86,\n\n /**\n * W\n */\n W: 87,\n\n /**\n * X\n */\n X: 88,\n\n /**\n * Y\n */\n Y: 89,\n\n /**\n * Z\n */\n Z: 90,\n\n /**\n * META\n */\n META: 91,\n\n /**\n * WIN_KEY_RIGHT\n */\n WIN_KEY_RIGHT: 92,\n\n /**\n * CONTEXT_MENU\n */\n CONTEXT_MENU: 93,\n\n /**\n * NUM_ZERO\n */\n NUM_ZERO: 96,\n\n /**\n * NUM_ONE\n */\n NUM_ONE: 97,\n\n /**\n * NUM_TWO\n */\n NUM_TWO: 98,\n\n /**\n * NUM_THREE\n */\n NUM_THREE: 99,\n\n /**\n * NUM_FOUR\n */\n NUM_FOUR: 100,\n\n /**\n * NUM_FIVE\n */\n NUM_FIVE: 101,\n\n /**\n * NUM_SIX\n */\n NUM_SIX: 102,\n\n /**\n * NUM_SEVEN\n */\n NUM_SEVEN: 103,\n\n /**\n * NUM_EIGHT\n */\n NUM_EIGHT: 104,\n\n /**\n * NUM_NINE\n */\n NUM_NINE: 105,\n\n /**\n * NUM_MULTIPLY\n */\n NUM_MULTIPLY: 106,\n\n /**\n * NUM_PLUS\n */\n NUM_PLUS: 107,\n\n /**\n * NUM_MINUS\n */\n NUM_MINUS: 109,\n\n /**\n * NUM_PERIOD\n */\n NUM_PERIOD: 110,\n\n /**\n * NUM_DIVISION\n */\n NUM_DIVISION: 111,\n\n /**\n * F1\n */\n F1: 112,\n\n /**\n * F2\n */\n F2: 113,\n\n /**\n * F3\n */\n F3: 114,\n\n /**\n * F4\n */\n F4: 115,\n\n /**\n * F5\n */\n F5: 116,\n\n /**\n * F6\n */\n F6: 117,\n\n /**\n * F7\n */\n F7: 118,\n\n /**\n * F8\n */\n F8: 119,\n\n /**\n * F9\n */\n F9: 120,\n\n /**\n * F10\n */\n F10: 121,\n\n /**\n * F11\n */\n F11: 122,\n\n /**\n * F12\n */\n F12: 123,\n\n /**\n * NUMLOCK\n */\n NUMLOCK: 144,\n\n /**\n * SEMICOLON\n */\n SEMICOLON: 186,\n\n /**\n * DASH\n */\n DASH: 189,\n\n /**\n * EQUALS\n */\n EQUALS: 187,\n\n /**\n * COMMA\n */\n COMMA: 188,\n\n /**\n * PERIOD\n */\n PERIOD: 190,\n\n /**\n * SLASH\n */\n SLASH: 191,\n\n /**\n * APOSTROPHE\n */\n APOSTROPHE: 192,\n\n /**\n * SINGLE_QUOTE\n */\n SINGLE_QUOTE: 222,\n\n /**\n * OPEN_SQUARE_BRACKET\n */\n OPEN_SQUARE_BRACKET: 219,\n\n /**\n * BACKSLASH\n */\n BACKSLASH: 220,\n\n /**\n * CLOSE_SQUARE_BRACKET\n */\n CLOSE_SQUARE_BRACKET: 221,\n\n /**\n * WIN_KEY\n */\n WIN_KEY: 224,\n\n /**\n * MAC_FF_META\n */\n MAC_FF_META: 224,\n\n /**\n * WIN_IME\n */\n WIN_IME: 229,\n // ======================== Function ========================\n\n /**\n * whether text and modified key is entered at the same time.\n */\n isTextModifyingKeyEvent: function isTextModifyingKeyEvent(e) {\n var keyCode = e.keyCode;\n\n if (e.altKey && !e.ctrlKey || e.metaKey || // Function keys don't generate text\n keyCode >= KeyCode.F1 && keyCode <= KeyCode.F12) {\n return false;\n } // The following keys are quite harmless, even in combination with\n // CTRL, ALT or SHIFT.\n\n\n switch (keyCode) {\n case KeyCode.ALT:\n case KeyCode.CAPS_LOCK:\n case KeyCode.CONTEXT_MENU:\n case KeyCode.CTRL:\n case KeyCode.DOWN:\n case KeyCode.END:\n case KeyCode.ESC:\n case KeyCode.HOME:\n case KeyCode.INSERT:\n case KeyCode.LEFT:\n case KeyCode.MAC_FF_META:\n case KeyCode.META:\n case KeyCode.NUMLOCK:\n case KeyCode.NUM_CENTER:\n case KeyCode.PAGE_DOWN:\n case KeyCode.PAGE_UP:\n case KeyCode.PAUSE:\n case KeyCode.PRINT_SCREEN:\n case KeyCode.RIGHT:\n case KeyCode.SHIFT:\n case KeyCode.UP:\n case KeyCode.WIN_KEY:\n case KeyCode.WIN_KEY_RIGHT:\n return false;\n\n default:\n return true;\n }\n },\n\n /**\n * whether character is entered.\n */\n isCharacterKey: function isCharacterKey(keyCode) {\n if (keyCode >= KeyCode.ZERO && keyCode <= KeyCode.NINE) {\n return true;\n }\n\n if (keyCode >= KeyCode.NUM_ZERO && keyCode <= KeyCode.NUM_MULTIPLY) {\n return true;\n }\n\n if (keyCode >= KeyCode.A && keyCode <= KeyCode.Z) {\n return true;\n } // Safari sends zero key code for non-latin characters.\n\n\n if (window.navigator.userAgent.indexOf('WebKit') !== -1 && keyCode === 0) {\n return true;\n }\n\n switch (keyCode) {\n case KeyCode.SPACE:\n case KeyCode.QUESTION_MARK:\n case KeyCode.NUM_PLUS:\n case KeyCode.NUM_MINUS:\n case KeyCode.NUM_PERIOD:\n case KeyCode.NUM_DIVISION:\n case KeyCode.SEMICOLON:\n case KeyCode.DASH:\n case KeyCode.EQUALS:\n case KeyCode.COMMA:\n case KeyCode.PERIOD:\n case KeyCode.SLASH:\n case KeyCode.APOSTROPHE:\n case KeyCode.SINGLE_QUOTE:\n case KeyCode.OPEN_SQUARE_BRACKET:\n case KeyCode.BACKSLASH:\n case KeyCode.CLOSE_SQUARE_BRACKET:\n return true;\n\n default:\n return false;\n }\n }\n};\nexport default KeyCode;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\n\nvar Portal = /*#__PURE__*/function (_React$Component) {\n _inherits(Portal, _React$Component);\n\n var _super = _createSuper(Portal);\n\n function Portal() {\n _classCallCheck(this, Portal);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(Portal, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.createContainer();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n var didUpdate = this.props.didUpdate;\n\n if (didUpdate) {\n didUpdate(prevProps);\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.removeContainer();\n }\n }, {\n key: \"createContainer\",\n value: function createContainer() {\n this._container = this.props.getContainer();\n this.forceUpdate();\n }\n }, {\n key: \"removeContainer\",\n value: function removeContainer() {\n if (this._container) {\n this._container.parentNode.removeChild(this._container);\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n if (this._container) {\n return ReactDOM.createPortal(this.props.children, this._container);\n }\n\n return null;\n }\n }]);\n\n return Portal;\n}(React.Component);\n\nPortal.propTypes = {\n getContainer: PropTypes.func.isRequired,\n children: PropTypes.node.isRequired,\n didUpdate: PropTypes.func\n};\nexport { Portal as default };","import React from 'react';\n\nvar unsafeLifecyclesPolyfill = function unsafeLifecyclesPolyfill(Component) {\n var prototype = Component.prototype;\n\n if (!prototype || !prototype.isReactComponent) {\n throw new Error('Can only polyfill class components');\n } // only handle componentWillReceiveProps\n\n\n if (typeof prototype.componentWillReceiveProps !== 'function') {\n return Component;\n } // In React 16.9, React.Profiler was introduced together with UNSAFE_componentWillReceiveProps\n // https://reactjs.org/blog/2019/08/08/react-v16.9.0.html#performance-measurements-with-reactprofiler\n\n\n if (!React.Profiler) {\n return Component;\n } // Here polyfill get started\n\n\n prototype.UNSAFE_componentWillReceiveProps = prototype.componentWillReceiveProps;\n delete prototype.componentWillReceiveProps;\n return Component;\n};\n\nexport default unsafeLifecyclesPolyfill;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.yuv2rgb = yuv2rgb;\nexports.rgb2yuv = rgb2yuv;\nfunction yuv2rgb(yuv) {\n var y = yuv[0],\n u = yuv[1],\n v = yuv[2],\n r,\n g,\n b;\n\n r = y * 1 + u * 0 + v * 1.13983;\n g = y * 1 + u * -0.39465 + v * -0.58060;\n b = y * 1 + u * 2.02311 + v * 0;\n\n r = Math.min(Math.max(0, r), 1);\n g = Math.min(Math.max(0, g), 1);\n b = Math.min(Math.max(0, b), 1);\n\n return [r * 255, g * 255, b * 255];\n}\n\nfunction rgb2yuv(rgb) {\n var r = rgb[0] / 255,\n g = rgb[1] / 255,\n b = rgb[2] / 255;\n\n var y = r * 0.299 + g * 0.587 + b * 0.114;\n var u = r * -0.14713 + g * -0.28886 + b * 0.436;\n var v = r * 0.615 + g * -0.51499 + b * -0.10001;\n\n return [y, u, v];\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getBase16Theme = exports.createStyling = exports.invertTheme = undefined;\n\nvar _typeof2 = require('babel-runtime/helpers/typeof');\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nvar _extends2 = require('babel-runtime/helpers/extends');\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nvar _keys = require('babel-runtime/core-js/object/keys');\n\nvar _keys2 = _interopRequireDefault(_keys);\n\nvar _lodash = require('lodash.curry');\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _base = require('base16');\n\nvar base16 = _interopRequireWildcard(_base);\n\nvar _rgb2hex = require('pure-color/convert/rgb2hex');\n\nvar _rgb2hex2 = _interopRequireDefault(_rgb2hex);\n\nvar _parse = require('pure-color/parse');\n\nvar _parse2 = _interopRequireDefault(_parse);\n\nvar _lodash3 = require('lodash.flow');\n\nvar _lodash4 = _interopRequireDefault(_lodash3);\n\nvar _colorConverters = require('./colorConverters');\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar DEFAULT_BASE16 = base16.default;\n\nvar BASE16_KEYS = (0, _keys2.default)(DEFAULT_BASE16);\n\n// we need a correcting factor, so that a dark, but not black background color\n// converts to bright enough inversed color\nvar flip = function flip(x) {\n return x < 0.25 ? 1 : x < 0.5 ? 0.9 - x : 1.1 - x;\n};\n\nvar invertColor = (0, _lodash4.default)(_parse2.default, _colorConverters.rgb2yuv, function (_ref) {\n var _ref2 = (0, _slicedToArray3.default)(_ref, 3),\n y = _ref2[0],\n u = _ref2[1],\n v = _ref2[2];\n\n return [flip(y), u, v];\n}, _colorConverters.yuv2rgb, _rgb2hex2.default);\n\nvar merger = function merger(styling) {\n return function (prevStyling) {\n return {\n className: [prevStyling.className, styling.className].filter(Boolean).join(' '),\n style: (0, _extends3.default)({}, prevStyling.style || {}, styling.style || {})\n };\n };\n};\n\nvar mergeStyling = function mergeStyling(customStyling, defaultStyling) {\n if (customStyling === undefined) {\n return defaultStyling;\n }\n if (defaultStyling === undefined) {\n return customStyling;\n }\n\n var customType = typeof customStyling === 'undefined' ? 'undefined' : (0, _typeof3.default)(customStyling);\n var defaultType = typeof defaultStyling === 'undefined' ? 'undefined' : (0, _typeof3.default)(defaultStyling);\n\n switch (customType) {\n case 'string':\n switch (defaultType) {\n case 'string':\n return [defaultStyling, customStyling].filter(Boolean).join(' ');\n case 'object':\n return merger({ className: customStyling, style: defaultStyling });\n case 'function':\n return function (styling) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return merger({\n className: customStyling\n })(defaultStyling.apply(undefined, [styling].concat(args)));\n };\n }\n case 'object':\n switch (defaultType) {\n case 'string':\n return merger({ className: defaultStyling, style: customStyling });\n case 'object':\n return (0, _extends3.default)({}, defaultStyling, customStyling);\n case 'function':\n return function (styling) {\n for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n return merger({\n style: customStyling\n })(defaultStyling.apply(undefined, [styling].concat(args)));\n };\n }\n case 'function':\n switch (defaultType) {\n case 'string':\n return function (styling) {\n for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n\n return customStyling.apply(undefined, [merger(styling)({\n className: defaultStyling\n })].concat(args));\n };\n case 'object':\n return function (styling) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n return customStyling.apply(undefined, [merger(styling)({\n style: defaultStyling\n })].concat(args));\n };\n case 'function':\n return function (styling) {\n for (var _len5 = arguments.length, args = Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n args[_key5 - 1] = arguments[_key5];\n }\n\n return customStyling.apply(undefined, [defaultStyling.apply(undefined, [styling].concat(args))].concat(args));\n };\n }\n }\n};\n\nvar mergeStylings = function mergeStylings(customStylings, defaultStylings) {\n var keys = (0, _keys2.default)(defaultStylings);\n for (var key in customStylings) {\n if (keys.indexOf(key) === -1) keys.push(key);\n }\n\n return keys.reduce(function (mergedStyling, key) {\n return mergedStyling[key] = mergeStyling(customStylings[key], defaultStylings[key]), mergedStyling;\n }, {});\n};\n\nvar getStylingByKeys = function getStylingByKeys(mergedStyling, keys) {\n for (var _len6 = arguments.length, args = Array(_len6 > 2 ? _len6 - 2 : 0), _key6 = 2; _key6 < _len6; _key6++) {\n args[_key6 - 2] = arguments[_key6];\n }\n\n if (keys === null) {\n return mergedStyling;\n }\n\n if (!Array.isArray(keys)) {\n keys = [keys];\n }\n\n var styles = keys.map(function (key) {\n return mergedStyling[key];\n }).filter(Boolean);\n\n var props = styles.reduce(function (obj, s) {\n if (typeof s === 'string') {\n obj.className = [obj.className, s].filter(Boolean).join(' ');\n } else if ((typeof s === 'undefined' ? 'undefined' : (0, _typeof3.default)(s)) === 'object') {\n obj.style = (0, _extends3.default)({}, obj.style, s);\n } else if (typeof s === 'function') {\n obj = (0, _extends3.default)({}, obj, s.apply(undefined, [obj].concat(args)));\n }\n\n return obj;\n }, { className: '', style: {} });\n\n if (!props.className) {\n delete props.className;\n }\n\n if ((0, _keys2.default)(props.style).length === 0) {\n delete props.style;\n }\n\n return props;\n};\n\nvar invertTheme = exports.invertTheme = function invertTheme(theme) {\n return (0, _keys2.default)(theme).reduce(function (t, key) {\n return t[key] = /^base/.test(key) ? invertColor(theme[key]) : key === 'scheme' ? theme[key] + ':inverted' : theme[key], t;\n }, {});\n};\n\nvar createStyling = exports.createStyling = (0, _lodash2.default)(function (getStylingFromBase16) {\n for (var _len7 = arguments.length, args = Array(_len7 > 3 ? _len7 - 3 : 0), _key7 = 3; _key7 < _len7; _key7++) {\n args[_key7 - 3] = arguments[_key7];\n }\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var themeOrStyling = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var _options$defaultBase = options.defaultBase16,\n defaultBase16 = _options$defaultBase === undefined ? DEFAULT_BASE16 : _options$defaultBase,\n _options$base16Themes = options.base16Themes,\n base16Themes = _options$base16Themes === undefined ? null : _options$base16Themes;\n\n\n var base16Theme = getBase16Theme(themeOrStyling, base16Themes);\n if (base16Theme) {\n themeOrStyling = (0, _extends3.default)({}, base16Theme, themeOrStyling);\n }\n\n var theme = BASE16_KEYS.reduce(function (t, key) {\n return t[key] = themeOrStyling[key] || defaultBase16[key], t;\n }, {});\n\n var customStyling = (0, _keys2.default)(themeOrStyling).reduce(function (s, key) {\n return BASE16_KEYS.indexOf(key) === -1 ? (s[key] = themeOrStyling[key], s) : s;\n }, {});\n\n var defaultStyling = getStylingFromBase16(theme);\n\n var mergedStyling = mergeStylings(customStyling, defaultStyling);\n\n return (0, _lodash2.default)(getStylingByKeys, 2).apply(undefined, [mergedStyling].concat(args));\n}, 3);\n\nvar getBase16Theme = exports.getBase16Theme = function getBase16Theme(theme, base16Themes) {\n if (theme && theme.extend) {\n theme = theme.extend;\n }\n\n if (typeof theme === 'string') {\n var _theme$split = theme.split(':'),\n _theme$split2 = (0, _slicedToArray3.default)(_theme$split, 2),\n themeName = _theme$split2[0],\n modifier = _theme$split2[1];\n\n theme = (base16Themes || {})[themeName] || base16[themeName];\n if (modifier === 'inverted') {\n theme = invertTheme(theme);\n }\n }\n\n return theme && theme.hasOwnProperty('base00') ? theme : undefined;\n};","/** @license React v16.14.0\n * react-dom.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\nvar React = require('react');\nvar _assign = require('object-assign');\nvar Scheduler = require('scheduler');\nvar checkPropTypes = require('prop-types/checkPropTypes');\nvar tracing = require('scheduler/tracing');\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; // Prevent newer renderers from RTE when used with older react package versions.\n// Current owner and dispatcher used to share the same ref,\n// but PR #14548 split them out to better support the react-debug-tools package.\n\nif (!ReactSharedInternals.hasOwnProperty('ReactCurrentDispatcher')) {\n ReactSharedInternals.ReactCurrentDispatcher = {\n current: null\n };\n}\n\nif (!ReactSharedInternals.hasOwnProperty('ReactCurrentBatchConfig')) {\n ReactSharedInternals.ReactCurrentBatchConfig = {\n suspense: null\n };\n}\n\n// by calls to these methods by a Babel plugin.\n//\n// In PROD (or in packages without access to React internals),\n// they are left as they are instead.\n\nfunction warn(format) {\n {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n printWarning('warn', format, args);\n }\n}\nfunction error(format) {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var hasExistingStack = args.length > 0 && typeof args[args.length - 1] === 'string' && args[args.length - 1].indexOf('\\n in') === 0;\n\n if (!hasExistingStack) {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n }\n }\n\n var argsWithFormat = args.map(function (item) {\n return '' + item;\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n throw new Error(message);\n } catch (x) {}\n }\n}\n\nif (!React) {\n {\n throw Error( \"ReactDOM was loaded before React. Make sure you load the React package before loading ReactDOM.\" );\n }\n}\n\nvar invokeGuardedCallbackImpl = function (name, func, context, a, b, c, d, e, f) {\n var funcArgs = Array.prototype.slice.call(arguments, 3);\n\n try {\n func.apply(context, funcArgs);\n } catch (error) {\n this.onError(error);\n }\n};\n\n{\n // In DEV mode, we swap out invokeGuardedCallback for a special version\n // that plays more nicely with the browser's DevTools. The idea is to preserve\n // \"Pause on exceptions\" behavior. Because React wraps all user-provided\n // functions in invokeGuardedCallback, and the production version of\n // invokeGuardedCallback uses a try-catch, all user exceptions are treated\n // like caught exceptions, and the DevTools won't pause unless the developer\n // takes the extra step of enabling pause on caught exceptions. This is\n // unintuitive, though, because even though React has caught the error, from\n // the developer's perspective, the error is uncaught.\n //\n // To preserve the expected \"Pause on exceptions\" behavior, we don't use a\n // try-catch in DEV. Instead, we synchronously dispatch a fake event to a fake\n // DOM node, and call the user-provided callback from inside an event handler\n // for that fake event. If the callback throws, the error is \"captured\" using\n // a global event handler. But because the error happens in a different\n // event loop context, it does not interrupt the normal program flow.\n // Effectively, this gives us try-catch behavior without actually using\n // try-catch. Neat!\n // Check that the browser supports the APIs we need to implement our special\n // DEV version of invokeGuardedCallback\n if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {\n var fakeNode = document.createElement('react');\n\n var invokeGuardedCallbackDev = function (name, func, context, a, b, c, d, e, f) {\n // If document doesn't exist we know for sure we will crash in this method\n // when we call document.createEvent(). However this can cause confusing\n // errors: https://github.com/facebookincubator/create-react-app/issues/3482\n // So we preemptively throw with a better message instead.\n if (!(typeof document !== 'undefined')) {\n {\n throw Error( \"The `document` global was defined when React was initialized, but is not defined anymore. This can happen in a test environment if a component schedules an update from an asynchronous callback, but the test has already finished running. To solve this, you can either unmount the component at the end of your test (and ensure that any asynchronous operations get canceled in `componentWillUnmount`), or you can change the test itself to be asynchronous.\" );\n }\n }\n\n var evt = document.createEvent('Event'); // Keeps track of whether the user-provided callback threw an error. We\n // set this to true at the beginning, then set it to false right after\n // calling the function. If the function errors, `didError` will never be\n // set to false. This strategy works even if the browser is flaky and\n // fails to call our global error handler, because it doesn't rely on\n // the error event at all.\n\n var didError = true; // Keeps track of the value of window.event so that we can reset it\n // during the callback to let user code access window.event in the\n // browsers that support it.\n\n var windowEvent = window.event; // Keeps track of the descriptor of window.event to restore it after event\n // dispatching: https://github.com/facebook/react/issues/13688\n\n var windowEventDescriptor = Object.getOwnPropertyDescriptor(window, 'event'); // Create an event handler for our fake event. We will synchronously\n // dispatch our fake event using `dispatchEvent`. Inside the handler, we\n // call the user-provided callback.\n\n var funcArgs = Array.prototype.slice.call(arguments, 3);\n\n function callCallback() {\n // We immediately remove the callback from event listeners so that\n // nested `invokeGuardedCallback` calls do not clash. Otherwise, a\n // nested call would trigger the fake event handlers of any call higher\n // in the stack.\n fakeNode.removeEventListener(evtType, callCallback, false); // We check for window.hasOwnProperty('event') to prevent the\n // window.event assignment in both IE <= 10 as they throw an error\n // \"Member not found\" in strict mode, and in Firefox which does not\n // support window.event.\n\n if (typeof window.event !== 'undefined' && window.hasOwnProperty('event')) {\n window.event = windowEvent;\n }\n\n func.apply(context, funcArgs);\n didError = false;\n } // Create a global error event handler. We use this to capture the value\n // that was thrown. It's possible that this error handler will fire more\n // than once; for example, if non-React code also calls `dispatchEvent`\n // and a handler for that event throws. We should be resilient to most of\n // those cases. Even if our error event handler fires more than once, the\n // last error event is always used. If the callback actually does error,\n // we know that the last error event is the correct one, because it's not\n // possible for anything else to have happened in between our callback\n // erroring and the code that follows the `dispatchEvent` call below. If\n // the callback doesn't error, but the error event was fired, we know to\n // ignore it because `didError` will be false, as described above.\n\n\n var error; // Use this to track whether the error event is ever called.\n\n var didSetError = false;\n var isCrossOriginError = false;\n\n function handleWindowError(event) {\n error = event.error;\n didSetError = true;\n\n if (error === null && event.colno === 0 && event.lineno === 0) {\n isCrossOriginError = true;\n }\n\n if (event.defaultPrevented) {\n // Some other error handler has prevented default.\n // Browsers silence the error report if this happens.\n // We'll remember this to later decide whether to log it or not.\n if (error != null && typeof error === 'object') {\n try {\n error._suppressLogging = true;\n } catch (inner) {// Ignore.\n }\n }\n }\n } // Create a fake event type.\n\n\n var evtType = \"react-\" + (name ? name : 'invokeguardedcallback'); // Attach our event handlers\n\n window.addEventListener('error', handleWindowError);\n fakeNode.addEventListener(evtType, callCallback, false); // Synchronously dispatch our fake event. If the user-provided function\n // errors, it will trigger our global error handler.\n\n evt.initEvent(evtType, false, false);\n fakeNode.dispatchEvent(evt);\n\n if (windowEventDescriptor) {\n Object.defineProperty(window, 'event', windowEventDescriptor);\n }\n\n if (didError) {\n if (!didSetError) {\n // The callback errored, but the error event never fired.\n error = new Error('An error was thrown inside one of your components, but React ' + \"doesn't know what it was. This is likely due to browser \" + 'flakiness. React does its best to preserve the \"Pause on ' + 'exceptions\" behavior of the DevTools, which requires some ' + \"DEV-mode only tricks. It's possible that these don't work in \" + 'your browser. Try triggering the error in production mode, ' + 'or switching to a modern browser. If you suspect that this is ' + 'actually an issue with React, please file an issue.');\n } else if (isCrossOriginError) {\n error = new Error(\"A cross-origin error was thrown. React doesn't have access to \" + 'the actual error object in development. ' + 'See https://fb.me/react-crossorigin-error for more information.');\n }\n\n this.onError(error);\n } // Remove our event listeners\n\n\n window.removeEventListener('error', handleWindowError);\n };\n\n invokeGuardedCallbackImpl = invokeGuardedCallbackDev;\n }\n}\n\nvar invokeGuardedCallbackImpl$1 = invokeGuardedCallbackImpl;\n\nvar hasError = false;\nvar caughtError = null; // Used by event system to capture/rethrow the first error.\n\nvar hasRethrowError = false;\nvar rethrowError = null;\nvar reporter = {\n onError: function (error) {\n hasError = true;\n caughtError = error;\n }\n};\n/**\n * Call a function while guarding against errors that happens within it.\n * Returns an error if it throws, otherwise null.\n *\n * In production, this is implemented using a try-catch. The reason we don't\n * use a try-catch directly is so that we can swap out a different\n * implementation in DEV mode.\n *\n * @param {String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} context The context to use when calling the function\n * @param {...*} args Arguments for function\n */\n\nfunction invokeGuardedCallback(name, func, context, a, b, c, d, e, f) {\n hasError = false;\n caughtError = null;\n invokeGuardedCallbackImpl$1.apply(reporter, arguments);\n}\n/**\n * Same as invokeGuardedCallback, but instead of returning an error, it stores\n * it in a global so it can be rethrown by `rethrowCaughtError` later.\n * TODO: See if caughtError and rethrowError can be unified.\n *\n * @param {String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} context The context to use when calling the function\n * @param {...*} args Arguments for function\n */\n\nfunction invokeGuardedCallbackAndCatchFirstError(name, func, context, a, b, c, d, e, f) {\n invokeGuardedCallback.apply(this, arguments);\n\n if (hasError) {\n var error = clearCaughtError();\n\n if (!hasRethrowError) {\n hasRethrowError = true;\n rethrowError = error;\n }\n }\n}\n/**\n * During execution of guarded functions we will capture the first error which\n * we will rethrow to be handled by the top level error handler.\n */\n\nfunction rethrowCaughtError() {\n if (hasRethrowError) {\n var error = rethrowError;\n hasRethrowError = false;\n rethrowError = null;\n throw error;\n }\n}\nfunction hasCaughtError() {\n return hasError;\n}\nfunction clearCaughtError() {\n if (hasError) {\n var error = caughtError;\n hasError = false;\n caughtError = null;\n return error;\n } else {\n {\n {\n throw Error( \"clearCaughtError was called but no error was captured. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n }\n}\n\nvar getFiberCurrentPropsFromNode = null;\nvar getInstanceFromNode = null;\nvar getNodeFromInstance = null;\nfunction setComponentTree(getFiberCurrentPropsFromNodeImpl, getInstanceFromNodeImpl, getNodeFromInstanceImpl) {\n getFiberCurrentPropsFromNode = getFiberCurrentPropsFromNodeImpl;\n getInstanceFromNode = getInstanceFromNodeImpl;\n getNodeFromInstance = getNodeFromInstanceImpl;\n\n {\n if (!getNodeFromInstance || !getInstanceFromNode) {\n error('EventPluginUtils.setComponentTree(...): Injected ' + 'module is missing getNodeFromInstance or getInstanceFromNode.');\n }\n }\n}\nvar validateEventDispatches;\n\n{\n validateEventDispatches = function (event) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchInstances = event._dispatchInstances;\n var listenersIsArr = Array.isArray(dispatchListeners);\n var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;\n var instancesIsArr = Array.isArray(dispatchInstances);\n var instancesLen = instancesIsArr ? dispatchInstances.length : dispatchInstances ? 1 : 0;\n\n if (instancesIsArr !== listenersIsArr || instancesLen !== listenersLen) {\n error('EventPluginUtils: Invalid `event`.');\n }\n };\n}\n/**\n * Dispatch the event to the listener.\n * @param {SyntheticEvent} event SyntheticEvent to handle\n * @param {function} listener Application-level callback\n * @param {*} inst Internal component instance\n */\n\n\nfunction executeDispatch(event, listener, inst) {\n var type = event.type || 'unknown-event';\n event.currentTarget = getNodeFromInstance(inst);\n invokeGuardedCallbackAndCatchFirstError(type, listener, undefined, event);\n event.currentTarget = null;\n}\n/**\n * Standard/simple iteration through an event's collected dispatches.\n */\n\nfunction executeDispatchesInOrder(event) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchInstances = event._dispatchInstances;\n\n {\n validateEventDispatches(event);\n }\n\n if (Array.isArray(dispatchListeners)) {\n for (var i = 0; i < dispatchListeners.length; i++) {\n if (event.isPropagationStopped()) {\n break;\n } // Listeners and Instances are two parallel arrays that are always in sync.\n\n\n executeDispatch(event, dispatchListeners[i], dispatchInstances[i]);\n }\n } else if (dispatchListeners) {\n executeDispatch(event, dispatchListeners, dispatchInstances);\n }\n\n event._dispatchListeners = null;\n event._dispatchInstances = null;\n}\n\nvar FunctionComponent = 0;\nvar ClassComponent = 1;\nvar IndeterminateComponent = 2; // Before we know whether it is function or class\n\nvar HostRoot = 3; // Root of a host tree. Could be nested inside another node.\n\nvar HostPortal = 4; // A subtree. Could be an entry point to a different renderer.\n\nvar HostComponent = 5;\nvar HostText = 6;\nvar Fragment = 7;\nvar Mode = 8;\nvar ContextConsumer = 9;\nvar ContextProvider = 10;\nvar ForwardRef = 11;\nvar Profiler = 12;\nvar SuspenseComponent = 13;\nvar MemoComponent = 14;\nvar SimpleMemoComponent = 15;\nvar LazyComponent = 16;\nvar IncompleteClassComponent = 17;\nvar DehydratedFragment = 18;\nvar SuspenseListComponent = 19;\nvar FundamentalComponent = 20;\nvar ScopeComponent = 21;\nvar Block = 22;\n\n/**\n * Injectable ordering of event plugins.\n */\nvar eventPluginOrder = null;\n/**\n * Injectable mapping from names to event plugin modules.\n */\n\nvar namesToPlugins = {};\n/**\n * Recomputes the plugin list using the injected plugins and plugin ordering.\n *\n * @private\n */\n\nfunction recomputePluginOrdering() {\n if (!eventPluginOrder) {\n // Wait until an `eventPluginOrder` is injected.\n return;\n }\n\n for (var pluginName in namesToPlugins) {\n var pluginModule = namesToPlugins[pluginName];\n var pluginIndex = eventPluginOrder.indexOf(pluginName);\n\n if (!(pluginIndex > -1)) {\n {\n throw Error( \"EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `\" + pluginName + \"`.\" );\n }\n }\n\n if (plugins[pluginIndex]) {\n continue;\n }\n\n if (!pluginModule.extractEvents) {\n {\n throw Error( \"EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `\" + pluginName + \"` does not.\" );\n }\n }\n\n plugins[pluginIndex] = pluginModule;\n var publishedEvents = pluginModule.eventTypes;\n\n for (var eventName in publishedEvents) {\n if (!publishEventForPlugin(publishedEvents[eventName], pluginModule, eventName)) {\n {\n throw Error( \"EventPluginRegistry: Failed to publish event `\" + eventName + \"` for plugin `\" + pluginName + \"`.\" );\n }\n }\n }\n }\n}\n/**\n * Publishes an event so that it can be dispatched by the supplied plugin.\n *\n * @param {object} dispatchConfig Dispatch configuration for the event.\n * @param {object} PluginModule Plugin publishing the event.\n * @return {boolean} True if the event was successfully published.\n * @private\n */\n\n\nfunction publishEventForPlugin(dispatchConfig, pluginModule, eventName) {\n if (!!eventNameDispatchConfigs.hasOwnProperty(eventName)) {\n {\n throw Error( \"EventPluginRegistry: More than one plugin attempted to publish the same event name, `\" + eventName + \"`.\" );\n }\n }\n\n eventNameDispatchConfigs[eventName] = dispatchConfig;\n var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;\n\n if (phasedRegistrationNames) {\n for (var phaseName in phasedRegistrationNames) {\n if (phasedRegistrationNames.hasOwnProperty(phaseName)) {\n var phasedRegistrationName = phasedRegistrationNames[phaseName];\n publishRegistrationName(phasedRegistrationName, pluginModule, eventName);\n }\n }\n\n return true;\n } else if (dispatchConfig.registrationName) {\n publishRegistrationName(dispatchConfig.registrationName, pluginModule, eventName);\n return true;\n }\n\n return false;\n}\n/**\n * Publishes a registration name that is used to identify dispatched events.\n *\n * @param {string} registrationName Registration name to add.\n * @param {object} PluginModule Plugin publishing the event.\n * @private\n */\n\n\nfunction publishRegistrationName(registrationName, pluginModule, eventName) {\n if (!!registrationNameModules[registrationName]) {\n {\n throw Error( \"EventPluginRegistry: More than one plugin attempted to publish the same registration name, `\" + registrationName + \"`.\" );\n }\n }\n\n registrationNameModules[registrationName] = pluginModule;\n registrationNameDependencies[registrationName] = pluginModule.eventTypes[eventName].dependencies;\n\n {\n var lowerCasedName = registrationName.toLowerCase();\n possibleRegistrationNames[lowerCasedName] = registrationName;\n\n if (registrationName === 'onDoubleClick') {\n possibleRegistrationNames.ondblclick = registrationName;\n }\n }\n}\n/**\n * Registers plugins so that they can extract and dispatch events.\n */\n\n/**\n * Ordered list of injected plugins.\n */\n\n\nvar plugins = [];\n/**\n * Mapping from event name to dispatch config\n */\n\nvar eventNameDispatchConfigs = {};\n/**\n * Mapping from registration name to plugin module\n */\n\nvar registrationNameModules = {};\n/**\n * Mapping from registration name to event name\n */\n\nvar registrationNameDependencies = {};\n/**\n * Mapping from lowercase registration names to the properly cased version,\n * used to warn in the case of missing event handlers. Available\n * only in true.\n * @type {Object}\n */\n\nvar possibleRegistrationNames = {} ; // Trust the developer to only use possibleRegistrationNames in true\n\n/**\n * Injects an ordering of plugins (by plugin name). This allows the ordering\n * to be decoupled from injection of the actual plugins so that ordering is\n * always deterministic regardless of packaging, on-the-fly injection, etc.\n *\n * @param {array} InjectedEventPluginOrder\n * @internal\n */\n\nfunction injectEventPluginOrder(injectedEventPluginOrder) {\n if (!!eventPluginOrder) {\n {\n throw Error( \"EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React.\" );\n }\n } // Clone the ordering so it cannot be dynamically mutated.\n\n\n eventPluginOrder = Array.prototype.slice.call(injectedEventPluginOrder);\n recomputePluginOrdering();\n}\n/**\n * Injects plugins to be used by plugin event system. The plugin names must be\n * in the ordering injected by `injectEventPluginOrder`.\n *\n * Plugins can be injected as part of page initialization or on-the-fly.\n *\n * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n * @internal\n */\n\nfunction injectEventPluginsByName(injectedNamesToPlugins) {\n var isOrderingDirty = false;\n\n for (var pluginName in injectedNamesToPlugins) {\n if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {\n continue;\n }\n\n var pluginModule = injectedNamesToPlugins[pluginName];\n\n if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== pluginModule) {\n if (!!namesToPlugins[pluginName]) {\n {\n throw Error( \"EventPluginRegistry: Cannot inject two different event plugins using the same name, `\" + pluginName + \"`.\" );\n }\n }\n\n namesToPlugins[pluginName] = pluginModule;\n isOrderingDirty = true;\n }\n }\n\n if (isOrderingDirty) {\n recomputePluginOrdering();\n }\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\n\nvar PLUGIN_EVENT_SYSTEM = 1;\nvar IS_REPLAYED = 1 << 5;\nvar IS_FIRST_ANCESTOR = 1 << 6;\n\nvar restoreImpl = null;\nvar restoreTarget = null;\nvar restoreQueue = null;\n\nfunction restoreStateOfTarget(target) {\n // We perform this translation at the end of the event loop so that we\n // always receive the correct fiber here\n var internalInstance = getInstanceFromNode(target);\n\n if (!internalInstance) {\n // Unmounted\n return;\n }\n\n if (!(typeof restoreImpl === 'function')) {\n {\n throw Error( \"setRestoreImplementation() needs to be called to handle a target for controlled events. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n var stateNode = internalInstance.stateNode; // Guard against Fiber being unmounted.\n\n if (stateNode) {\n var _props = getFiberCurrentPropsFromNode(stateNode);\n\n restoreImpl(internalInstance.stateNode, internalInstance.type, _props);\n }\n}\n\nfunction setRestoreImplementation(impl) {\n restoreImpl = impl;\n}\nfunction enqueueStateRestore(target) {\n if (restoreTarget) {\n if (restoreQueue) {\n restoreQueue.push(target);\n } else {\n restoreQueue = [target];\n }\n } else {\n restoreTarget = target;\n }\n}\nfunction needsStateRestore() {\n return restoreTarget !== null || restoreQueue !== null;\n}\nfunction restoreStateIfNeeded() {\n if (!restoreTarget) {\n return;\n }\n\n var target = restoreTarget;\n var queuedTargets = restoreQueue;\n restoreTarget = null;\n restoreQueue = null;\n restoreStateOfTarget(target);\n\n if (queuedTargets) {\n for (var i = 0; i < queuedTargets.length; i++) {\n restoreStateOfTarget(queuedTargets[i]);\n }\n }\n}\n\nvar enableProfilerTimer = true; // Trace which interactions trigger each commit.\n\nvar enableDeprecatedFlareAPI = false; // Experimental Host Component support.\n\nvar enableFundamentalAPI = false; // Experimental Scope support.\nvar warnAboutStringRefs = false;\n\n// the renderer. Such as when we're dispatching events or if third party\n// libraries need to call batchedUpdates. Eventually, this API will go away when\n// everything is batched by default. We'll then have a similar API to opt-out of\n// scheduled work and instead do synchronous work.\n// Defaults\n\nvar batchedUpdatesImpl = function (fn, bookkeeping) {\n return fn(bookkeeping);\n};\n\nvar discreteUpdatesImpl = function (fn, a, b, c, d) {\n return fn(a, b, c, d);\n};\n\nvar flushDiscreteUpdatesImpl = function () {};\n\nvar batchedEventUpdatesImpl = batchedUpdatesImpl;\nvar isInsideEventHandler = false;\nvar isBatchingEventUpdates = false;\n\nfunction finishEventHandler() {\n // Here we wait until all updates have propagated, which is important\n // when using controlled components within layers:\n // https://github.com/facebook/react/issues/1698\n // Then we restore state of any controlled component.\n var controlledComponentsHavePendingUpdates = needsStateRestore();\n\n if (controlledComponentsHavePendingUpdates) {\n // If a controlled event was fired, we may need to restore the state of\n // the DOM node back to the controlled value. This is necessary when React\n // bails out of the update without touching the DOM.\n flushDiscreteUpdatesImpl();\n restoreStateIfNeeded();\n }\n}\n\nfunction batchedUpdates(fn, bookkeeping) {\n if (isInsideEventHandler) {\n // If we are currently inside another batch, we need to wait until it\n // fully completes before restoring state.\n return fn(bookkeeping);\n }\n\n isInsideEventHandler = true;\n\n try {\n return batchedUpdatesImpl(fn, bookkeeping);\n } finally {\n isInsideEventHandler = false;\n finishEventHandler();\n }\n}\nfunction batchedEventUpdates(fn, a, b) {\n if (isBatchingEventUpdates) {\n // If we are currently inside another batch, we need to wait until it\n // fully completes before restoring state.\n return fn(a, b);\n }\n\n isBatchingEventUpdates = true;\n\n try {\n return batchedEventUpdatesImpl(fn, a, b);\n } finally {\n isBatchingEventUpdates = false;\n finishEventHandler();\n }\n} // This is for the React Flare event system\nfunction discreteUpdates(fn, a, b, c, d) {\n var prevIsInsideEventHandler = isInsideEventHandler;\n isInsideEventHandler = true;\n\n try {\n return discreteUpdatesImpl(fn, a, b, c, d);\n } finally {\n isInsideEventHandler = prevIsInsideEventHandler;\n\n if (!isInsideEventHandler) {\n finishEventHandler();\n }\n }\n}\nfunction flushDiscreteUpdatesIfNeeded(timeStamp) {\n // event.timeStamp isn't overly reliable due to inconsistencies in\n // how different browsers have historically provided the time stamp.\n // Some browsers provide high-resolution time stamps for all events,\n // some provide low-resolution time stamps for all events. FF < 52\n // even mixes both time stamps together. Some browsers even report\n // negative time stamps or time stamps that are 0 (iOS9) in some cases.\n // Given we are only comparing two time stamps with equality (!==),\n // we are safe from the resolution differences. If the time stamp is 0\n // we bail-out of preventing the flush, which can affect semantics,\n // such as if an earlier flush removes or adds event listeners that\n // are fired in the subsequent flush. However, this is the same\n // behaviour as we had before this change, so the risks are low.\n if (!isInsideEventHandler && (!enableDeprecatedFlareAPI )) {\n flushDiscreteUpdatesImpl();\n }\n}\nfunction setBatchingImplementation(_batchedUpdatesImpl, _discreteUpdatesImpl, _flushDiscreteUpdatesImpl, _batchedEventUpdatesImpl) {\n batchedUpdatesImpl = _batchedUpdatesImpl;\n discreteUpdatesImpl = _discreteUpdatesImpl;\n flushDiscreteUpdatesImpl = _flushDiscreteUpdatesImpl;\n batchedEventUpdatesImpl = _batchedEventUpdatesImpl;\n}\n\nvar DiscreteEvent = 0;\nvar UserBlockingEvent = 1;\nvar ContinuousEvent = 2;\n\n// A reserved attribute.\n// It is handled by React separately and shouldn't be written to the DOM.\nvar RESERVED = 0; // A simple string attribute.\n// Attributes that aren't in the whitelist are presumed to have this type.\n\nvar STRING = 1; // A string attribute that accepts booleans in React. In HTML, these are called\n// \"enumerated\" attributes with \"true\" and \"false\" as possible values.\n// When true, it should be set to a \"true\" string.\n// When false, it should be set to a \"false\" string.\n\nvar BOOLEANISH_STRING = 2; // A real boolean attribute.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n\nvar BOOLEAN = 3; // An attribute that can be used as a flag as well as with a value.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n// For any other value, should be present with that value.\n\nvar OVERLOADED_BOOLEAN = 4; // An attribute that must be numeric or parse as a numeric.\n// When falsy, it should be removed.\n\nvar NUMERIC = 5; // An attribute that must be positive numeric or parse as a positive numeric.\n// When falsy, it should be removed.\n\nvar POSITIVE_NUMERIC = 6;\n\n/* eslint-disable max-len */\nvar ATTRIBUTE_NAME_START_CHAR = \":A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\n/* eslint-enable max-len */\n\nvar ATTRIBUTE_NAME_CHAR = ATTRIBUTE_NAME_START_CHAR + \"\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\nvar ROOT_ATTRIBUTE_NAME = 'data-reactroot';\nvar VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar illegalAttributeNameCache = {};\nvar validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) {\n return true;\n }\n\n if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) {\n return false;\n }\n\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n validatedAttributeNameCache[attributeName] = true;\n return true;\n }\n\n illegalAttributeNameCache[attributeName] = true;\n\n {\n error('Invalid attribute name: `%s`', attributeName);\n }\n\n return false;\n}\nfunction shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag) {\n if (propertyInfo !== null) {\n return propertyInfo.type === RESERVED;\n }\n\n if (isCustomComponentTag) {\n return false;\n }\n\n if (name.length > 2 && (name[0] === 'o' || name[0] === 'O') && (name[1] === 'n' || name[1] === 'N')) {\n return true;\n }\n\n return false;\n}\nfunction shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag) {\n if (propertyInfo !== null && propertyInfo.type === RESERVED) {\n return false;\n }\n\n switch (typeof value) {\n case 'function': // $FlowIssue symbol is perfectly valid here\n\n case 'symbol':\n // eslint-disable-line\n return true;\n\n case 'boolean':\n {\n if (isCustomComponentTag) {\n return false;\n }\n\n if (propertyInfo !== null) {\n return !propertyInfo.acceptsBooleans;\n } else {\n var prefix = name.toLowerCase().slice(0, 5);\n return prefix !== 'data-' && prefix !== 'aria-';\n }\n }\n\n default:\n return false;\n }\n}\nfunction shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag) {\n if (value === null || typeof value === 'undefined') {\n return true;\n }\n\n if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag)) {\n return true;\n }\n\n if (isCustomComponentTag) {\n return false;\n }\n\n if (propertyInfo !== null) {\n switch (propertyInfo.type) {\n case BOOLEAN:\n return !value;\n\n case OVERLOADED_BOOLEAN:\n return value === false;\n\n case NUMERIC:\n return isNaN(value);\n\n case POSITIVE_NUMERIC:\n return isNaN(value) || value < 1;\n }\n }\n\n return false;\n}\nfunction getPropertyInfo(name) {\n return properties.hasOwnProperty(name) ? properties[name] : null;\n}\n\nfunction PropertyInfoRecord(name, type, mustUseProperty, attributeName, attributeNamespace, sanitizeURL) {\n this.acceptsBooleans = type === BOOLEANISH_STRING || type === BOOLEAN || type === OVERLOADED_BOOLEAN;\n this.attributeName = attributeName;\n this.attributeNamespace = attributeNamespace;\n this.mustUseProperty = mustUseProperty;\n this.propertyName = name;\n this.type = type;\n this.sanitizeURL = sanitizeURL;\n} // When adding attributes to this list, be sure to also add them to\n// the `possibleStandardNames` module to ensure casing and incorrect\n// name warnings.\n\n\nvar properties = {}; // These props are reserved by React. They shouldn't be written to the DOM.\n\nvar reservedProps = ['children', 'dangerouslySetInnerHTML', // TODO: This prevents the assignment of defaultValue to regular\n// elements (not just inputs). Now that ReactDOMInput assigns to the\n// defaultValue property -- do we need this?\n'defaultValue', 'defaultChecked', 'innerHTML', 'suppressContentEditableWarning', 'suppressHydrationWarning', 'style'];\n\nreservedProps.forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, RESERVED, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n}); // A few React string attributes have a different name.\n// This is a mapping from React prop names to the attribute names.\n\n[['acceptCharset', 'accept-charset'], ['className', 'class'], ['htmlFor', 'for'], ['httpEquiv', 'http-equiv']].forEach(function (_ref) {\n var name = _ref[0],\n attributeName = _ref[1];\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, // attributeName\n null, // attributeNamespace\n false);\n}); // These are \"enumerated\" HTML attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n\n['contentEditable', 'draggable', 'spellCheck', 'value'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n name.toLowerCase(), // attributeName\n null, // attributeNamespace\n false);\n}); // These are \"enumerated\" SVG attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n// Since these are SVG attributes, their attribute names are case-sensitive.\n\n['autoReverse', 'externalResourcesRequired', 'focusable', 'preserveAlpha'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n}); // These are HTML boolean attributes.\n\n['allowFullScreen', 'async', // Note: there is a special case that prevents it from being written to the DOM\n// on the client side because the browsers are inconsistent. Instead we call focus().\n'autoFocus', 'autoPlay', 'controls', 'default', 'defer', 'disabled', 'disablePictureInPicture', 'formNoValidate', 'hidden', 'loop', 'noModule', 'noValidate', 'open', 'playsInline', 'readOnly', 'required', 'reversed', 'scoped', 'seamless', // Microdata\n'itemScope'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEAN, false, // mustUseProperty\n name.toLowerCase(), // attributeName\n null, // attributeNamespace\n false);\n}); // These are the few React props that we set as DOM properties\n// rather than attributes. These are all booleans.\n\n['checked', // Note: `option.selected` is not updated if `select.multiple` is\n// disabled with `removeAttribute`. We have special logic for handling this.\n'multiple', 'muted', 'selected' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEAN, true, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n}); // These are HTML attributes that are \"overloaded booleans\": they behave like\n// booleans, but can also accept a string value.\n\n['capture', 'download' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, OVERLOADED_BOOLEAN, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n}); // These are HTML attributes that must be positive numbers.\n\n['cols', 'rows', 'size', 'span' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, POSITIVE_NUMERIC, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n}); // These are HTML attributes that must be numbers.\n\n['rowSpan', 'start'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, NUMERIC, false, // mustUseProperty\n name.toLowerCase(), // attributeName\n null, // attributeNamespace\n false);\n});\nvar CAMELIZE = /[\\-\\:]([a-z])/g;\n\nvar capitalize = function (token) {\n return token[1].toUpperCase();\n}; // This is a list of all SVG attributes that need special casing, namespacing,\n// or boolean value assignment. Regular attributes that just accept strings\n// and have the same names are omitted, just like in the HTML whitelist.\n// Some of these attributes can be hard to find. This list was created by\n// scraping the MDN documentation.\n\n\n['accent-height', 'alignment-baseline', 'arabic-form', 'baseline-shift', 'cap-height', 'clip-path', 'clip-rule', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'dominant-baseline', 'enable-background', 'fill-opacity', 'fill-rule', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-name', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'horiz-adv-x', 'horiz-origin-x', 'image-rendering', 'letter-spacing', 'lighting-color', 'marker-end', 'marker-mid', 'marker-start', 'overline-position', 'overline-thickness', 'paint-order', 'panose-1', 'pointer-events', 'rendering-intent', 'shape-rendering', 'stop-color', 'stop-opacity', 'strikethrough-position', 'strikethrough-thickness', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-decoration', 'text-rendering', 'underline-position', 'underline-thickness', 'unicode-bidi', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'vector-effect', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'word-spacing', 'writing-mode', 'xmlns:xlink', 'x-height' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n var name = attributeName.replace(CAMELIZE, capitalize);\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, null, // attributeNamespace\n false);\n}); // String SVG attributes with the xlink namespace.\n\n['xlink:actuate', 'xlink:arcrole', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n var name = attributeName.replace(CAMELIZE, capitalize);\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, 'http://www.w3.org/1999/xlink', false);\n}); // String SVG attributes with the xml namespace.\n\n['xml:base', 'xml:lang', 'xml:space' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n var name = attributeName.replace(CAMELIZE, capitalize);\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, 'http://www.w3.org/XML/1998/namespace', false);\n}); // These attribute exists both in HTML and SVG.\n// The attribute name is case-sensitive in SVG so we can't just use\n// the React name like we do for attributes that exist only in HTML.\n\n['tabIndex', 'crossOrigin'].forEach(function (attributeName) {\n properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n attributeName.toLowerCase(), // attributeName\n null, // attributeNamespace\n false);\n}); // These attributes accept URLs. These must not allow javascript: URLS.\n// These will also need to accept Trusted Types object in the future.\n\nvar xlinkHref = 'xlinkHref';\nproperties[xlinkHref] = new PropertyInfoRecord('xlinkHref', STRING, false, // mustUseProperty\n'xlink:href', 'http://www.w3.org/1999/xlink', true);\n['src', 'href', 'action', 'formAction'].forEach(function (attributeName) {\n properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n attributeName.toLowerCase(), // attributeName\n null, // attributeNamespace\n true);\n});\n\nvar ReactDebugCurrentFrame = null;\n\n{\n ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n} // A javascript: URL can contain leading C0 control or \\u0020 SPACE,\n// and any newline or tab are filtered out as if they're not part of the URL.\n// https://url.spec.whatwg.org/#url-parsing\n// Tab or newline are defined as \\r\\n\\t:\n// https://infra.spec.whatwg.org/#ascii-tab-or-newline\n// A C0 control is a code point in the range \\u0000 NULL to \\u001F\n// INFORMATION SEPARATOR ONE, inclusive:\n// https://infra.spec.whatwg.org/#c0-control-or-space\n\n/* eslint-disable max-len */\n\n\nvar isJavaScriptProtocol = /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*\\:/i;\nvar didWarn = false;\n\nfunction sanitizeURL(url) {\n {\n if (!didWarn && isJavaScriptProtocol.test(url)) {\n didWarn = true;\n\n error('A future version of React will block javascript: URLs as a security precaution. ' + 'Use event handlers instead if you can. If you need to generate unsafe HTML try ' + 'using dangerouslySetInnerHTML instead. React was passed %s.', JSON.stringify(url));\n }\n }\n}\n\n/**\n * Get the value for a property on a node. Only used in DEV for SSR validation.\n * The \"expected\" argument is used as a hint of what the expected value is.\n * Some properties have multiple equivalent values.\n */\nfunction getValueForProperty(node, name, expected, propertyInfo) {\n {\n if (propertyInfo.mustUseProperty) {\n var propertyName = propertyInfo.propertyName;\n return node[propertyName];\n } else {\n if ( propertyInfo.sanitizeURL) {\n // If we haven't fully disabled javascript: URLs, and if\n // the hydration is successful of a javascript: URL, we\n // still want to warn on the client.\n sanitizeURL('' + expected);\n }\n\n var attributeName = propertyInfo.attributeName;\n var stringValue = null;\n\n if (propertyInfo.type === OVERLOADED_BOOLEAN) {\n if (node.hasAttribute(attributeName)) {\n var value = node.getAttribute(attributeName);\n\n if (value === '') {\n return true;\n }\n\n if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n return value;\n }\n\n if (value === '' + expected) {\n return expected;\n }\n\n return value;\n }\n } else if (node.hasAttribute(attributeName)) {\n if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n // We had an attribute but shouldn't have had one, so read it\n // for the error message.\n return node.getAttribute(attributeName);\n }\n\n if (propertyInfo.type === BOOLEAN) {\n // If this was a boolean, it doesn't matter what the value is\n // the fact that we have it is the same as the expected.\n return expected;\n } // Even if this property uses a namespace we use getAttribute\n // because we assume its namespaced name is the same as our config.\n // To use getAttributeNS we need the local name which we don't have\n // in our config atm.\n\n\n stringValue = node.getAttribute(attributeName);\n }\n\n if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n return stringValue === null ? expected : stringValue;\n } else if (stringValue === '' + expected) {\n return expected;\n } else {\n return stringValue;\n }\n }\n }\n}\n/**\n * Get the value for a attribute on a node. Only used in DEV for SSR validation.\n * The third argument is used as a hint of what the expected value is. Some\n * attributes have multiple equivalent values.\n */\n\nfunction getValueForAttribute(node, name, expected) {\n {\n if (!isAttributeNameSafe(name)) {\n return;\n }\n\n if (!node.hasAttribute(name)) {\n return expected === undefined ? undefined : null;\n }\n\n var value = node.getAttribute(name);\n\n if (value === '' + expected) {\n return expected;\n }\n\n return value;\n }\n}\n/**\n * Sets the value for a property on a node.\n *\n * @param {DOMElement} node\n * @param {string} name\n * @param {*} value\n */\n\nfunction setValueForProperty(node, name, value, isCustomComponentTag) {\n var propertyInfo = getPropertyInfo(name);\n\n if (shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag)) {\n return;\n }\n\n if (shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag)) {\n value = null;\n } // If the prop isn't in the special list, treat it as a simple attribute.\n\n\n if (isCustomComponentTag || propertyInfo === null) {\n if (isAttributeNameSafe(name)) {\n var _attributeName = name;\n\n if (value === null) {\n node.removeAttribute(_attributeName);\n } else {\n node.setAttribute(_attributeName, '' + value);\n }\n }\n\n return;\n }\n\n var mustUseProperty = propertyInfo.mustUseProperty;\n\n if (mustUseProperty) {\n var propertyName = propertyInfo.propertyName;\n\n if (value === null) {\n var type = propertyInfo.type;\n node[propertyName] = type === BOOLEAN ? false : '';\n } else {\n // Contrary to `setAttribute`, object properties are properly\n // `toString`ed by IE8/9.\n node[propertyName] = value;\n }\n\n return;\n } // The rest are treated as attributes with special cases.\n\n\n var attributeName = propertyInfo.attributeName,\n attributeNamespace = propertyInfo.attributeNamespace;\n\n if (value === null) {\n node.removeAttribute(attributeName);\n } else {\n var _type = propertyInfo.type;\n var attributeValue;\n\n if (_type === BOOLEAN || _type === OVERLOADED_BOOLEAN && value === true) {\n // If attribute type is boolean, we know for sure it won't be an execution sink\n // and we won't require Trusted Type here.\n attributeValue = '';\n } else {\n // `setAttribute` with objects becomes only `[object]` in IE8/9,\n // ('' + value) makes it output the correct toString()-value.\n {\n attributeValue = '' + value;\n }\n\n if (propertyInfo.sanitizeURL) {\n sanitizeURL(attributeValue.toString());\n }\n }\n\n if (attributeNamespace) {\n node.setAttributeNS(attributeNamespace, attributeName, attributeValue);\n } else {\n node.setAttribute(attributeName, attributeValue);\n }\n }\n}\n\nvar BEFORE_SLASH_RE = /^(.*)[\\\\\\/]/;\nfunction describeComponentFrame (name, source, ownerName) {\n var sourceInfo = '';\n\n if (source) {\n var path = source.fileName;\n var fileName = path.replace(BEFORE_SLASH_RE, '');\n\n {\n // In DEV, include code for a common special case:\n // prefer \"folder/index.js\" instead of just \"index.js\".\n if (/^index\\./.test(fileName)) {\n var match = path.match(BEFORE_SLASH_RE);\n\n if (match) {\n var pathBeforeSlash = match[1];\n\n if (pathBeforeSlash) {\n var folderName = pathBeforeSlash.replace(BEFORE_SLASH_RE, '');\n fileName = folderName + '/' + fileName;\n }\n }\n }\n }\n\n sourceInfo = ' (at ' + fileName + ':' + source.lineNumber + ')';\n } else if (ownerName) {\n sourceInfo = ' (created by ' + ownerName + ')';\n }\n\n return '\\n in ' + (name || 'Unknown') + sourceInfo;\n}\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar Uninitialized = -1;\nvar Pending = 0;\nvar Resolved = 1;\nvar Rejected = 2;\nfunction refineResolvedLazyComponent(lazyComponent) {\n return lazyComponent._status === Resolved ? lazyComponent._result : null;\n}\nfunction initializeLazyComponentType(lazyComponent) {\n if (lazyComponent._status === Uninitialized) {\n lazyComponent._status = Pending;\n var ctor = lazyComponent._ctor;\n var thenable = ctor();\n lazyComponent._result = thenable;\n thenable.then(function (moduleObject) {\n if (lazyComponent._status === Pending) {\n var defaultExport = moduleObject.default;\n\n {\n if (defaultExport === undefined) {\n error('lazy: Expected the result of a dynamic import() call. ' + 'Instead received: %s\\n\\nYour code should look like: \\n ' + \"const MyComponent = lazy(() => import('./MyComponent'))\", moduleObject);\n }\n }\n\n lazyComponent._status = Resolved;\n lazyComponent._result = defaultExport;\n }\n }, function (error) {\n if (lazyComponent._status === Pending) {\n lazyComponent._status = Rejected;\n lazyComponent._result = error;\n }\n });\n }\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var functionName = innerType.displayName || innerType.name || '';\n return outerType.displayName || (functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName);\n}\n\nfunction getComponentName(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n return 'Context.Consumer';\n\n case REACT_PROVIDER_TYPE:\n return 'Context.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n return getComponentName(type.type);\n\n case REACT_BLOCK_TYPE:\n return getComponentName(type.render);\n\n case REACT_LAZY_TYPE:\n {\n var thenable = type;\n var resolvedThenable = refineResolvedLazyComponent(thenable);\n\n if (resolvedThenable) {\n return getComponentName(resolvedThenable);\n }\n\n break;\n }\n }\n }\n\n return null;\n}\n\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction describeFiber(fiber) {\n switch (fiber.tag) {\n case HostRoot:\n case HostPortal:\n case HostText:\n case Fragment:\n case ContextProvider:\n case ContextConsumer:\n return '';\n\n default:\n var owner = fiber._debugOwner;\n var source = fiber._debugSource;\n var name = getComponentName(fiber.type);\n var ownerName = null;\n\n if (owner) {\n ownerName = getComponentName(owner.type);\n }\n\n return describeComponentFrame(name, source, ownerName);\n }\n}\n\nfunction getStackByFiberInDevAndProd(workInProgress) {\n var info = '';\n var node = workInProgress;\n\n do {\n info += describeFiber(node);\n node = node.return;\n } while (node);\n\n return info;\n}\nvar current = null;\nvar isRendering = false;\nfunction getCurrentFiberOwnerNameInDevOrNull() {\n {\n if (current === null) {\n return null;\n }\n\n var owner = current._debugOwner;\n\n if (owner !== null && typeof owner !== 'undefined') {\n return getComponentName(owner.type);\n }\n }\n\n return null;\n}\nfunction getCurrentFiberStackInDev() {\n {\n if (current === null) {\n return '';\n } // Safe because if current fiber exists, we are reconciling,\n // and it is guaranteed to be the work-in-progress version.\n\n\n return getStackByFiberInDevAndProd(current);\n }\n}\nfunction resetCurrentFiber() {\n {\n ReactDebugCurrentFrame$1.getCurrentStack = null;\n current = null;\n isRendering = false;\n }\n}\nfunction setCurrentFiber(fiber) {\n {\n ReactDebugCurrentFrame$1.getCurrentStack = getCurrentFiberStackInDev;\n current = fiber;\n isRendering = false;\n }\n}\nfunction setIsRendering(rendering) {\n {\n isRendering = rendering;\n }\n}\n\n// Flow does not allow string concatenation of most non-string types. To work\n// around this limitation, we use an opaque type that can only be obtained by\n// passing the value through getToStringValue first.\nfunction toString(value) {\n return '' + value;\n}\nfunction getToStringValue(value) {\n switch (typeof value) {\n case 'boolean':\n case 'number':\n case 'object':\n case 'string':\n case 'undefined':\n return value;\n\n default:\n // function, symbol are assigned as empty strings\n return '';\n }\n}\n\nvar ReactDebugCurrentFrame$2 = null;\nvar ReactControlledValuePropTypes = {\n checkPropTypes: null\n};\n\n{\n ReactDebugCurrentFrame$2 = ReactSharedInternals.ReactDebugCurrentFrame;\n var hasReadOnlyValue = {\n button: true,\n checkbox: true,\n image: true,\n hidden: true,\n radio: true,\n reset: true,\n submit: true\n };\n var propTypes = {\n value: function (props, propName, componentName) {\n if (hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled || props[propName] == null || enableDeprecatedFlareAPI ) {\n return null;\n }\n\n return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n },\n checked: function (props, propName, componentName) {\n if (props.onChange || props.readOnly || props.disabled || props[propName] == null || enableDeprecatedFlareAPI ) {\n return null;\n }\n\n return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n }\n };\n /**\n * Provide a linked `value` attribute for controlled forms. You should not use\n * this outside of the ReactDOM controlled form components.\n */\n\n ReactControlledValuePropTypes.checkPropTypes = function (tagName, props) {\n checkPropTypes(propTypes, props, 'prop', tagName, ReactDebugCurrentFrame$2.getStackAddendum);\n };\n}\n\nfunction isCheckable(elem) {\n var type = elem.type;\n var nodeName = elem.nodeName;\n return nodeName && nodeName.toLowerCase() === 'input' && (type === 'checkbox' || type === 'radio');\n}\n\nfunction getTracker(node) {\n return node._valueTracker;\n}\n\nfunction detachTracker(node) {\n node._valueTracker = null;\n}\n\nfunction getValueFromNode(node) {\n var value = '';\n\n if (!node) {\n return value;\n }\n\n if (isCheckable(node)) {\n value = node.checked ? 'true' : 'false';\n } else {\n value = node.value;\n }\n\n return value;\n}\n\nfunction trackValueOnNode(node) {\n var valueField = isCheckable(node) ? 'checked' : 'value';\n var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField);\n var currentValue = '' + node[valueField]; // if someone has already defined a value or Safari, then bail\n // and don't track value will cause over reporting of changes,\n // but it's better then a hard failure\n // (needed for certain tests that spyOn input values and Safari)\n\n if (node.hasOwnProperty(valueField) || typeof descriptor === 'undefined' || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') {\n return;\n }\n\n var get = descriptor.get,\n set = descriptor.set;\n Object.defineProperty(node, valueField, {\n configurable: true,\n get: function () {\n return get.call(this);\n },\n set: function (value) {\n currentValue = '' + value;\n set.call(this, value);\n }\n }); // We could've passed this the first time\n // but it triggers a bug in IE11 and Edge 14/15.\n // Calling defineProperty() again should be equivalent.\n // https://github.com/facebook/react/issues/11768\n\n Object.defineProperty(node, valueField, {\n enumerable: descriptor.enumerable\n });\n var tracker = {\n getValue: function () {\n return currentValue;\n },\n setValue: function (value) {\n currentValue = '' + value;\n },\n stopTracking: function () {\n detachTracker(node);\n delete node[valueField];\n }\n };\n return tracker;\n}\n\nfunction track(node) {\n if (getTracker(node)) {\n return;\n } // TODO: Once it's just Fiber we can move this to node._wrapperState\n\n\n node._valueTracker = trackValueOnNode(node);\n}\nfunction updateValueIfChanged(node) {\n if (!node) {\n return false;\n }\n\n var tracker = getTracker(node); // if there is no tracker at this point it's unlikely\n // that trying again will succeed\n\n if (!tracker) {\n return true;\n }\n\n var lastValue = tracker.getValue();\n var nextValue = getValueFromNode(node);\n\n if (nextValue !== lastValue) {\n tracker.setValue(nextValue);\n return true;\n }\n\n return false;\n}\n\nvar didWarnValueDefaultValue = false;\nvar didWarnCheckedDefaultChecked = false;\nvar didWarnControlledToUncontrolled = false;\nvar didWarnUncontrolledToControlled = false;\n\nfunction isControlled(props) {\n var usesChecked = props.type === 'checkbox' || props.type === 'radio';\n return usesChecked ? props.checked != null : props.value != null;\n}\n/**\n * Implements an host component that allows setting these optional\n * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.\n *\n * If `checked` or `value` are not supplied (or null/undefined), user actions\n * that affect the checked state or value will trigger updates to the element.\n *\n * If they are supplied (and not null/undefined), the rendered element will not\n * trigger updates to the element. Instead, the props must change in order for\n * the rendered element to be updated.\n *\n * The rendered element will be initialized as unchecked (or `defaultChecked`)\n * with an empty value (or `defaultValue`).\n *\n * See http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html\n */\n\n\nfunction getHostProps(element, props) {\n var node = element;\n var checked = props.checked;\n\n var hostProps = _assign({}, props, {\n defaultChecked: undefined,\n defaultValue: undefined,\n value: undefined,\n checked: checked != null ? checked : node._wrapperState.initialChecked\n });\n\n return hostProps;\n}\nfunction initWrapperState(element, props) {\n {\n ReactControlledValuePropTypes.checkPropTypes('input', props);\n\n if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) {\n error('%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);\n\n didWarnCheckedDefaultChecked = true;\n }\n\n if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {\n error('%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);\n\n didWarnValueDefaultValue = true;\n }\n }\n\n var node = element;\n var defaultValue = props.defaultValue == null ? '' : props.defaultValue;\n node._wrapperState = {\n initialChecked: props.checked != null ? props.checked : props.defaultChecked,\n initialValue: getToStringValue(props.value != null ? props.value : defaultValue),\n controlled: isControlled(props)\n };\n}\nfunction updateChecked(element, props) {\n var node = element;\n var checked = props.checked;\n\n if (checked != null) {\n setValueForProperty(node, 'checked', checked, false);\n }\n}\nfunction updateWrapper(element, props) {\n var node = element;\n\n {\n var controlled = isControlled(props);\n\n if (!node._wrapperState.controlled && controlled && !didWarnUncontrolledToControlled) {\n error('A component is changing an uncontrolled input of type %s to be controlled. ' + 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', props.type);\n\n didWarnUncontrolledToControlled = true;\n }\n\n if (node._wrapperState.controlled && !controlled && !didWarnControlledToUncontrolled) {\n error('A component is changing a controlled input of type %s to be uncontrolled. ' + 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', props.type);\n\n didWarnControlledToUncontrolled = true;\n }\n }\n\n updateChecked(element, props);\n var value = getToStringValue(props.value);\n var type = props.type;\n\n if (value != null) {\n if (type === 'number') {\n if (value === 0 && node.value === '' || // We explicitly want to coerce to number here if possible.\n // eslint-disable-next-line\n node.value != value) {\n node.value = toString(value);\n }\n } else if (node.value !== toString(value)) {\n node.value = toString(value);\n }\n } else if (type === 'submit' || type === 'reset') {\n // Submit/reset inputs need the attribute removed completely to avoid\n // blank-text buttons.\n node.removeAttribute('value');\n return;\n }\n\n {\n // When syncing the value attribute, the value comes from a cascade of\n // properties:\n // 1. The value React property\n // 2. The defaultValue React property\n // 3. Otherwise there should be no change\n if (props.hasOwnProperty('value')) {\n setDefaultValue(node, props.type, value);\n } else if (props.hasOwnProperty('defaultValue')) {\n setDefaultValue(node, props.type, getToStringValue(props.defaultValue));\n }\n }\n\n {\n // When syncing the checked attribute, it only changes when it needs\n // to be removed, such as transitioning from a checkbox into a text input\n if (props.checked == null && props.defaultChecked != null) {\n node.defaultChecked = !!props.defaultChecked;\n }\n }\n}\nfunction postMountWrapper(element, props, isHydrating) {\n var node = element; // Do not assign value if it is already set. This prevents user text input\n // from being lost during SSR hydration.\n\n if (props.hasOwnProperty('value') || props.hasOwnProperty('defaultValue')) {\n var type = props.type;\n var isButton = type === 'submit' || type === 'reset'; // Avoid setting value attribute on submit/reset inputs as it overrides the\n // default value provided by the browser. See: #12872\n\n if (isButton && (props.value === undefined || props.value === null)) {\n return;\n }\n\n var initialValue = toString(node._wrapperState.initialValue); // Do not assign value if it is already set. This prevents user text input\n // from being lost during SSR hydration.\n\n if (!isHydrating) {\n {\n // When syncing the value attribute, the value property should use\n // the wrapperState._initialValue property. This uses:\n //\n // 1. The value React property when present\n // 2. The defaultValue React property when present\n // 3. An empty string\n if (initialValue !== node.value) {\n node.value = initialValue;\n }\n }\n }\n\n {\n // Otherwise, the value attribute is synchronized to the property,\n // so we assign defaultValue to the same thing as the value property\n // assignment step above.\n node.defaultValue = initialValue;\n }\n } // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug\n // this is needed to work around a chrome bug where setting defaultChecked\n // will sometimes influence the value of checked (even after detachment).\n // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416\n // We need to temporarily unset name to avoid disrupting radio button groups.\n\n\n var name = node.name;\n\n if (name !== '') {\n node.name = '';\n }\n\n {\n // When syncing the checked attribute, both the checked property and\n // attribute are assigned at the same time using defaultChecked. This uses:\n //\n // 1. The checked React property when present\n // 2. The defaultChecked React property when present\n // 3. Otherwise, false\n node.defaultChecked = !node.defaultChecked;\n node.defaultChecked = !!node._wrapperState.initialChecked;\n }\n\n if (name !== '') {\n node.name = name;\n }\n}\nfunction restoreControlledState(element, props) {\n var node = element;\n updateWrapper(node, props);\n updateNamedCousins(node, props);\n}\n\nfunction updateNamedCousins(rootNode, props) {\n var name = props.name;\n\n if (props.type === 'radio' && name != null) {\n var queryRoot = rootNode;\n\n while (queryRoot.parentNode) {\n queryRoot = queryRoot.parentNode;\n } // If `rootNode.form` was non-null, then we could try `form.elements`,\n // but that sometimes behaves strangely in IE8. We could also try using\n // `form.getElementsByName`, but that will only return direct children\n // and won't include inputs that use the HTML5 `form=` attribute. Since\n // the input might not even be in a form. It might not even be in the\n // document. Let's just use the local `querySelectorAll` to ensure we don't\n // miss anything.\n\n\n var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type=\"radio\"]');\n\n for (var i = 0; i < group.length; i++) {\n var otherNode = group[i];\n\n if (otherNode === rootNode || otherNode.form !== rootNode.form) {\n continue;\n } // This will throw if radio buttons rendered by different copies of React\n // and the same name are rendered into the same form (same as #1939).\n // That's probably okay; we don't support it just as we don't support\n // mixing React radio buttons with non-React ones.\n\n\n var otherProps = getFiberCurrentPropsFromNode$1(otherNode);\n\n if (!otherProps) {\n {\n throw Error( \"ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.\" );\n }\n } // We need update the tracked value on the named cousin since the value\n // was changed but the input saw no event or value set\n\n\n updateValueIfChanged(otherNode); // If this is a controlled radio button group, forcing the input that\n // was previously checked to update will cause it to be come re-checked\n // as appropriate.\n\n updateWrapper(otherNode, otherProps);\n }\n }\n} // In Chrome, assigning defaultValue to certain input types triggers input validation.\n// For number inputs, the display value loses trailing decimal points. For email inputs,\n// Chrome raises \"The specified value is not a valid email address\".\n//\n// Here we check to see if the defaultValue has actually changed, avoiding these problems\n// when the user is inputting text\n//\n// https://github.com/facebook/react/issues/7253\n\n\nfunction setDefaultValue(node, type, value) {\n if ( // Focused number inputs synchronize on blur. See ChangeEventPlugin.js\n type !== 'number' || node.ownerDocument.activeElement !== node) {\n if (value == null) {\n node.defaultValue = toString(node._wrapperState.initialValue);\n } else if (node.defaultValue !== toString(value)) {\n node.defaultValue = toString(value);\n }\n }\n}\n\nvar didWarnSelectedSetOnOption = false;\nvar didWarnInvalidChild = false;\n\nfunction flattenChildren(children) {\n var content = ''; // Flatten children. We'll warn if they are invalid\n // during validateProps() which runs for hydration too.\n // Note that this would throw on non-element objects.\n // Elements are stringified (which is normally irrelevant\n // but matters for ).\n\n React.Children.forEach(children, function (child) {\n if (child == null) {\n return;\n }\n\n content += child; // Note: we don't warn about invalid children here.\n // Instead, this is done separately below so that\n // it happens during the hydration codepath too.\n });\n return content;\n}\n/**\n * Implements an